@@ -47,93 +47,40 @@ static inline struct sony_td4353_jdi *to_sony_td4353_jdi(struct drm_panel *panel
4747static int sony_td4353_jdi_on (struct sony_td4353_jdi * ctx )
4848{
4949 struct mipi_dsi_device * dsi = ctx -> dsi ;
50- struct device * dev = & dsi -> dev ;
51- int ret ;
50+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
5251
5352 dsi -> mode_flags |= MIPI_DSI_MODE_LPM ;
5453
55- ret = mipi_dsi_dcs_set_column_address (dsi , 0x0000 , 1080 - 1 );
56- if (ret < 0 ) {
57- dev_err (dev , "Failed to set column address: %d\n" , ret );
58- return ret ;
59- }
60-
61- ret = mipi_dsi_dcs_set_page_address (dsi , 0x0000 , 2160 - 1 );
62- if (ret < 0 ) {
63- dev_err (dev , "Failed to set page address: %d\n" , ret );
64- return ret ;
65- }
66-
67- ret = mipi_dsi_dcs_set_tear_scanline (dsi , 0 );
68- if (ret < 0 ) {
69- dev_err (dev , "Failed to set tear scanline: %d\n" , ret );
70- return ret ;
71- }
72-
73- ret = mipi_dsi_dcs_set_tear_on (dsi , MIPI_DSI_DCS_TEAR_MODE_VBLANK );
74- if (ret < 0 ) {
75- dev_err (dev , "Failed to set tear on: %d\n" , ret );
76- return ret ;
77- }
54+ mipi_dsi_dcs_set_column_address_multi (& dsi_ctx , 0x0000 , 1080 - 1 );
55+ mipi_dsi_dcs_set_page_address_multi (& dsi_ctx , 0x0000 , 2160 - 1 );
56+ mipi_dsi_dcs_set_tear_scanline_multi (& dsi_ctx , 0 );
57+ mipi_dsi_dcs_set_tear_on_multi (& dsi_ctx , MIPI_DSI_DCS_TEAR_MODE_VBLANK );
58+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , MIPI_DCS_SET_ADDRESS_MODE , 0x00 );
7859
79- mipi_dsi_dcs_write_seq (dsi , MIPI_DCS_SET_ADDRESS_MODE , 0x00 );
80-
81- ret = mipi_dsi_dcs_set_pixel_format (dsi , 0x77 );
82- if (ret < 0 ) {
83- dev_err (dev , "Failed to set pixel format: %d\n" , ret );
84- return ret ;
85- }
86-
87- mipi_dsi_dcs_write_seq (dsi , MIPI_DCS_SET_PARTIAL_ROWS ,
88- 0x00 , 0x00 , 0x08 , 0x6f );
89-
90- ret = mipi_dsi_dcs_exit_sleep_mode (dsi );
91- if (ret < 0 ) {
92- dev_err (dev , "Failed to exit sleep mode: %d\n" , ret );
93- return ret ;
94- }
95- msleep (70 );
60+ mipi_dsi_dcs_set_pixel_format_multi (& dsi_ctx , 0x77 );
61+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , MIPI_DCS_SET_PARTIAL_ROWS ,
62+ 0x00 , 0x00 , 0x08 , 0x6f );
9663
97- mipi_dsi_dcs_write_seq (dsi , MIPI_DCS_WRITE_MEMORY_START );
64+ mipi_dsi_dcs_exit_sleep_mode_multi (& dsi_ctx );
65+ mipi_dsi_msleep (& dsi_ctx , 70 );
66+ mipi_dsi_dcs_write_seq_multi (& dsi_ctx , MIPI_DCS_WRITE_MEMORY_START );
67+ mipi_dsi_dcs_set_display_on_multi (& dsi_ctx );
9868
99- ret = mipi_dsi_dcs_set_display_on (dsi );
100- if (ret < 0 ) {
101- dev_err (dev , "Failed to turn display on: %d\n" , ret );
102- return ret ;
103- }
104-
105- return 0 ;
69+ return dsi_ctx .accum_err ;
10670}
10771
108- static int sony_td4353_jdi_off (struct sony_td4353_jdi * ctx )
72+ static void sony_td4353_jdi_off (struct sony_td4353_jdi * ctx )
10973{
11074 struct mipi_dsi_device * dsi = ctx -> dsi ;
111- struct device * dev = & dsi -> dev ;
112- int ret ;
75+ struct mipi_dsi_multi_context dsi_ctx = { .dsi = dsi };
11376
11477 dsi -> mode_flags &= ~MIPI_DSI_MODE_LPM ;
11578
116- ret = mipi_dsi_dcs_set_display_off (dsi );
117- if (ret < 0 ) {
118- dev_err (dev , "Failed to set display off: %d\n" , ret );
119- return ret ;
120- }
121- msleep (22 );
122-
123- ret = mipi_dsi_dcs_set_tear_off (dsi );
124- if (ret < 0 ) {
125- dev_err (dev , "Failed to set tear off: %d\n" , ret );
126- return ret ;
127- }
128-
129- ret = mipi_dsi_dcs_enter_sleep_mode (dsi );
130- if (ret < 0 ) {
131- dev_err (dev , "Failed to enter sleep mode: %d\n" , ret );
132- return ret ;
133- }
134- msleep (80 );
135-
136- return 0 ;
79+ mipi_dsi_dcs_set_display_off_multi (& dsi_ctx );
80+ mipi_dsi_msleep (& dsi_ctx , 22 );
81+ mipi_dsi_dcs_set_tear_off_multi (& dsi_ctx );
82+ mipi_dsi_dcs_enter_sleep_mode_multi (& dsi_ctx );
83+ mipi_dsi_msleep (& dsi_ctx , 80 );
13784}
13885
13986static void sony_td4353_assert_reset_gpios (struct sony_td4353_jdi * ctx , int mode )
@@ -146,22 +93,18 @@ static void sony_td4353_assert_reset_gpios(struct sony_td4353_jdi *ctx, int mode
14693static int sony_td4353_jdi_prepare (struct drm_panel * panel )
14794{
14895 struct sony_td4353_jdi * ctx = to_sony_td4353_jdi (panel );
149- struct device * dev = & ctx -> dsi -> dev ;
15096 int ret ;
15197
15298 ret = regulator_bulk_enable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
153- if (ret < 0 ) {
154- dev_err (dev , "Failed to enable regulators: %d\n" , ret );
99+ if (ret < 0 )
155100 return ret ;
156- }
157101
158102 msleep (100 );
159103
160104 sony_td4353_assert_reset_gpios (ctx , 1 );
161105
162106 ret = sony_td4353_jdi_on (ctx );
163107 if (ret < 0 ) {
164- dev_err (dev , "Failed to power on panel: %d\n" , ret );
165108 sony_td4353_assert_reset_gpios (ctx , 0 );
166109 regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
167110 return ret ;
@@ -173,12 +116,8 @@ static int sony_td4353_jdi_prepare(struct drm_panel *panel)
173116static int sony_td4353_jdi_unprepare (struct drm_panel * panel )
174117{
175118 struct sony_td4353_jdi * ctx = to_sony_td4353_jdi (panel );
176- struct device * dev = & ctx -> dsi -> dev ;
177- int ret ;
178119
179- ret = sony_td4353_jdi_off (ctx );
180- if (ret < 0 )
181- dev_err (dev , "Failed to power off panel: %d\n" , ret );
120+ sony_td4353_jdi_off (ctx );
182121
183122 sony_td4353_assert_reset_gpios (ctx , 0 );
184123 regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
0 commit comments