@@ -46,108 +46,73 @@ static void rm69380_reset(struct rm69380_panel *ctx)
46
46
static int rm69380_on (struct rm69380_panel * ctx )
47
47
{
48
48
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 };
51
50
52
51
dsi -> mode_flags |= MIPI_DSI_MODE_LPM ;
53
52
if (ctx -> dsi [1 ])
54
53
ctx -> dsi [1 ]-> mode_flags |= MIPI_DSI_MODE_LPM ;
55
54
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 ;
88
74
}
89
75
90
- static int rm69380_off (struct rm69380_panel * ctx )
76
+ static void rm69380_off (struct rm69380_panel * ctx )
91
77
{
92
78
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 };
95
80
96
81
dsi -> mode_flags &= ~MIPI_DSI_MODE_LPM ;
97
82
if (ctx -> dsi [1 ])
98
83
ctx -> dsi [1 ]-> mode_flags &= ~MIPI_DSI_MODE_LPM ;
99
84
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 );
115
89
}
116
90
117
91
static int rm69380_prepare (struct drm_panel * panel )
118
92
{
119
93
struct rm69380_panel * ctx = to_rm69380_panel (panel );
120
- struct device * dev = & ctx -> dsi [0 ]-> dev ;
121
94
int ret ;
122
95
123
96
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 )
126
98
return ret ;
127
- }
128
99
129
100
rm69380_reset (ctx );
130
101
131
102
ret = rm69380_on (ctx );
132
103
if (ret < 0 ) {
133
- dev_err (dev , "Failed to initialize panel: %d\n" , ret );
134
104
gpiod_set_value_cansleep (ctx -> reset_gpio , 1 );
135
105
regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
136
- return ret ;
137
106
}
138
107
139
- return 0 ;
108
+ return ret ;
140
109
}
141
110
142
111
static int rm69380_unprepare (struct drm_panel * panel )
143
112
{
144
113
struct rm69380_panel * ctx = to_rm69380_panel (panel );
145
- struct device * dev = & ctx -> dsi [0 ]-> dev ;
146
- int ret ;
147
114
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 );
151
116
152
117
gpiod_set_value_cansleep (ctx -> reset_gpio , 1 );
153
118
regulator_bulk_disable (ARRAY_SIZE (ctx -> supplies ), ctx -> supplies );
0 commit comments