]>
Commit | Line | Data |
---|---|---|
b26354cf HS |
1 | /* |
2 | * LCD: Formike, TFT 4.3", 480x800, RGB24, KWH043ST20-F01, DriverIC NT35510-16 | |
3 | * LCD initialization via SPI | |
4 | * | |
5 | * SPDX-License-Identifier: GPL-2.0 | |
6 | * Based on: | |
7 | * | |
8 | */ | |
9 | #include <common.h> | |
10 | #include <errno.h> | |
11 | #include <spi.h> | |
12 | ||
13 | #define TAG_READ 0x80 | |
14 | #define TAG_WRITE 0x00 | |
15 | ||
16 | #define TAG_DATA 0x40 | |
17 | #define TAG_COMMAND 0x00 | |
18 | ||
19 | #define TAG_ADDR_H 0x20 | |
20 | #define TAG_ADDR_L 0x00 | |
21 | ||
22 | static int spi_write_tag_val(struct spi_slave *spi, unsigned char tag, | |
23 | unsigned char val) | |
24 | { | |
25 | unsigned long flags = SPI_XFER_BEGIN; | |
26 | u8 buf[2]; | |
27 | int ret; | |
28 | ||
29 | buf[0] = tag; | |
1c6e9de5 HS |
30 | ret = spi_xfer(spi, 8, buf, NULL, flags); |
31 | buf[0] = val; | |
32 | flags = SPI_XFER_END; | |
33 | ret = spi_xfer(spi, 8, buf, NULL, flags); | |
b26354cf | 34 | |
b26354cf HS |
35 | #ifdef KWH043ST20_F01_SPI_DEBUG |
36 | printf("spi_write_tag_val: tag=%02X, val=%02X ret: %d\n", | |
37 | tag, val, ret); | |
38 | #endif /* KWH043ST20_F01_SPI_DEBUG */ | |
39 | if (ret) | |
40 | debug("%s: Failed to send: %d\n", __func__, ret); | |
41 | ||
42 | return ret; | |
43 | } | |
44 | ||
45 | static void spi_write_dat(struct spi_slave *spi, unsigned int val) | |
46 | { | |
47 | spi_write_tag_val(spi, TAG_WRITE|TAG_DATA, val); | |
48 | } | |
49 | ||
50 | static void spi_write_com(struct spi_slave *spi, unsigned int addr) | |
51 | { | |
52 | spi_write_tag_val(spi, TAG_WRITE|TAG_COMMAND|TAG_ADDR_H, | |
53 | (addr & 0xff00) >> 8); | |
54 | spi_write_tag_val(spi, TAG_WRITE|TAG_COMMAND|TAG_ADDR_L, | |
55 | (addr & 0x00ff) >> 0); | |
56 | } | |
57 | ||
58 | int kwh043st20_f01_spi_startup(unsigned int bus, unsigned int cs, | |
59 | unsigned int max_hz, unsigned int spi_mode) | |
60 | { | |
61 | struct spi_slave *spi; | |
62 | int ret; | |
63 | ||
64 | spi = spi_setup_slave(bus, cs, max_hz, spi_mode); | |
65 | if (!spi) { | |
66 | debug("%s: Failed to set up slave\n", __func__); | |
67 | return -1; | |
68 | } | |
69 | ||
70 | ret = spi_claim_bus(spi); | |
71 | if (ret) { | |
72 | debug("%s: Failed to claim SPI bus: %d\n", __func__, ret); | |
73 | goto err_claim_bus; | |
74 | } | |
75 | ||
76 | ||
77 | /* LV2 Page 1 enable */ | |
78 | spi_write_com(spi, 0xF000); spi_write_dat(spi, 0x55); | |
79 | spi_write_com(spi, 0xF001); spi_write_dat(spi, 0xAA); | |
80 | spi_write_com(spi, 0xF002); spi_write_dat(spi, 0x52); | |
81 | spi_write_com(spi, 0xF003); spi_write_dat(spi, 0x08); | |
82 | spi_write_com(spi, 0xF004); spi_write_dat(spi, 0x01); | |
83 | ||
84 | /* AVDD Set AVDD 5.2V */ | |
85 | spi_write_com(spi, 0xB000); spi_write_dat(spi, 0x0D); | |
86 | spi_write_com(spi, 0xB001); spi_write_dat(spi, 0x0D); | |
87 | spi_write_com(spi, 0xB002); spi_write_dat(spi, 0x0D); | |
88 | ||
89 | /* AVDD ratio */ | |
90 | spi_write_com(spi, 0xB600); spi_write_dat(spi, 0x34); | |
91 | spi_write_com(spi, 0xB601); spi_write_dat(spi, 0x34); | |
92 | spi_write_com(spi, 0xB602); spi_write_dat(spi, 0x34); | |
93 | ||
94 | /* AVEE -5.2V */ | |
95 | spi_write_com(spi, 0xB100); spi_write_dat(spi, 0x0D); | |
96 | spi_write_com(spi, 0xB101); spi_write_dat(spi, 0x0D); | |
97 | spi_write_com(spi, 0xB102); spi_write_dat(spi, 0x0D); | |
98 | ||
99 | /* AVEE ratio */ | |
100 | spi_write_com(spi, 0xB700); spi_write_dat(spi, 0x35); | |
101 | spi_write_com(spi, 0xB701); spi_write_dat(spi, 0x35); | |
102 | spi_write_com(spi, 0xB702); spi_write_dat(spi, 0x35); | |
103 | ||
104 | /* VCL -2.5V */ | |
105 | spi_write_com(spi, 0xB200); spi_write_dat(spi, 0x00); | |
106 | spi_write_com(spi, 0xB201); spi_write_dat(spi, 0x00); | |
107 | spi_write_com(spi, 0xB202); spi_write_dat(spi, 0x00); | |
108 | ||
109 | /* VCL ratio */ | |
110 | spi_write_com(spi, 0xB800); spi_write_dat(spi, 0x24); | |
111 | spi_write_com(spi, 0xB801); spi_write_dat(spi, 0x24); | |
112 | spi_write_com(spi, 0xB802); spi_write_dat(spi, 0x24); | |
113 | ||
114 | /* VGH 15V */ | |
115 | spi_write_com(spi, 0xBF00); spi_write_dat(spi, 0x01); | |
116 | spi_write_com(spi, 0xB300); spi_write_dat(spi, 0x08); | |
117 | spi_write_com(spi, 0xB301); spi_write_dat(spi, 0x08); | |
118 | spi_write_com(spi, 0xB302); spi_write_dat(spi, 0x08); | |
119 | ||
120 | /* VGH ratio */ | |
121 | spi_write_com(spi, 0xB900); spi_write_dat(spi, 0x34); | |
122 | spi_write_com(spi, 0xB901); spi_write_dat(spi, 0x34); | |
123 | spi_write_com(spi, 0xB902); spi_write_dat(spi, 0x34); | |
124 | ||
125 | /* VGLX ratio */ | |
126 | spi_write_com(spi, 0xBA00); spi_write_dat(spi, 0x24); | |
127 | spi_write_com(spi, 0xBA01); spi_write_dat(spi, 0x24); | |
128 | spi_write_com(spi, 0xBA02); spi_write_dat(spi, 0x24); | |
129 | ||
130 | /* VGMP/VGSP 4.7V/0V */ | |
131 | spi_write_com(spi, 0xBC00); spi_write_dat(spi, 0x00); | |
132 | spi_write_com(spi, 0xBC01); spi_write_dat(spi, 0x88); | |
133 | spi_write_com(spi, 0xBC02); spi_write_dat(spi, 0x00); | |
134 | ||
135 | /* VGMN/VGSN -4.7V/0V */ | |
136 | spi_write_com(spi, 0xBD00); spi_write_dat(spi, 0x00); | |
137 | spi_write_com(spi, 0xBD01); spi_write_dat(spi, 0x88); | |
138 | spi_write_com(spi, 0xBD02); spi_write_dat(spi, 0x00); | |
139 | ||
140 | /* VCOM 1.525V */ | |
141 | spi_write_com(spi, 0xBE00); spi_write_dat(spi, 0x00); | |
142 | spi_write_com(spi, 0xBE01); spi_write_dat(spi, 0x7A); | |
143 | ||
144 | /* Gamma Setting */ | |
145 | spi_write_com(spi, 0xD100); spi_write_dat(spi, 0x00); | |
146 | spi_write_com(spi, 0xD101); spi_write_dat(spi, 0x05); | |
147 | spi_write_com(spi, 0xD102); spi_write_dat(spi, 0x00); | |
148 | spi_write_com(spi, 0xD103); spi_write_dat(spi, 0x15); | |
149 | spi_write_com(spi, 0xD104); spi_write_dat(spi, 0x00); | |
150 | spi_write_com(spi, 0xD105); spi_write_dat(spi, 0x30); | |
151 | spi_write_com(spi, 0xD106); spi_write_dat(spi, 0x00); | |
152 | spi_write_com(spi, 0xD107); spi_write_dat(spi, 0x47); | |
153 | spi_write_com(spi, 0xD108); spi_write_dat(spi, 0x00); | |
154 | spi_write_com(spi, 0xD109); spi_write_dat(spi, 0x5B); | |
155 | spi_write_com(spi, 0xD10A); spi_write_dat(spi, 0x00); | |
156 | spi_write_com(spi, 0xD10B); spi_write_dat(spi, 0x7D); | |
157 | spi_write_com(spi, 0xD10C); spi_write_dat(spi, 0x00); | |
158 | spi_write_com(spi, 0xD10D); spi_write_dat(spi, 0x9D); | |
159 | spi_write_com(spi, 0xD10E); spi_write_dat(spi, 0x00); | |
160 | spi_write_com(spi, 0xD10F); spi_write_dat(spi, 0xCC); | |
161 | spi_write_com(spi, 0xD110); spi_write_dat(spi, 0x00); | |
162 | spi_write_com(spi, 0xD111); spi_write_dat(spi, 0xF3); | |
163 | spi_write_com(spi, 0xD112); spi_write_dat(spi, 0x01); | |
164 | spi_write_com(spi, 0xD113); spi_write_dat(spi, 0x32); | |
165 | spi_write_com(spi, 0xD114); spi_write_dat(spi, 0x01); | |
166 | spi_write_com(spi, 0xD115); spi_write_dat(spi, 0x63); | |
167 | spi_write_com(spi, 0xD116); spi_write_dat(spi, 0x01); | |
168 | spi_write_com(spi, 0xD117); spi_write_dat(spi, 0xB1); | |
169 | spi_write_com(spi, 0xD118); spi_write_dat(spi, 0x01); | |
170 | spi_write_com(spi, 0xD119); spi_write_dat(spi, 0xF0); | |
171 | spi_write_com(spi, 0xD11A); spi_write_dat(spi, 0x01); | |
172 | spi_write_com(spi, 0xD11B); spi_write_dat(spi, 0xF2); | |
173 | spi_write_com(spi, 0xD11C); spi_write_dat(spi, 0x02); | |
174 | spi_write_com(spi, 0xD11D); spi_write_dat(spi, 0x2A); | |
175 | spi_write_com(spi, 0xD11E); spi_write_dat(spi, 0x02); | |
176 | spi_write_com(spi, 0xD11F); spi_write_dat(spi, 0x67); | |
177 | spi_write_com(spi, 0xD120); spi_write_dat(spi, 0x02); | |
178 | spi_write_com(spi, 0xD121); spi_write_dat(spi, 0x90); | |
179 | spi_write_com(spi, 0xD122); spi_write_dat(spi, 0x02); | |
180 | spi_write_com(spi, 0xD123); spi_write_dat(spi, 0xCB); | |
181 | spi_write_com(spi, 0xD124); spi_write_dat(spi, 0x02); | |
182 | spi_write_com(spi, 0xD125); spi_write_dat(spi, 0xF2); | |
183 | spi_write_com(spi, 0xD126); spi_write_dat(spi, 0x03); | |
184 | spi_write_com(spi, 0xD127); spi_write_dat(spi, 0x2A); | |
185 | spi_write_com(spi, 0xD128); spi_write_dat(spi, 0x03); | |
186 | spi_write_com(spi, 0xD129); spi_write_dat(spi, 0x51); | |
187 | spi_write_com(spi, 0xD12A); spi_write_dat(spi, 0x03); | |
188 | spi_write_com(spi, 0xD12B); spi_write_dat(spi, 0x80); | |
189 | spi_write_com(spi, 0xD12C); spi_write_dat(spi, 0x03); | |
190 | spi_write_com(spi, 0xD12D); spi_write_dat(spi, 0x9F); | |
191 | spi_write_com(spi, 0xD12E); spi_write_dat(spi, 0x03); | |
192 | spi_write_com(spi, 0xD12F); spi_write_dat(spi, 0xBE); | |
193 | spi_write_com(spi, 0xD130); spi_write_dat(spi, 0x03); | |
194 | spi_write_com(spi, 0xD131); spi_write_dat(spi, 0xF9); | |
195 | spi_write_com(spi, 0xD132); spi_write_dat(spi, 0x03); | |
196 | spi_write_com(spi, 0xD133); spi_write_dat(spi, 0xFF); | |
197 | ||
198 | spi_write_com(spi, 0xD200); spi_write_dat(spi, 0x00); | |
199 | spi_write_com(spi, 0xD201); spi_write_dat(spi, 0x05); | |
200 | spi_write_com(spi, 0xD202); spi_write_dat(spi, 0x00); | |
201 | spi_write_com(spi, 0xD203); spi_write_dat(spi, 0x15); | |
202 | spi_write_com(spi, 0xD204); spi_write_dat(spi, 0x00); | |
203 | spi_write_com(spi, 0xD205); spi_write_dat(spi, 0x30); | |
204 | spi_write_com(spi, 0xD206); spi_write_dat(spi, 0x00); | |
205 | spi_write_com(spi, 0xD207); spi_write_dat(spi, 0x47); | |
206 | spi_write_com(spi, 0xD208); spi_write_dat(spi, 0x00); | |
207 | spi_write_com(spi, 0xD209); spi_write_dat(spi, 0x5B); | |
208 | spi_write_com(spi, 0xD20A); spi_write_dat(spi, 0x00); | |
209 | spi_write_com(spi, 0xD20B); spi_write_dat(spi, 0x7D); | |
210 | spi_write_com(spi, 0xD20C); spi_write_dat(spi, 0x00); | |
211 | spi_write_com(spi, 0xD20D); spi_write_dat(spi, 0x9D); | |
212 | spi_write_com(spi, 0xD20E); spi_write_dat(spi, 0x00); | |
213 | spi_write_com(spi, 0xD20F); spi_write_dat(spi, 0xCC); | |
214 | spi_write_com(spi, 0xD210); spi_write_dat(spi, 0x00); | |
215 | spi_write_com(spi, 0xD211); spi_write_dat(spi, 0xF3); | |
216 | spi_write_com(spi, 0xD212); spi_write_dat(spi, 0x01); | |
217 | spi_write_com(spi, 0xD213); spi_write_dat(spi, 0x32); | |
218 | spi_write_com(spi, 0xD214); spi_write_dat(spi, 0x01); | |
219 | spi_write_com(spi, 0xD215); spi_write_dat(spi, 0x63); | |
220 | spi_write_com(spi, 0xD216); spi_write_dat(spi, 0x01); | |
221 | spi_write_com(spi, 0xD217); spi_write_dat(spi, 0xB1); | |
222 | spi_write_com(spi, 0xD218); spi_write_dat(spi, 0x01); | |
223 | spi_write_com(spi, 0xD219); spi_write_dat(spi, 0xF0); | |
224 | spi_write_com(spi, 0xD21A); spi_write_dat(spi, 0x01); | |
225 | spi_write_com(spi, 0xD21B); spi_write_dat(spi, 0xF2); | |
226 | spi_write_com(spi, 0xD21C); spi_write_dat(spi, 0x02); | |
227 | spi_write_com(spi, 0xD21D); spi_write_dat(spi, 0x2A); | |
228 | spi_write_com(spi, 0xD21E); spi_write_dat(spi, 0x02); | |
229 | spi_write_com(spi, 0xD21F); spi_write_dat(spi, 0x67); | |
230 | spi_write_com(spi, 0xD220); spi_write_dat(spi, 0x02); | |
231 | spi_write_com(spi, 0xD221); spi_write_dat(spi, 0x90); | |
232 | spi_write_com(spi, 0xD222); spi_write_dat(spi, 0x02); | |
233 | spi_write_com(spi, 0xD223); spi_write_dat(spi, 0xCB); | |
234 | spi_write_com(spi, 0xD224); spi_write_dat(spi, 0x02); | |
235 | spi_write_com(spi, 0xD225); spi_write_dat(spi, 0xF2); | |
236 | spi_write_com(spi, 0xD226); spi_write_dat(spi, 0x03); | |
237 | spi_write_com(spi, 0xD227); spi_write_dat(spi, 0x2A); | |
238 | spi_write_com(spi, 0xD228); spi_write_dat(spi, 0x03); | |
239 | spi_write_com(spi, 0xD229); spi_write_dat(spi, 0x51); | |
240 | spi_write_com(spi, 0xD22A); spi_write_dat(spi, 0x03); | |
241 | spi_write_com(spi, 0xD22B); spi_write_dat(spi, 0x80); | |
242 | spi_write_com(spi, 0xD22C); spi_write_dat(spi, 0x03); | |
243 | spi_write_com(spi, 0xD22D); spi_write_dat(spi, 0x9F); | |
244 | spi_write_com(spi, 0xD22E); spi_write_dat(spi, 0x03); | |
245 | spi_write_com(spi, 0xD22F); spi_write_dat(spi, 0xBE); | |
246 | spi_write_com(spi, 0xD230); spi_write_dat(spi, 0x03); | |
247 | spi_write_com(spi, 0xD231); spi_write_dat(spi, 0xF9); | |
248 | spi_write_com(spi, 0xD232); spi_write_dat(spi, 0x03); | |
249 | spi_write_com(spi, 0xD233); spi_write_dat(spi, 0xFF); | |
250 | ||
251 | spi_write_com(spi, 0xD300); spi_write_dat(spi, 0x00); | |
252 | spi_write_com(spi, 0xD301); spi_write_dat(spi, 0x05); | |
253 | spi_write_com(spi, 0xD302); spi_write_dat(spi, 0x00); | |
254 | spi_write_com(spi, 0xD303); spi_write_dat(spi, 0x15); | |
255 | spi_write_com(spi, 0xD304); spi_write_dat(spi, 0x00); | |
256 | spi_write_com(spi, 0xD305); spi_write_dat(spi, 0x30); | |
257 | spi_write_com(spi, 0xD306); spi_write_dat(spi, 0x00); | |
258 | spi_write_com(spi, 0xD307); spi_write_dat(spi, 0x47); | |
259 | spi_write_com(spi, 0xD308); spi_write_dat(spi, 0x00); | |
260 | spi_write_com(spi, 0xD309); spi_write_dat(spi, 0x5B); | |
261 | spi_write_com(spi, 0xD30A); spi_write_dat(spi, 0x00); | |
262 | spi_write_com(spi, 0xD30B); spi_write_dat(spi, 0x7D); | |
263 | spi_write_com(spi, 0xD30C); spi_write_dat(spi, 0x00); | |
264 | spi_write_com(spi, 0xD30D); spi_write_dat(spi, 0x9D); | |
265 | spi_write_com(spi, 0xD30E); spi_write_dat(spi, 0x00); | |
266 | spi_write_com(spi, 0xD30F); spi_write_dat(spi, 0xCC); | |
267 | spi_write_com(spi, 0xD310); spi_write_dat(spi, 0x00); | |
268 | spi_write_com(spi, 0xD311); spi_write_dat(spi, 0xF3); | |
269 | spi_write_com(spi, 0xD312); spi_write_dat(spi, 0x01); | |
270 | spi_write_com(spi, 0xD313); spi_write_dat(spi, 0x32); | |
271 | spi_write_com(spi, 0xD314); spi_write_dat(spi, 0x01); | |
272 | spi_write_com(spi, 0xD315); spi_write_dat(spi, 0x63); | |
273 | spi_write_com(spi, 0xD316); spi_write_dat(spi, 0x01); | |
274 | spi_write_com(spi, 0xD317); spi_write_dat(spi, 0xB1); | |
275 | spi_write_com(spi, 0xD318); spi_write_dat(spi, 0x01); | |
276 | spi_write_com(spi, 0xD319); spi_write_dat(spi, 0xF0); | |
277 | spi_write_com(spi, 0xD31A); spi_write_dat(spi, 0x01); | |
278 | spi_write_com(spi, 0xD31B); spi_write_dat(spi, 0xF2); | |
279 | spi_write_com(spi, 0xD31C); spi_write_dat(spi, 0x02); | |
280 | spi_write_com(spi, 0xD31D); spi_write_dat(spi, 0x2A); | |
281 | spi_write_com(spi, 0xD31E); spi_write_dat(spi, 0x02); | |
282 | spi_write_com(spi, 0xD31F); spi_write_dat(spi, 0x67); | |
283 | spi_write_com(spi, 0xD320); spi_write_dat(spi, 0x02); | |
284 | spi_write_com(spi, 0xD321); spi_write_dat(spi, 0x90); | |
285 | spi_write_com(spi, 0xD322); spi_write_dat(spi, 0x02); | |
286 | spi_write_com(spi, 0xD323); spi_write_dat(spi, 0xCB); | |
287 | spi_write_com(spi, 0xD324); spi_write_dat(spi, 0x02); | |
288 | spi_write_com(spi, 0xD325); spi_write_dat(spi, 0xF2); | |
289 | spi_write_com(spi, 0xD326); spi_write_dat(spi, 0x03); | |
290 | spi_write_com(spi, 0xD327); spi_write_dat(spi, 0x2A); | |
291 | spi_write_com(spi, 0xD328); spi_write_dat(spi, 0x03); | |
292 | spi_write_com(spi, 0xD329); spi_write_dat(spi, 0x51); | |
293 | spi_write_com(spi, 0xD32A); spi_write_dat(spi, 0x03); | |
294 | spi_write_com(spi, 0xD32B); spi_write_dat(spi, 0x80); | |
295 | spi_write_com(spi, 0xD32C); spi_write_dat(spi, 0x03); | |
296 | spi_write_com(spi, 0xD32D); spi_write_dat(spi, 0x9F); | |
297 | spi_write_com(spi, 0xD32E); spi_write_dat(spi, 0x03); | |
298 | spi_write_com(spi, 0xD32F); spi_write_dat(spi, 0xBE); | |
299 | spi_write_com(spi, 0xD330); spi_write_dat(spi, 0x03); | |
300 | spi_write_com(spi, 0xD331); spi_write_dat(spi, 0xF9); | |
301 | spi_write_com(spi, 0xD332); spi_write_dat(spi, 0x03); | |
302 | spi_write_com(spi, 0xD333); spi_write_dat(spi, 0xFF); | |
303 | ||
304 | spi_write_com(spi, 0xD400); spi_write_dat(spi, 0x00); | |
305 | spi_write_com(spi, 0xD401); spi_write_dat(spi, 0x05); | |
306 | spi_write_com(spi, 0xD402); spi_write_dat(spi, 0x00); | |
307 | spi_write_com(spi, 0xD403); spi_write_dat(spi, 0x15); | |
308 | spi_write_com(spi, 0xD404); spi_write_dat(spi, 0x00); | |
309 | spi_write_com(spi, 0xD405); spi_write_dat(spi, 0x30); | |
310 | spi_write_com(spi, 0xD406); spi_write_dat(spi, 0x00); | |
311 | spi_write_com(spi, 0xD407); spi_write_dat(spi, 0x47); | |
312 | spi_write_com(spi, 0xD408); spi_write_dat(spi, 0x00); | |
313 | spi_write_com(spi, 0xD409); spi_write_dat(spi, 0x5B); | |
314 | spi_write_com(spi, 0xD40A); spi_write_dat(spi, 0x00); | |
315 | spi_write_com(spi, 0xD40B); spi_write_dat(spi, 0x7D); | |
316 | spi_write_com(spi, 0xD40C); spi_write_dat(spi, 0x00); | |
317 | spi_write_com(spi, 0xD40D); spi_write_dat(spi, 0x9D); | |
318 | spi_write_com(spi, 0xD40E); spi_write_dat(spi, 0x00); | |
319 | spi_write_com(spi, 0xD40F); spi_write_dat(spi, 0xCC); | |
320 | spi_write_com(spi, 0xD410); spi_write_dat(spi, 0x00); | |
321 | spi_write_com(spi, 0xD411); spi_write_dat(spi, 0xF3); | |
322 | spi_write_com(spi, 0xD412); spi_write_dat(spi, 0x01); | |
323 | spi_write_com(spi, 0xD413); spi_write_dat(spi, 0x32); | |
324 | spi_write_com(spi, 0xD414); spi_write_dat(spi, 0x01); | |
325 | spi_write_com(spi, 0xD415); spi_write_dat(spi, 0x63); | |
326 | spi_write_com(spi, 0xD416); spi_write_dat(spi, 0x01); | |
327 | spi_write_com(spi, 0xD417); spi_write_dat(spi, 0xB1); | |
328 | spi_write_com(spi, 0xD418); spi_write_dat(spi, 0x01); | |
329 | spi_write_com(spi, 0xD419); spi_write_dat(spi, 0xF0); | |
330 | spi_write_com(spi, 0xD41A); spi_write_dat(spi, 0x01); | |
331 | spi_write_com(spi, 0xD41B); spi_write_dat(spi, 0xF2); | |
332 | spi_write_com(spi, 0xD41C); spi_write_dat(spi, 0x02); | |
333 | spi_write_com(spi, 0xD41D); spi_write_dat(spi, 0x2A); | |
334 | spi_write_com(spi, 0xD41E); spi_write_dat(spi, 0x02); | |
335 | spi_write_com(spi, 0xD41F); spi_write_dat(spi, 0x67); | |
336 | spi_write_com(spi, 0xD420); spi_write_dat(spi, 0x02); | |
337 | spi_write_com(spi, 0xD421); spi_write_dat(spi, 0x90); | |
338 | spi_write_com(spi, 0xD422); spi_write_dat(spi, 0x02); | |
339 | spi_write_com(spi, 0xD423); spi_write_dat(spi, 0xCB); | |
340 | spi_write_com(spi, 0xD424); spi_write_dat(spi, 0x02); | |
341 | spi_write_com(spi, 0xD425); spi_write_dat(spi, 0xF2); | |
342 | spi_write_com(spi, 0xD426); spi_write_dat(spi, 0x03); | |
343 | spi_write_com(spi, 0xD427); spi_write_dat(spi, 0x2A); | |
344 | spi_write_com(spi, 0xD428); spi_write_dat(spi, 0x03); | |
345 | spi_write_com(spi, 0xD429); spi_write_dat(spi, 0x51); | |
346 | spi_write_com(spi, 0xD42A); spi_write_dat(spi, 0x03); | |
347 | spi_write_com(spi, 0xD42B); spi_write_dat(spi, 0x80); | |
348 | spi_write_com(spi, 0xD42C); spi_write_dat(spi, 0x03); | |
349 | spi_write_com(spi, 0xD42D); spi_write_dat(spi, 0x9F); | |
350 | spi_write_com(spi, 0xD42E); spi_write_dat(spi, 0x03); | |
351 | spi_write_com(spi, 0xD42F); spi_write_dat(spi, 0xBE); | |
352 | spi_write_com(spi, 0xD430); spi_write_dat(spi, 0x03); | |
353 | spi_write_com(spi, 0xD431); spi_write_dat(spi, 0xF9); | |
354 | spi_write_com(spi, 0xD432); spi_write_dat(spi, 0x03); | |
355 | spi_write_com(spi, 0xD433); spi_write_dat(spi, 0xFF); | |
356 | ||
357 | spi_write_com(spi, 0xD500); spi_write_dat(spi, 0x00); | |
358 | spi_write_com(spi, 0xD501); spi_write_dat(spi, 0x05); | |
359 | spi_write_com(spi, 0xD502); spi_write_dat(spi, 0x00); | |
360 | spi_write_com(spi, 0xD503); spi_write_dat(spi, 0x15); | |
361 | spi_write_com(spi, 0xD504); spi_write_dat(spi, 0x00); | |
362 | spi_write_com(spi, 0xD505); spi_write_dat(spi, 0x30); | |
363 | spi_write_com(spi, 0xD506); spi_write_dat(spi, 0x00); | |
364 | spi_write_com(spi, 0xD507); spi_write_dat(spi, 0x47); | |
365 | spi_write_com(spi, 0xD508); spi_write_dat(spi, 0x00); | |
366 | spi_write_com(spi, 0xD509); spi_write_dat(spi, 0x5B); | |
367 | spi_write_com(spi, 0xD50A); spi_write_dat(spi, 0x00); | |
368 | spi_write_com(spi, 0xD50B); spi_write_dat(spi, 0x7D); | |
369 | spi_write_com(spi, 0xD50C); spi_write_dat(spi, 0x00); | |
370 | spi_write_com(spi, 0xD50D); spi_write_dat(spi, 0x9D); | |
371 | spi_write_com(spi, 0xD50E); spi_write_dat(spi, 0x00); | |
372 | spi_write_com(spi, 0xD50F); spi_write_dat(spi, 0xCC); | |
373 | spi_write_com(spi, 0xD510); spi_write_dat(spi, 0x00); | |
374 | spi_write_com(spi, 0xD511); spi_write_dat(spi, 0xF3); | |
375 | spi_write_com(spi, 0xD512); spi_write_dat(spi, 0x01); | |
376 | spi_write_com(spi, 0xD513); spi_write_dat(spi, 0x32); | |
377 | spi_write_com(spi, 0xD514); spi_write_dat(spi, 0x01); | |
378 | spi_write_com(spi, 0xD515); spi_write_dat(spi, 0x63); | |
379 | spi_write_com(spi, 0xD516); spi_write_dat(spi, 0x01); | |
380 | spi_write_com(spi, 0xD517); spi_write_dat(spi, 0xB1); | |
381 | spi_write_com(spi, 0xD518); spi_write_dat(spi, 0x01); | |
382 | spi_write_com(spi, 0xD519); spi_write_dat(spi, 0xF0); | |
383 | spi_write_com(spi, 0xD51A); spi_write_dat(spi, 0x01); | |
384 | spi_write_com(spi, 0xD51B); spi_write_dat(spi, 0xF2); | |
385 | spi_write_com(spi, 0xD51C); spi_write_dat(spi, 0x02); | |
386 | spi_write_com(spi, 0xD51D); spi_write_dat(spi, 0x2A); | |
387 | spi_write_com(spi, 0xD51E); spi_write_dat(spi, 0x02); | |
388 | spi_write_com(spi, 0xD51F); spi_write_dat(spi, 0x67); | |
389 | spi_write_com(spi, 0xD520); spi_write_dat(spi, 0x02); | |
390 | spi_write_com(spi, 0xD521); spi_write_dat(spi, 0x90); | |
391 | spi_write_com(spi, 0xD522); spi_write_dat(spi, 0x02); | |
392 | spi_write_com(spi, 0xD523); spi_write_dat(spi, 0xCB); | |
393 | spi_write_com(spi, 0xD524); spi_write_dat(spi, 0x02); | |
394 | spi_write_com(spi, 0xD525); spi_write_dat(spi, 0xF2); | |
395 | spi_write_com(spi, 0xD526); spi_write_dat(spi, 0x03); | |
396 | spi_write_com(spi, 0xD527); spi_write_dat(spi, 0x2A); | |
397 | spi_write_com(spi, 0xD528); spi_write_dat(spi, 0x03); | |
398 | spi_write_com(spi, 0xD529); spi_write_dat(spi, 0x51); | |
399 | spi_write_com(spi, 0xD52A); spi_write_dat(spi, 0x03); | |
400 | spi_write_com(spi, 0xD52B); spi_write_dat(spi, 0x80); | |
401 | spi_write_com(spi, 0xD52C); spi_write_dat(spi, 0x03); | |
402 | spi_write_com(spi, 0xD52D); spi_write_dat(spi, 0x9F); | |
403 | spi_write_com(spi, 0xD52E); spi_write_dat(spi, 0x03); | |
404 | spi_write_com(spi, 0xD52F); spi_write_dat(spi, 0xBE); | |
405 | spi_write_com(spi, 0xD530); spi_write_dat(spi, 0x03); | |
406 | spi_write_com(spi, 0xD531); spi_write_dat(spi, 0xF9); | |
407 | spi_write_com(spi, 0xD532); spi_write_dat(spi, 0x03); | |
408 | spi_write_com(spi, 0xD533); spi_write_dat(spi, 0xFF); | |
409 | ||
410 | spi_write_com(spi, 0xD600); spi_write_dat(spi, 0x00); | |
411 | spi_write_com(spi, 0xD601); spi_write_dat(spi, 0x05); | |
412 | spi_write_com(spi, 0xD602); spi_write_dat(spi, 0x00); | |
413 | spi_write_com(spi, 0xD603); spi_write_dat(spi, 0x15); | |
414 | spi_write_com(spi, 0xD604); spi_write_dat(spi, 0x00); | |
415 | spi_write_com(spi, 0xD605); spi_write_dat(spi, 0x30); | |
416 | spi_write_com(spi, 0xD606); spi_write_dat(spi, 0x00); | |
417 | spi_write_com(spi, 0xD607); spi_write_dat(spi, 0x47); | |
418 | spi_write_com(spi, 0xD608); spi_write_dat(spi, 0x00); | |
419 | spi_write_com(spi, 0xD609); spi_write_dat(spi, 0x5B); | |
420 | spi_write_com(spi, 0xD60A); spi_write_dat(spi, 0x00); | |
421 | spi_write_com(spi, 0xD60B); spi_write_dat(spi, 0x7D); | |
422 | spi_write_com(spi, 0xD60C); spi_write_dat(spi, 0x00); | |
423 | spi_write_com(spi, 0xD60D); spi_write_dat(spi, 0x9D); | |
424 | spi_write_com(spi, 0xD60E); spi_write_dat(spi, 0x00); | |
425 | spi_write_com(spi, 0xD60F); spi_write_dat(spi, 0xCC); | |
426 | spi_write_com(spi, 0xD610); spi_write_dat(spi, 0x00); | |
427 | spi_write_com(spi, 0xD611); spi_write_dat(spi, 0xF3); | |
428 | spi_write_com(spi, 0xD612); spi_write_dat(spi, 0x01); | |
429 | spi_write_com(spi, 0xD613); spi_write_dat(spi, 0x32); | |
430 | spi_write_com(spi, 0xD614); spi_write_dat(spi, 0x01); | |
431 | spi_write_com(spi, 0xD615); spi_write_dat(spi, 0x63); | |
432 | spi_write_com(spi, 0xD616); spi_write_dat(spi, 0x01); | |
433 | spi_write_com(spi, 0xD617); spi_write_dat(spi, 0xB1); | |
434 | spi_write_com(spi, 0xD618); spi_write_dat(spi, 0x01); | |
435 | spi_write_com(spi, 0xD619); spi_write_dat(spi, 0xF0); | |
436 | spi_write_com(spi, 0xD61A); spi_write_dat(spi, 0x01); | |
437 | spi_write_com(spi, 0xD61B); spi_write_dat(spi, 0xF2); | |
438 | spi_write_com(spi, 0xD61C); spi_write_dat(spi, 0x02); | |
439 | spi_write_com(spi, 0xD61D); spi_write_dat(spi, 0x2A); | |
440 | spi_write_com(spi, 0xD61E); spi_write_dat(spi, 0x02); | |
441 | spi_write_com(spi, 0xD61F); spi_write_dat(spi, 0x67); | |
442 | spi_write_com(spi, 0xD620); spi_write_dat(spi, 0x02); | |
443 | spi_write_com(spi, 0xD621); spi_write_dat(spi, 0x90); | |
444 | spi_write_com(spi, 0xD622); spi_write_dat(spi, 0x02); | |
445 | spi_write_com(spi, 0xD623); spi_write_dat(spi, 0xCB); | |
446 | spi_write_com(spi, 0xD624); spi_write_dat(spi, 0x02); | |
447 | spi_write_com(spi, 0xD625); spi_write_dat(spi, 0xF2); | |
448 | spi_write_com(spi, 0xD626); spi_write_dat(spi, 0x03); | |
449 | spi_write_com(spi, 0xD627); spi_write_dat(spi, 0x2A); | |
450 | spi_write_com(spi, 0xD628); spi_write_dat(spi, 0x03); | |
451 | spi_write_com(spi, 0xD629); spi_write_dat(spi, 0x51); | |
452 | spi_write_com(spi, 0xD62A); spi_write_dat(spi, 0x03); | |
453 | spi_write_com(spi, 0xD62B); spi_write_dat(spi, 0x80); | |
454 | spi_write_com(spi, 0xD62C); spi_write_dat(spi, 0x03); | |
455 | spi_write_com(spi, 0xD62D); spi_write_dat(spi, 0x9F); | |
456 | spi_write_com(spi, 0xD62E); spi_write_dat(spi, 0x03); | |
457 | spi_write_com(spi, 0xD62F); spi_write_dat(spi, 0xBE); | |
458 | spi_write_com(spi, 0xD630); spi_write_dat(spi, 0x03); | |
459 | spi_write_com(spi, 0xD631); spi_write_dat(spi, 0xF9); | |
460 | spi_write_com(spi, 0xD632); spi_write_dat(spi, 0x03); | |
461 | spi_write_com(spi, 0xD633); spi_write_dat(spi, 0xFF); | |
462 | ||
463 | /* LV2 Page 0 enable */ | |
464 | spi_write_com(spi, 0xF000); spi_write_dat(spi, 0x55); | |
465 | spi_write_com(spi, 0xF001); spi_write_dat(spi, 0xAA); | |
466 | spi_write_com(spi, 0xF002); spi_write_dat(spi, 0x52); | |
467 | spi_write_com(spi, 0xF003); spi_write_dat(spi, 0x08); | |
468 | spi_write_com(spi, 0xF004); spi_write_dat(spi, 0x00); | |
469 | ||
470 | /* Display control */ | |
471 | spi_write_com(spi, 0xB100); spi_write_dat(spi, 0xFC); | |
472 | spi_write_com(spi, 0xB101); spi_write_dat(spi, 0x00); | |
473 | ||
474 | /* Source hold time */ | |
475 | spi_write_com(spi, 0xB600); spi_write_dat(spi, 0x05); | |
476 | ||
477 | /* Gate EQ control */ | |
478 | spi_write_com(spi, 0xB700); spi_write_dat(spi, 0x70); | |
479 | spi_write_com(spi, 0xB701); spi_write_dat(spi, 0x70); | |
480 | ||
481 | /* Source EQ control (Mode 2) */ | |
482 | spi_write_com(spi, 0xB800); spi_write_dat(spi, 0x01); | |
483 | spi_write_com(spi, 0xB801); spi_write_dat(spi, 0x05); | |
484 | spi_write_com(spi, 0xB802); spi_write_dat(spi, 0x05); | |
485 | spi_write_com(spi, 0xB803); spi_write_dat(spi, 0x05); | |
486 | ||
487 | /* Inversion mode (Column) */ | |
488 | spi_write_com(spi, 0xBC00); spi_write_dat(spi, 0x00); | |
489 | spi_write_com(spi, 0xBC01); spi_write_dat(spi, 0x00); | |
490 | spi_write_com(spi, 0xBC02); spi_write_dat(spi, 0x00); | |
491 | ||
492 | /* Timing control 8phase dual side/4H/4delay/RST_EN */ | |
493 | spi_write_com(spi, 0xC900); spi_write_dat(spi, 0xD0); | |
494 | spi_write_com(spi, 0xC901); spi_write_dat(spi, 0x82); | |
495 | spi_write_com(spi, 0xC902); spi_write_dat(spi, 0x50); | |
496 | spi_write_com(spi, 0xC903); spi_write_dat(spi, 0x50); | |
497 | spi_write_com(spi, 0xC904); spi_write_dat(spi, 0x50); | |
498 | ||
499 | spi_write_com(spi, 0x3A00); spi_write_dat(spi, 0x55); | |
500 | mdelay(120); | |
501 | spi_write_com(spi, 0x1100); | |
502 | mdelay(120); | |
503 | spi_write_com(spi, 0x2900); | |
504 | mdelay(120); | |
505 | /* spi_write_com(spi, 0x2100); spi_write_dat(spi, 0x00); */ | |
506 | spi_write_com(spi, 0x2C00); | |
507 | ||
508 | return 0; | |
509 | err_claim_bus: | |
510 | spi_free_slave(spi); | |
511 | return -1; | |
512 | } |