@@ -46,108 +46,73 @@ static void rm69380_reset(struct rm69380_panel *ctx)
4646static int rm69380_on (struct rm69380_panel * ctx )
4747{
4848 struct mipi_dsi_device * dsi = ctx -> dsi [0 ];
49- struct device * dev = & dsi -> dev ;
50- int ret ;
49+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
5150
5251 dsi -> mode_flags |= MIPI_DSI_MODE_LPM ;
5352 if (ctx -> dsi [1 ])
5453 ctx -> dsi [1 ]-> mode_flags |= MIPI_DSI_MODE_LPM ;
5554
56- mipi_dsi_dcs_write_seq (dsi , 0xfe , 0xd4 );
57- mipi_dsi_dcs_write_seq (dsi , 0x00 , 0x80 );
58- mipi_dsi_dcs_write_seq (dsi , 0xfe , 0xd0 );
59- mipi_dsi_dcs_write_seq (dsi , 0x48 , 0x00 );
60- mipi_dsi_dcs_write_seq (dsi , 0xfe , 0x26 );
61- mipi_dsi_dcs_write_seq (dsi , 0x75 , 0x3f );
62- mipi_dsi_dcs_write_seq (dsi , 0x1d , 0x1a );
63- mipi_dsi_dcs_write_seq (dsi , 0xfe , 0x00 );
64- mipi_dsi_dcs_write_seq (dsi , MIPI_DCS_WRITE_CONTROL_DISPLAY , 0x28 );
65- mipi_dsi_dcs_write_seq (dsi , 0xc2 , 0x08 );
66-
67- ret = mipi_dsi_dcs_set_tear_on (dsi , MIPI_DSI_DCS_TEAR_MODE_VBLANK );
68- if (ret < 0 ) {
69- dev_err (dev , "Failed to set tear on: %d\n" , ret );
70- return ret ;
71- }
72-
73- ret = mipi_dsi_dcs_exit_sleep_mode (dsi );
74- if (ret < 0 ) {
75- dev_err (dev , "Failed to exit sleep mode: %d\n" , ret );
76- return ret ;
77- }
78- msleep (20 );
79-
80- ret = mipi_dsi_dcs_set_display_on (dsi );
81- if (ret < 0 ) {
82- dev_err (dev , "Failed to set display on: %d\n" , ret );
83- return ret ;
84- }
85- msleep (36 );
86-
87- return 0 ;
55+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0xfe , 0xd4 );
56+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0x00 , 0x80 );
57+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0xfe , 0xd0 );
58+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0x48 , 0x00 );
59+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0xfe , 0x26 );
60+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0x75 , 0x3f );
61+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0x1d , 0x1a );
62+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0xfe , 0x00 );
63+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , MIPI_DCS_WRITE_CONTROL_DISPLAY , 0x28 );
64+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , 0xc2 , 0x08 );
65+
66+ mipi_dsi_dcs_set_tear_on_multi (& dsi_ctx , MIPI_DSI_DCS_TEAR_MODE_VBLANK );
67+ mipi_dsi_dcs_exit_sleep_mode_multi (& dsi_ctx );
68+ mipi_dsi_msleep (& dsi_ctx , 20 );
69+
70+ mipi_dsi_dcs_set_display_on_multi (& dsi_ctx );
71+ mipi_dsi_msleep (& dsi_ctx , 36 );
72+
73+ return dsi_ctx .accum_err ;
8874}
8975
90- static int rm69380_off (struct rm69380_panel * ctx )
76+ static void rm69380_off (struct rm69380_panel * ctx )
9177{
9278 struct mipi_dsi_device * dsi = ctx -> dsi [0 ];
93- struct device * dev = & dsi -> dev ;
94- int ret ;
79+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
9580
9681 dsi -> mode_flags &= ~MIPI_DSI_MODE_LPM ;
9782 if (ctx -> dsi [1 ])
9883 ctx -> dsi [1 ]-> mode_flags &= ~MIPI_DSI_MODE_LPM ;
9984
100- ret = mipi_dsi_dcs_set_display_off (dsi );
101- if (ret < 0 ) {
102- dev_err (dev , "Failed to set display off: %d\n" , ret );
103- return ret ;
104- }
105- msleep (35 );
106-
107- ret = mipi_dsi_dcs_enter_sleep_mode (dsi );
108- if (ret < 0 ) {
109- dev_err (dev , "Failed to enter sleep mode: %d\n" , ret );
110- return ret ;
111- }
112- msleep (20 );
113-
114- return 0 ;
85+ mipi_dsi_dcs_set_display_off_multi (& dsi_ctx );
86+ mipi_dsi_msleep (& dsi_ctx , 35 );
87+ mipi_dsi_dcs_enter_sleep_mode_multi (& dsi_ctx );
88+ mipi_dsi_msleep (& dsi_ctx , 20 );
11589}
11690
11791static int rm69380_prepare (struct drm_panel * panel )
11892{
11993 struct rm69380_panel * ctx = to_rm69380_panel (panel );
120- struct device * dev = & ctx -> dsi [0 ]-> dev ;
12194 int ret ;
12295
12396 ret = regulator_bulk_enable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
124- if (ret < 0 ) {
125- dev_err (dev , "Failed to enable regulators: %d\n" , ret );
97+ if (ret < 0 )
12698 return ret ;
127- }
12899
129100 rm69380_reset (ctx );
130101
131102 ret = rm69380_on (ctx );
132103 if (ret < 0 ) {
133- dev_err (dev , "Failed to initialize panel: %d\n" , ret );
134104 gpiod_set_value_cansleep (ctx -> reset_gpio , 1 );
135105 regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
136- return ret ;
137106 }
138107
139- return 0 ;
108+ return ret ;
140109}
141110
142111static int rm69380_unprepare (struct drm_panel * panel )
143112{
144113 struct rm69380_panel * ctx = to_rm69380_panel (panel );
145- struct device * dev = & ctx -> dsi [0 ]-> dev ;
146- int ret ;
147114
148- ret = rm69380_off (ctx );
149- if (ret < 0 )
150- dev_err (dev , "Failed to un-initialize panel: %d\n" , ret );
115+ rm69380_off (ctx );
151116
152117 gpiod_set_value_cansleep (ctx -> reset_gpio , 1 );
153118 regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
0 commit comments