]> git.ipfire.org Git - thirdparty/openwrt.git/blob
53dcb2b0cb589b44fec1b2a900eda6ceeb1c2f6f
[thirdparty/openwrt.git] /
1 From db807420c2593ef851dda95c7b4293da16681c97 Mon Sep 17 00:00:00 2001
2 From: Dave Stevenson <dave.stevenson@raspberrypi.com>
3 Date: Fri, 16 Dec 2022 15:19:33 +0000
4 Subject: [PATCH 0947/1085] drm/panel: ili9881: Add configuration for the new
5 panels
6
7 Add configuration for the 5" and 7" Raspberry Pi 720x1280
8 DSI panels based on ili9881.
9
10 Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
11 ---
12 drivers/gpu/drm/panel/panel-ilitek-ili9881c.c | 436 ++++++++++++++++++
13 1 file changed, 436 insertions(+)
14
15 --- a/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
16 +++ b/drivers/gpu/drm/panel/panel-ilitek-ili9881c.c
17 @@ -1262,6 +1262,387 @@ static const struct ili9881c_instr cfaf7
18 ILI9881C_COMMAND_INSTR(0xD3, 0x39),
19 };
20
21 +static const struct ili9881c_instr rpi_5inch_init[] = {
22 + ILI9881C_SWITCH_PAGE_INSTR(3),
23 + ILI9881C_COMMAND_INSTR(0x01, 0x00),
24 + ILI9881C_COMMAND_INSTR(0x02, 0x00),
25 + ILI9881C_COMMAND_INSTR(0x03, 0x73),
26 + ILI9881C_COMMAND_INSTR(0x04, 0x73),
27 + ILI9881C_COMMAND_INSTR(0x05, 0x00),
28 + ILI9881C_COMMAND_INSTR(0x06, 0x06),
29 + ILI9881C_COMMAND_INSTR(0x07, 0x02),
30 + ILI9881C_COMMAND_INSTR(0x08, 0x00),
31 + ILI9881C_COMMAND_INSTR(0x09, 0x01),
32 + ILI9881C_COMMAND_INSTR(0x0a, 0x01),
33 + ILI9881C_COMMAND_INSTR(0x0b, 0x01),
34 + ILI9881C_COMMAND_INSTR(0x0c, 0x01),
35 + ILI9881C_COMMAND_INSTR(0x0d, 0x01),
36 + ILI9881C_COMMAND_INSTR(0x0e, 0x01),
37 + ILI9881C_COMMAND_INSTR(0x0f, 0x01),
38 + ILI9881C_COMMAND_INSTR(0x10, 0x01),
39 + ILI9881C_COMMAND_INSTR(0x11, 0x00),
40 + ILI9881C_COMMAND_INSTR(0x12, 0x00),
41 + ILI9881C_COMMAND_INSTR(0x13, 0x01),
42 + ILI9881C_COMMAND_INSTR(0x14, 0x00),
43 + ILI9881C_COMMAND_INSTR(0x15, 0x00),
44 + ILI9881C_COMMAND_INSTR(0x16, 0x00),
45 + ILI9881C_COMMAND_INSTR(0x17, 0x00),
46 + ILI9881C_COMMAND_INSTR(0x18, 0x00),
47 + ILI9881C_COMMAND_INSTR(0x19, 0x00),
48 + ILI9881C_COMMAND_INSTR(0x1a, 0x00),
49 + ILI9881C_COMMAND_INSTR(0x1b, 0x00),
50 + ILI9881C_COMMAND_INSTR(0x1c, 0x00),
51 + ILI9881C_COMMAND_INSTR(0x1d, 0x00),
52 + ILI9881C_COMMAND_INSTR(0x1e, 0xc0),
53 + ILI9881C_COMMAND_INSTR(0x1f, 0x80),
54 + ILI9881C_COMMAND_INSTR(0x20, 0x04),
55 + ILI9881C_COMMAND_INSTR(0x21, 0x03),
56 + ILI9881C_COMMAND_INSTR(0x22, 0x00),
57 + ILI9881C_COMMAND_INSTR(0x23, 0x00),
58 + ILI9881C_COMMAND_INSTR(0x24, 0x00),
59 + ILI9881C_COMMAND_INSTR(0x25, 0x00),
60 + ILI9881C_COMMAND_INSTR(0x26, 0x00),
61 + ILI9881C_COMMAND_INSTR(0x27, 0x00),
62 + ILI9881C_COMMAND_INSTR(0x28, 0x33),
63 + ILI9881C_COMMAND_INSTR(0x29, 0x03),
64 + ILI9881C_COMMAND_INSTR(0x2a, 0x00),
65 + ILI9881C_COMMAND_INSTR(0x2b, 0x00),
66 + ILI9881C_COMMAND_INSTR(0x2c, 0x00),
67 + ILI9881C_COMMAND_INSTR(0x2d, 0x00),
68 + ILI9881C_COMMAND_INSTR(0x2e, 0x00),
69 + ILI9881C_COMMAND_INSTR(0x2f, 0x00),
70 + ILI9881C_COMMAND_INSTR(0x30, 0x00),
71 + ILI9881C_COMMAND_INSTR(0x31, 0x00),
72 + ILI9881C_COMMAND_INSTR(0x32, 0x00),
73 + ILI9881C_COMMAND_INSTR(0x33, 0x00),
74 + ILI9881C_COMMAND_INSTR(0x34, 0x03),
75 + ILI9881C_COMMAND_INSTR(0x35, 0x00),
76 + ILI9881C_COMMAND_INSTR(0x36, 0x03),
77 + ILI9881C_COMMAND_INSTR(0x37, 0x00),
78 + ILI9881C_COMMAND_INSTR(0x38, 0x00),
79 + ILI9881C_COMMAND_INSTR(0x39, 0x00),
80 + ILI9881C_COMMAND_INSTR(0x3a, 0x00),
81 + ILI9881C_COMMAND_INSTR(0x3b, 0x00),
82 + ILI9881C_COMMAND_INSTR(0x3c, 0x00),
83 + ILI9881C_COMMAND_INSTR(0x3d, 0x00),
84 + ILI9881C_COMMAND_INSTR(0x3e, 0x00),
85 + ILI9881C_COMMAND_INSTR(0x3f, 0x00),
86 + ILI9881C_COMMAND_INSTR(0x40, 0x00),
87 + ILI9881C_COMMAND_INSTR(0x41, 0x00),
88 + ILI9881C_COMMAND_INSTR(0x42, 0x00),
89 + ILI9881C_COMMAND_INSTR(0x43, 0x00),
90 + ILI9881C_COMMAND_INSTR(0x44, 0x00),
91 + ILI9881C_COMMAND_INSTR(0x50, 0x01),
92 + ILI9881C_COMMAND_INSTR(0x51, 0x23),
93 + ILI9881C_COMMAND_INSTR(0x52, 0x45),
94 + ILI9881C_COMMAND_INSTR(0x53, 0x67),
95 + ILI9881C_COMMAND_INSTR(0x54, 0x89),
96 + ILI9881C_COMMAND_INSTR(0x55, 0xab),
97 + ILI9881C_COMMAND_INSTR(0x56, 0x01),
98 + ILI9881C_COMMAND_INSTR(0x57, 0x23),
99 + ILI9881C_COMMAND_INSTR(0x58, 0x45),
100 + ILI9881C_COMMAND_INSTR(0x59, 0x67),
101 + ILI9881C_COMMAND_INSTR(0x5a, 0x89),
102 + ILI9881C_COMMAND_INSTR(0x5b, 0xab),
103 + ILI9881C_COMMAND_INSTR(0x5c, 0xcd),
104 + ILI9881C_COMMAND_INSTR(0x5d, 0xef),
105 + ILI9881C_COMMAND_INSTR(0x5e, 0x10),
106 + ILI9881C_COMMAND_INSTR(0x5f, 0x09),
107 + ILI9881C_COMMAND_INSTR(0x60, 0x08),
108 + ILI9881C_COMMAND_INSTR(0x61, 0x0f),
109 + ILI9881C_COMMAND_INSTR(0x62, 0x0e),
110 + ILI9881C_COMMAND_INSTR(0x63, 0x0d),
111 + ILI9881C_COMMAND_INSTR(0x64, 0x0c),
112 + ILI9881C_COMMAND_INSTR(0x65, 0x02),
113 + ILI9881C_COMMAND_INSTR(0x66, 0x02),
114 + ILI9881C_COMMAND_INSTR(0x67, 0x02),
115 + ILI9881C_COMMAND_INSTR(0x68, 0x02),
116 + ILI9881C_COMMAND_INSTR(0x69, 0x02),
117 + ILI9881C_COMMAND_INSTR(0x6a, 0x02),
118 + ILI9881C_COMMAND_INSTR(0x6b, 0x02),
119 + ILI9881C_COMMAND_INSTR(0x6c, 0x02),
120 + ILI9881C_COMMAND_INSTR(0x6d, 0x02),
121 + ILI9881C_COMMAND_INSTR(0x6e, 0x02),
122 + ILI9881C_COMMAND_INSTR(0x6f, 0x02),
123 + ILI9881C_COMMAND_INSTR(0x70, 0x02),
124 + ILI9881C_COMMAND_INSTR(0x71, 0x06),
125 + ILI9881C_COMMAND_INSTR(0x72, 0x07),
126 + ILI9881C_COMMAND_INSTR(0x73, 0x02),
127 + ILI9881C_COMMAND_INSTR(0x74, 0x02),
128 + ILI9881C_COMMAND_INSTR(0x75, 0x06),
129 + ILI9881C_COMMAND_INSTR(0x76, 0x07),
130 + ILI9881C_COMMAND_INSTR(0x77, 0x0e),
131 + ILI9881C_COMMAND_INSTR(0x78, 0x0f),
132 + ILI9881C_COMMAND_INSTR(0x79, 0x0c),
133 + ILI9881C_COMMAND_INSTR(0x7a, 0x0d),
134 + ILI9881C_COMMAND_INSTR(0x7b, 0x02),
135 + ILI9881C_COMMAND_INSTR(0x7c, 0x02),
136 + ILI9881C_COMMAND_INSTR(0x7d, 0x02),
137 + ILI9881C_COMMAND_INSTR(0x7e, 0x02),
138 + ILI9881C_COMMAND_INSTR(0x7f, 0x02),
139 + ILI9881C_COMMAND_INSTR(0x80, 0x02),
140 + ILI9881C_COMMAND_INSTR(0x81, 0x02),
141 + ILI9881C_COMMAND_INSTR(0x82, 0x02),
142 + ILI9881C_COMMAND_INSTR(0x83, 0x02),
143 + ILI9881C_COMMAND_INSTR(0x84, 0x02),
144 + ILI9881C_COMMAND_INSTR(0x85, 0x02),
145 + ILI9881C_COMMAND_INSTR(0x86, 0x02),
146 + ILI9881C_COMMAND_INSTR(0x87, 0x09),
147 + ILI9881C_COMMAND_INSTR(0x88, 0x08),
148 + ILI9881C_COMMAND_INSTR(0x89, 0x02),
149 + ILI9881C_COMMAND_INSTR(0x8A, 0x02),
150 + ILI9881C_SWITCH_PAGE_INSTR(4),
151 + ILI9881C_COMMAND_INSTR(0x6C, 0x15),
152 + ILI9881C_COMMAND_INSTR(0x6E, 0x2a),
153 + ILI9881C_COMMAND_INSTR(0x6F, 0x57),
154 + ILI9881C_COMMAND_INSTR(0x3A, 0xa4),
155 + ILI9881C_COMMAND_INSTR(0x8D, 0x1a),
156 + ILI9881C_COMMAND_INSTR(0x87, 0xba),
157 + ILI9881C_COMMAND_INSTR(0x26, 0x76),
158 + ILI9881C_COMMAND_INSTR(0xB2, 0xd1),
159 + ILI9881C_SWITCH_PAGE_INSTR(1),
160 + ILI9881C_COMMAND_INSTR(0x22, 0x0A),
161 + ILI9881C_COMMAND_INSTR(0x31, 0x00),
162 + ILI9881C_COMMAND_INSTR(0x53, 0x35),
163 + ILI9881C_COMMAND_INSTR(0x55, 0x50),
164 + ILI9881C_COMMAND_INSTR(0x50, 0xaf),
165 + ILI9881C_COMMAND_INSTR(0x51, 0xaf),
166 + ILI9881C_COMMAND_INSTR(0x60, 0x14),
167 + ILI9881C_COMMAND_INSTR(0xA0, 0x08),
168 + ILI9881C_COMMAND_INSTR(0xA1, 0x1d),
169 + ILI9881C_COMMAND_INSTR(0xA2, 0x2c),
170 + ILI9881C_COMMAND_INSTR(0xA3, 0x14),
171 + ILI9881C_COMMAND_INSTR(0xA4, 0x19),
172 + ILI9881C_COMMAND_INSTR(0xA5, 0x2e),
173 + ILI9881C_COMMAND_INSTR(0xA6, 0x22),
174 + ILI9881C_COMMAND_INSTR(0xA7, 0x23),
175 + ILI9881C_COMMAND_INSTR(0xA8, 0x97),
176 + ILI9881C_COMMAND_INSTR(0xA9, 0x1e),
177 + ILI9881C_COMMAND_INSTR(0xAA, 0x29),
178 + ILI9881C_COMMAND_INSTR(0xAB, 0x7b),
179 + ILI9881C_COMMAND_INSTR(0xAC, 0x18),
180 + ILI9881C_COMMAND_INSTR(0xAD, 0x17),
181 + ILI9881C_COMMAND_INSTR(0xAE, 0x4b),
182 + ILI9881C_COMMAND_INSTR(0xAF, 0x1f),
183 + ILI9881C_COMMAND_INSTR(0xB0, 0x27),
184 + ILI9881C_COMMAND_INSTR(0xB1, 0x52),
185 + ILI9881C_COMMAND_INSTR(0xB2, 0x63),
186 + ILI9881C_COMMAND_INSTR(0xB3, 0x39),
187 + ILI9881C_COMMAND_INSTR(0xC0, 0x08),
188 + ILI9881C_COMMAND_INSTR(0xC1, 0x1d),
189 + ILI9881C_COMMAND_INSTR(0xC2, 0x2c),
190 + ILI9881C_COMMAND_INSTR(0xC3, 0x14),
191 + ILI9881C_COMMAND_INSTR(0xC4, 0x19),
192 + ILI9881C_COMMAND_INSTR(0xC5, 0x2e),
193 + ILI9881C_COMMAND_INSTR(0xC6, 0x22),
194 + ILI9881C_COMMAND_INSTR(0xC7, 0x23),
195 + ILI9881C_COMMAND_INSTR(0xC8, 0x97),
196 + ILI9881C_COMMAND_INSTR(0xC9, 0x1e),
197 + ILI9881C_COMMAND_INSTR(0xCA, 0x29),
198 + ILI9881C_COMMAND_INSTR(0xCB, 0x7b),
199 + ILI9881C_COMMAND_INSTR(0xCC, 0x18),
200 + ILI9881C_COMMAND_INSTR(0xCD, 0x17),
201 + ILI9881C_COMMAND_INSTR(0xCE, 0x4b),
202 + ILI9881C_COMMAND_INSTR(0xCF, 0x1f),
203 + ILI9881C_COMMAND_INSTR(0xD0, 0x27),
204 + ILI9881C_COMMAND_INSTR(0xD1, 0x52),
205 + ILI9881C_COMMAND_INSTR(0xD2, 0x63),
206 + ILI9881C_COMMAND_INSTR(0xD3, 0x39),
207 +};
208 +
209 +static const struct ili9881c_instr rpi_7inch_init[] = {
210 + ILI9881C_SWITCH_PAGE_INSTR(3),
211 + ILI9881C_COMMAND_INSTR(0x01, 0x00),
212 + ILI9881C_COMMAND_INSTR(0x02, 0x00),
213 + ILI9881C_COMMAND_INSTR(0x03, 0x73),
214 + ILI9881C_COMMAND_INSTR(0x04, 0x00),
215 + ILI9881C_COMMAND_INSTR(0x05, 0x00),
216 + ILI9881C_COMMAND_INSTR(0x06, 0x0a),
217 + ILI9881C_COMMAND_INSTR(0x07, 0x00),
218 + ILI9881C_COMMAND_INSTR(0x08, 0x00),
219 + ILI9881C_COMMAND_INSTR(0x09, 0x61),
220 + ILI9881C_COMMAND_INSTR(0x0a, 0x00),
221 + ILI9881C_COMMAND_INSTR(0x0b, 0x00),
222 + ILI9881C_COMMAND_INSTR(0x0c, 0x01),
223 + ILI9881C_COMMAND_INSTR(0x0d, 0x00),
224 + ILI9881C_COMMAND_INSTR(0x0e, 0x00),
225 + ILI9881C_COMMAND_INSTR(0x0f, 0x61),
226 + ILI9881C_COMMAND_INSTR(0x10, 0x61),
227 + ILI9881C_COMMAND_INSTR(0x11, 0x00),
228 + ILI9881C_COMMAND_INSTR(0x12, 0x00),
229 + ILI9881C_COMMAND_INSTR(0x13, 0x00),
230 + ILI9881C_COMMAND_INSTR(0x14, 0x00),
231 + ILI9881C_COMMAND_INSTR(0x15, 0x00),
232 + ILI9881C_COMMAND_INSTR(0x16, 0x00),
233 + ILI9881C_COMMAND_INSTR(0x17, 0x00),
234 + ILI9881C_COMMAND_INSTR(0x18, 0x00),
235 + ILI9881C_COMMAND_INSTR(0x19, 0x00),
236 + ILI9881C_COMMAND_INSTR(0x1a, 0x00),
237 + ILI9881C_COMMAND_INSTR(0x1b, 0x00),
238 + ILI9881C_COMMAND_INSTR(0x1c, 0x00),
239 + ILI9881C_COMMAND_INSTR(0x1d, 0x00),
240 + ILI9881C_COMMAND_INSTR(0x1e, 0x40),
241 + ILI9881C_COMMAND_INSTR(0x1f, 0x80),
242 + ILI9881C_COMMAND_INSTR(0x20, 0x06),
243 + ILI9881C_COMMAND_INSTR(0x21, 0x01),
244 + ILI9881C_COMMAND_INSTR(0x22, 0x00),
245 + ILI9881C_COMMAND_INSTR(0x23, 0x00),
246 + ILI9881C_COMMAND_INSTR(0x24, 0x00),
247 + ILI9881C_COMMAND_INSTR(0x25, 0x00),
248 + ILI9881C_COMMAND_INSTR(0x26, 0x00),
249 + ILI9881C_COMMAND_INSTR(0x27, 0x00),
250 + ILI9881C_COMMAND_INSTR(0x28, 0x33),
251 + ILI9881C_COMMAND_INSTR(0x29, 0x03),
252 + ILI9881C_COMMAND_INSTR(0x2a, 0x00),
253 + ILI9881C_COMMAND_INSTR(0x2b, 0x00),
254 + ILI9881C_COMMAND_INSTR(0x2c, 0x00),
255 + ILI9881C_COMMAND_INSTR(0x2d, 0x00),
256 + ILI9881C_COMMAND_INSTR(0x2e, 0x00),
257 + ILI9881C_COMMAND_INSTR(0x2f, 0x00),
258 + ILI9881C_COMMAND_INSTR(0x30, 0x00),
259 + ILI9881C_COMMAND_INSTR(0x31, 0x00),
260 + ILI9881C_COMMAND_INSTR(0x32, 0x00),
261 + ILI9881C_COMMAND_INSTR(0x33, 0x00),
262 + ILI9881C_COMMAND_INSTR(0x34, 0x04),
263 + ILI9881C_COMMAND_INSTR(0x35, 0x00),
264 + ILI9881C_COMMAND_INSTR(0x36, 0x00),
265 + ILI9881C_COMMAND_INSTR(0x37, 0x00),
266 + ILI9881C_COMMAND_INSTR(0x38, 0x3c),
267 + ILI9881C_COMMAND_INSTR(0x39, 0x00),
268 + ILI9881C_COMMAND_INSTR(0x3a, 0x00),
269 + ILI9881C_COMMAND_INSTR(0x3b, 0x00),
270 + ILI9881C_COMMAND_INSTR(0x3c, 0x00),
271 + ILI9881C_COMMAND_INSTR(0x3d, 0x00),
272 + ILI9881C_COMMAND_INSTR(0x3e, 0x00),
273 + ILI9881C_COMMAND_INSTR(0x3f, 0x00),
274 + ILI9881C_COMMAND_INSTR(0x40, 0x00),
275 + ILI9881C_COMMAND_INSTR(0x41, 0x00),
276 + ILI9881C_COMMAND_INSTR(0x42, 0x00),
277 + ILI9881C_COMMAND_INSTR(0x43, 0x00),
278 + ILI9881C_COMMAND_INSTR(0x44, 0x00),
279 + ILI9881C_COMMAND_INSTR(0x50, 0x10),
280 + ILI9881C_COMMAND_INSTR(0x51, 0x32),
281 + ILI9881C_COMMAND_INSTR(0x52, 0x54),
282 + ILI9881C_COMMAND_INSTR(0x53, 0x76),
283 + ILI9881C_COMMAND_INSTR(0x54, 0x98),
284 + ILI9881C_COMMAND_INSTR(0x55, 0xba),
285 + ILI9881C_COMMAND_INSTR(0x56, 0x10),
286 + ILI9881C_COMMAND_INSTR(0x57, 0x32),
287 + ILI9881C_COMMAND_INSTR(0x58, 0x54),
288 + ILI9881C_COMMAND_INSTR(0x59, 0x76),
289 + ILI9881C_COMMAND_INSTR(0x5a, 0x98),
290 + ILI9881C_COMMAND_INSTR(0x5b, 0xba),
291 + ILI9881C_COMMAND_INSTR(0x5c, 0xdc),
292 + ILI9881C_COMMAND_INSTR(0x5d, 0xfe),
293 + ILI9881C_COMMAND_INSTR(0x5e, 0x00),
294 + ILI9881C_COMMAND_INSTR(0x5f, 0x0e),
295 + ILI9881C_COMMAND_INSTR(0x60, 0x0f),
296 + ILI9881C_COMMAND_INSTR(0x61, 0x0c),
297 + ILI9881C_COMMAND_INSTR(0x62, 0x0d),
298 + ILI9881C_COMMAND_INSTR(0x63, 0x06),
299 + ILI9881C_COMMAND_INSTR(0x64, 0x07),
300 + ILI9881C_COMMAND_INSTR(0x65, 0x02),
301 + ILI9881C_COMMAND_INSTR(0x66, 0x02),
302 + ILI9881C_COMMAND_INSTR(0x67, 0x02),
303 + ILI9881C_COMMAND_INSTR(0x68, 0x02),
304 + ILI9881C_COMMAND_INSTR(0x69, 0x01),
305 + ILI9881C_COMMAND_INSTR(0x6a, 0x00),
306 + ILI9881C_COMMAND_INSTR(0x6b, 0x02),
307 + ILI9881C_COMMAND_INSTR(0x6c, 0x15),
308 + ILI9881C_COMMAND_INSTR(0x6d, 0x14),
309 + ILI9881C_COMMAND_INSTR(0x6e, 0x02),
310 + ILI9881C_COMMAND_INSTR(0x6f, 0x02),
311 + ILI9881C_COMMAND_INSTR(0x70, 0x02),
312 + ILI9881C_COMMAND_INSTR(0x71, 0x02),
313 + ILI9881C_COMMAND_INSTR(0x72, 0x02),
314 + ILI9881C_COMMAND_INSTR(0x73, 0x02),
315 + ILI9881C_COMMAND_INSTR(0x74, 0x02),
316 + ILI9881C_COMMAND_INSTR(0x75, 0x0e),
317 + ILI9881C_COMMAND_INSTR(0x76, 0x0f),
318 + ILI9881C_COMMAND_INSTR(0x77, 0x0c),
319 + ILI9881C_COMMAND_INSTR(0x78, 0x0d),
320 + ILI9881C_COMMAND_INSTR(0x79, 0x06),
321 + ILI9881C_COMMAND_INSTR(0x7a, 0x07),
322 + ILI9881C_COMMAND_INSTR(0x7b, 0x02),
323 + ILI9881C_COMMAND_INSTR(0x7c, 0x02),
324 + ILI9881C_COMMAND_INSTR(0x7d, 0x02),
325 + ILI9881C_COMMAND_INSTR(0x7e, 0x02),
326 + ILI9881C_COMMAND_INSTR(0x7f, 0x01),
327 + ILI9881C_COMMAND_INSTR(0x80, 0x00),
328 + ILI9881C_COMMAND_INSTR(0x81, 0x02),
329 + ILI9881C_COMMAND_INSTR(0x82, 0x14),
330 + ILI9881C_COMMAND_INSTR(0x83, 0x15),
331 + ILI9881C_COMMAND_INSTR(0x84, 0x02),
332 + ILI9881C_COMMAND_INSTR(0x85, 0x02),
333 + ILI9881C_COMMAND_INSTR(0x86, 0x02),
334 + ILI9881C_COMMAND_INSTR(0x87, 0x02),
335 + ILI9881C_COMMAND_INSTR(0x88, 0x02),
336 + ILI9881C_COMMAND_INSTR(0x89, 0x02),
337 + ILI9881C_COMMAND_INSTR(0x8A, 0x02),
338 + ILI9881C_SWITCH_PAGE_INSTR(4),
339 + ILI9881C_COMMAND_INSTR(0x6C, 0x15),
340 + ILI9881C_COMMAND_INSTR(0x6E, 0x2A),
341 + ILI9881C_COMMAND_INSTR(0x6F, 0x33),
342 + ILI9881C_COMMAND_INSTR(0x3B, 0x98),
343 + ILI9881C_COMMAND_INSTR(0x3a, 0x94),
344 + ILI9881C_COMMAND_INSTR(0x8D, 0x14),
345 + ILI9881C_COMMAND_INSTR(0x87, 0xBA),
346 + ILI9881C_COMMAND_INSTR(0x26, 0x76),
347 + ILI9881C_COMMAND_INSTR(0xB2, 0xD1),
348 + ILI9881C_COMMAND_INSTR(0xB5, 0x06),
349 + ILI9881C_COMMAND_INSTR(0x38, 0x01),
350 + ILI9881C_COMMAND_INSTR(0x39, 0x00),
351 + ILI9881C_SWITCH_PAGE_INSTR(1),
352 + ILI9881C_COMMAND_INSTR(0x22, 0x0A),
353 + ILI9881C_COMMAND_INSTR(0x31, 0x00),
354 + ILI9881C_COMMAND_INSTR(0x53, 0x7d),
355 + ILI9881C_COMMAND_INSTR(0x55, 0x8f),
356 + ILI9881C_COMMAND_INSTR(0x40, 0x33),
357 + ILI9881C_COMMAND_INSTR(0x50, 0x96),
358 + ILI9881C_COMMAND_INSTR(0x51, 0x96),
359 + ILI9881C_COMMAND_INSTR(0x60, 0x23),
360 + ILI9881C_COMMAND_INSTR(0xA0, 0x08),
361 + ILI9881C_COMMAND_INSTR(0xA1, 0x1d),
362 + ILI9881C_COMMAND_INSTR(0xA2, 0x2a),
363 + ILI9881C_COMMAND_INSTR(0xA3, 0x10),
364 + ILI9881C_COMMAND_INSTR(0xA4, 0x15),
365 + ILI9881C_COMMAND_INSTR(0xA5, 0x28),
366 + ILI9881C_COMMAND_INSTR(0xA6, 0x1c),
367 + ILI9881C_COMMAND_INSTR(0xA7, 0x1d),
368 + ILI9881C_COMMAND_INSTR(0xA8, 0x7e),
369 + ILI9881C_COMMAND_INSTR(0xA9, 0x1d),
370 + ILI9881C_COMMAND_INSTR(0xAA, 0x29),
371 + ILI9881C_COMMAND_INSTR(0xAB, 0x6b),
372 + ILI9881C_COMMAND_INSTR(0xAC, 0x1a),
373 + ILI9881C_COMMAND_INSTR(0xAD, 0x18),
374 + ILI9881C_COMMAND_INSTR(0xAE, 0x4b),
375 + ILI9881C_COMMAND_INSTR(0xAF, 0x20),
376 + ILI9881C_COMMAND_INSTR(0xB0, 0x27),
377 + ILI9881C_COMMAND_INSTR(0xB1, 0x50),
378 + ILI9881C_COMMAND_INSTR(0xB2, 0x64),
379 + ILI9881C_COMMAND_INSTR(0xB3, 0x39),
380 + ILI9881C_COMMAND_INSTR(0xC0, 0x08),
381 + ILI9881C_COMMAND_INSTR(0xC1, 0x1d),
382 + ILI9881C_COMMAND_INSTR(0xC2, 0x2a),
383 + ILI9881C_COMMAND_INSTR(0xC3, 0x10),
384 + ILI9881C_COMMAND_INSTR(0xC4, 0x15),
385 + ILI9881C_COMMAND_INSTR(0xC5, 0x28),
386 + ILI9881C_COMMAND_INSTR(0xC6, 0x1c),
387 + ILI9881C_COMMAND_INSTR(0xC7, 0x1d),
388 + ILI9881C_COMMAND_INSTR(0xC8, 0x7e),
389 + ILI9881C_COMMAND_INSTR(0xC9, 0x1d),
390 + ILI9881C_COMMAND_INSTR(0xCA, 0x29),
391 + ILI9881C_COMMAND_INSTR(0xCB, 0x6b),
392 + ILI9881C_COMMAND_INSTR(0xCC, 0x1a),
393 + ILI9881C_COMMAND_INSTR(0xCD, 0x18),
394 + ILI9881C_COMMAND_INSTR(0xCE, 0x4b),
395 + ILI9881C_COMMAND_INSTR(0xCF, 0x20),
396 + ILI9881C_COMMAND_INSTR(0xD0, 0x27),
397 + ILI9881C_COMMAND_INSTR(0xD1, 0x50),
398 + ILI9881C_COMMAND_INSTR(0xD2, 0x64),
399 + ILI9881C_COMMAND_INSTR(0xD3, 0x39),
400 +};
401 +
402 static inline struct ili9881c *panel_to_ili9881c(struct drm_panel *panel)
403 {
404 return container_of(panel, struct ili9881c, panel);
405 @@ -1477,6 +1858,40 @@ static const struct drm_display_mode cfa
406 .height_mm = 1108
407 };
408
409 +static const struct drm_display_mode rpi_5inch_default_mode = {
410 + .clock = 83333,
411 +
412 + .hdisplay = 720,
413 + .hsync_start = 720 + 110,
414 + .hsync_end = 720 + 110 + 2,
415 + .htotal = 720 + 110 + 2 + 105,
416 +
417 + .vdisplay = 1280,
418 + .vsync_start = 1280 + 100,
419 + .vsync_end = 1280 + 100 + 2,
420 + .vtotal = 1280 + 100 + 2 + 100,
421 +
422 + .width_mm = 62,
423 + .height_mm = 110,
424 +};
425 +
426 +static const struct drm_display_mode rpi_7inch_default_mode = {
427 + .clock = 83330,
428 +
429 + .hdisplay = 720,
430 + .hsync_start = 720 + 239,
431 + .hsync_end = 720 + 239 + 33,
432 + .htotal = 720 + 239 + 33 + 50,
433 +
434 + .vdisplay = 1280,
435 + .vsync_start = 1280 + 20,
436 + .vsync_end = 1280 + 20 + 2,
437 + .vtotal = 1280 + 20 + 2 + 30,
438 +
439 + .width_mm = 90,
440 + .height_mm = 151,
441 +};
442 +
443 static int ili9881c_get_modes(struct drm_panel *panel,
444 struct drm_connector *connector)
445 {
446 @@ -1581,6 +1996,9 @@ static void ili9881c_dsi_remove(struct m
447
448 mipi_dsi_detach(dsi);
449 drm_panel_remove(&ctx->panel);
450 +
451 + gpiod_set_value_cansleep(ctx->reset, 1);
452 + regulator_disable(ctx->power);
453 }
454
455 static const struct ili9881c_desc lhr050h41_desc = {
456 @@ -1632,6 +2050,22 @@ static const struct ili9881c_desc cfaf72
457 .lanes = 4,
458 };
459
460 +static const struct ili9881c_desc rpi_5inch_desc = {
461 + .init = rpi_5inch_init,
462 + .init_length = ARRAY_SIZE(rpi_5inch_init),
463 + .mode = &rpi_5inch_default_mode,
464 + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM,
465 + .lanes = 2,
466 +};
467 +
468 +static const struct ili9881c_desc rpi_7inch_desc = {
469 + .init = rpi_7inch_init,
470 + .init_length = ARRAY_SIZE(rpi_7inch_init),
471 + .mode = &rpi_7inch_default_mode,
472 + .mode_flags = MIPI_DSI_MODE_VIDEO | MIPI_DSI_MODE_LPM,
473 + .lanes = 2,
474 +};
475 +
476 static const struct of_device_id ili9881c_of_match[] = {
477 { .compatible = "bananapi,lhr050h41", .data = &lhr050h41_desc },
478 { .compatible = "feixin,k101-im2byl02", .data = &k101_im2byl02_desc },
479 @@ -1639,6 +2073,8 @@ static const struct of_device_id ili9881
480 { .compatible = "tdo,tl050hdv35", .data = &tl050hdv35_desc },
481 { .compatible = "wanchanglong,w552946aba", .data = &w552946aba_desc },
482 { .compatible = "crystalfontz,cfaf7201280a0_050tx", .data = &cfaf7201280a0_050tx_desc },
483 + { .compatible = "raspberrypi,dsi-5inch", &rpi_5inch_desc },
484 + { .compatible = "raspberrypi,dsi-7inch", &rpi_7inch_desc },
485 { }
486 };
487 MODULE_DEVICE_TABLE(of, ili9881c_of_match);