@@ -47,93 +47,40 @@ static inline struct sony_td4353_jdi *to_sony_td4353_jdi(struct drm_panel *panel
47
47
static int sony_td4353_jdi_on (struct sony_td4353_jdi * ctx )
48
48
{
49
49
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 };
52
51
53
52
dsi -> mode_flags |= MIPI_DSI_MODE_LPM ;
54
53
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 );
78
59
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 );
96
63
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 );
98
68
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 ;
106
70
}
107
71
108
- static int sony_td4353_jdi_off (struct sony_td4353_jdi * ctx )
72
+ static void sony_td4353_jdi_off (struct sony_td4353_jdi * ctx )
109
73
{
110
74
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 };
113
76
114
77
dsi -> mode_flags &= ~MIPI_DSI_MODE_LPM ;
115
78
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 );
137
84
}
138
85
139
86
static 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
146
93
static int sony_td4353_jdi_prepare (struct drm_panel * panel )
147
94
{
148
95
struct sony_td4353_jdi * ctx = to_sony_td4353_jdi (panel );
149
- struct device * dev = & ctx -> dsi -> dev ;
150
96
int ret ;
151
97
152
98
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 )
155
100
return ret ;
156
- }
157
101
158
102
msleep (100 );
159
103
160
104
sony_td4353_assert_reset_gpios (ctx , 1 );
161
105
162
106
ret = sony_td4353_jdi_on (ctx );
163
107
if (ret < 0 ) {
164
- dev_err (dev , "Failed to power on panel: %d\n" , ret );
165
108
sony_td4353_assert_reset_gpios (ctx , 0 );
166
109
regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
167
110
return ret ;
@@ -173,12 +116,8 @@ static int sony_td4353_jdi_prepare(struct drm_panel *panel)
173
116
static int sony_td4353_jdi_unprepare (struct drm_panel * panel )
174
117
{
175
118
struct sony_td4353_jdi * ctx = to_sony_td4353_jdi (panel );
176
- struct device * dev = & ctx -> dsi -> dev ;
177
- int ret ;
178
119
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 );
182
121
183
122
sony_td4353_assert_reset_gpios (ctx , 0 );
184
123
regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
0 commit comments