tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / drivers / video / sc8825fb / lcd_nt35516_mcu.c
1 /* drivers/video/sc8810/lcd_nt35516_mcu.c
2  *
3  *
4  *
5  *
6  * Copyright (C) 2010 Spreadtrum
7  *
8  * This software is licensed under the terms of the GNU General Public
9  * License version 2, as published by the Free Software Foundation, and
10  * may be copied, distributed, and modified under those terms.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  */
17
18 #include <asm/arch/tiger_lcd.h>
19
20 #define printk printf
21
22 #define  LCD_DEBUG
23 #ifdef LCD_DEBUG
24 #define LCD_PRINT printk
25 #else
26 #define LCD_PRINT(...)
27 #endif
28 static int32_t nt35516_init(struct panel_spec *self)
29 {
30         send_data_t send_cmd = self->info.mcu->ops->send_cmd;
31         send_cmd_data_t send_cmd_data = self->info.mcu->ops->send_cmd_data;
32         send_data_t send_data = self->info.mcu->ops->send_data;
33
34         LCD_PRINT("nt35516_init\n");
35
36         send_cmd(0xFF00); send_data(0x00AA); /*AA*/
37         send_cmd(0xFF01); send_data(0x0055);/*55*/
38         send_cmd(0xFF02); send_data(0x0025);/*25*/
39         send_cmd(0xFF03); send_data(0x0001);/*01*/
40
41 //      send_cmd(0xF300); send_data(0x0002);
42 //      send_cmd(0xF301); send_data(0x0003);
43 //      send_cmd(0xF302); send_data(0x0007);
44 //      send_cmd(0xF303); send_data(0x0015);
45
46
47         /*ENABPAGE 0*/
48         send_cmd(0xF000); send_data(0x0055); /*Manufacture Command Set Control*/
49         send_cmd(0xF001); send_data(0x00AA);
50         send_cmd(0xF002); send_data(0x0052);
51         send_cmd(0xF003); send_data(0x0008);
52         send_cmd(0xF004); send_data(0x0000);
53
54         send_cmd(0xB100); send_data(0x00FC);
55         
56         send_cmd(0xB700); send_data(0x0000);
57         send_cmd(0xB701); send_data(0x0000);
58
59         send_cmd(0xC800); send_data(0x0001);
60         send_cmd(0xC801); send_data(0x0000);
61         send_cmd(0xC802); send_data(0x0046);
62         send_cmd(0xC803); send_data(0x001E);
63         send_cmd(0xC804); send_data(0x0046);
64         send_cmd(0xC805); send_data(0x001E);
65         send_cmd(0xC806); send_data(0x0046);
66         send_cmd(0xC807); send_data(0x001E);
67         send_cmd(0xC808); send_data(0x0046);
68         send_cmd(0xC809); send_data(0x001E);
69         send_cmd(0xC80A); send_data(0x0064);
70         send_cmd(0xC80B); send_data(0x003C);//64
71         send_cmd(0xC80C); send_data(0x003C);//64
72         send_cmd(0xC80D); send_data(0x0064);
73         send_cmd(0xC80E); send_data(0x0064);
74         send_cmd(0xC80F); send_data(0x003C);//64
75         send_cmd(0xC810); send_data(0x003C);//64
76         send_cmd(0xC811); send_data(0x0064);
77
78         
79         
80         send_cmd(0xB800); send_data(0x0001);
81         send_cmd(0xB801); send_data(0x0002);
82         send_cmd(0xB802); send_data(0x0002);
83         send_cmd(0xB803); send_data(0x0002);
84
85         send_cmd(0xBC00); send_data(0x0005); /*Zig-Zag Inversion*/
86         send_cmd(0xBC01); send_data(0x0005);
87         send_cmd(0xBC02); send_data(0x0005);
88
89
90
91
92         //send_cmd(0x4C00); send_data(0x0011); /*DB4=1,Enable Vivid Color,DB4=0 Disable Vivid Color*/
93
94         /* ENA PAGE 1*/
95         send_cmd(0xF000); send_data(0x0055); /*Manufacture Command Set Control */
96         send_cmd(0xF001); send_data(0x00AA);
97         send_cmd(0xF002); send_data(0x0052);
98         send_cmd(0xF003); send_data(0x0008);
99         send_cmd(0xF004); send_data(0x0001);/*Page1*/
100
101         send_cmd(0xB000); send_data(0x0005); /*Setting AVDD Voltage 6V*/
102         send_cmd(0xB001); send_data(0x0005);
103         send_cmd(0xB002); send_data(0x0005);
104
105         send_cmd(0xB100); send_data(0x0005); 
106         send_cmd(0xB101); send_data(0x0005);
107         send_cmd(0xB102); send_data(0x0005);
108
109         
110
111         send_cmd(0xB600); send_data(0x0044); /* Setting AVEE boosting time 2.5*vpnl */
112         send_cmd(0xB601); send_data(0x0044);
113         send_cmd(0xB602); send_data(0x0044);
114
115
116         /*Sett AVEE boosting time -2.5NL*/
117         send_cmd(0xB700); send_data(0x0034);//44
118         send_cmd(0xB701); send_data(0x0034);//44
119         send_cmd(0xB702); send_data(0x0034);//44
120
121 //      send_cmd(0xB800); send_data(0x0020);//ADD 2012_9_24
122 //      send_cmd(0xB801); send_data(0x0020);
123 //      send_cmd(0xB802); send_data(0x0020);
124
125         send_cmd(0xB300); send_data(0x0012);//10
126         send_cmd(0xB301); send_data(0x0012);//10
127         send_cmd(0xB302); send_data(0x0012);//10
128
129         send_cmd(0xB900); send_data(0x0034);///*0x24 --> 0x14*/
130         send_cmd(0xB901); send_data(0x0034);
131         send_cmd(0xB902); send_data(0x0034);
132
133         send_cmd(0xB400); send_data(0x000A);//0A
134         send_cmd(0xB401); send_data(0x000A);//0A
135         send_cmd(0xB402); send_data(0x000A);//0A
136         
137         /*Sett VGLX boosting time  AVEVDD */
138         send_cmd(0xBA00); send_data(0x0024);///*0x24 --> 0x14*/
139         send_cmd(0xBA01); send_data(0x0024);
140         send_cmd(0xBA02); send_data(0x0024);
141
142         send_cmd(0xCB00); send_data(0x0084);//ADD 2012_9_24
143         send_cmd(0xCB01); send_data(0x0063);
144
145         /*Gammoltage */
146         send_cmd(0xBC00); send_data(0x0000);
147         send_cmd(0xBC01); send_data(0x00A0);/*VGMP 0x88=4.7V  0x78=4.5V   0xA0=5.0V */
148         send_cmd(0xBC02); send_data(0x0000);/*VGSP*/
149
150         //Gammoltage */
151         send_cmd(0xBD00); send_data(0x0000);
152         send_cmd(0xBD01); send_data(0x00A0);/*VGMN 0x88=-4.7V 0x78=-4.5V   0xA0=-5.0V*/
153         send_cmd(0xBD02); send_data(0x0000);/*VGSN*/
154
155         send_cmd(0xBE00); send_data(0x004E); /* Setting VCOM Offset Voltage  0x4E\u017e??ยช0x57  20111019 LIYAN*/
156
157         
158         /*GAMMED Positive*/
159         send_cmd(0xD100); send_data(0x0000);
160         send_cmd(0xD101); send_data(0x0032);
161         send_cmd(0xD102); send_data(0x0000);
162         send_cmd(0xD103); send_data(0x0041);
163         send_cmd(0xD104); send_data(0x0000);
164         send_cmd(0xD105); send_data(0x0054);
165         send_cmd(0xD106); send_data(0x0000);
166         send_cmd(0xD107); send_data(0x0067);
167         send_cmd(0xD108); send_data(0x0000);
168         send_cmd(0xD109); send_data(0x007A);
169         send_cmd(0xD10A); send_data(0x0000);
170         send_cmd(0xD10B); send_data(0x0098);
171         send_cmd(0xD10C); send_data(0x0000);
172         send_cmd(0xD10D); send_data(0x00B0);
173         send_cmd(0xD10E); send_data(0x0000);
174         send_cmd(0xD10F); send_data(0x00DB);
175         send_cmd(0xD200); send_data(0x0001);
176         send_cmd(0xD201); send_data(0x0001);
177         send_cmd(0xD202); send_data(0x0001);
178         send_cmd(0xD203); send_data(0x003F);
179         send_cmd(0xD204); send_data(0x0001);
180         send_cmd(0xD205); send_data(0x0070);
181         send_cmd(0xD206); send_data(0x0001);
182         send_cmd(0xD207); send_data(0x00B4);
183         send_cmd(0xD208); send_data(0x0001);
184         send_cmd(0xD209); send_data(0x00EC);
185         send_cmd(0xD20A); send_data(0x0001);
186         send_cmd(0xD20B); send_data(0x00ED);
187         send_cmd(0xD20C); send_data(0x0002);
188         send_cmd(0xD20D); send_data(0x001E);
189         send_cmd(0xD20E); send_data(0x0002);
190         send_cmd(0xD20F); send_data(0x0051);
191         send_cmd(0xD300); send_data(0x0002);
192         send_cmd(0xD301); send_data(0x006C);
193         send_cmd(0xD302); send_data(0x0002);
194         send_cmd(0xD303); send_data(0x008D);
195         send_cmd(0xD304); send_data(0x0002);
196         send_cmd(0xD305); send_data(0x00A5);
197         send_cmd(0xD306); send_data(0x0002);
198         send_cmd(0xD307); send_data(0x00C9);
199         send_cmd(0xD308); send_data(0x0002);
200         send_cmd(0xD309); send_data(0x00EA);
201         send_cmd(0xD30A); send_data(0x0003);
202         send_cmd(0xD30B); send_data(0x0019);
203         send_cmd(0xD30C); send_data(0x0003);
204         send_cmd(0xD30D); send_data(0x0045);
205         send_cmd(0xD30E); send_data(0x0003);
206         send_cmd(0xD30F); send_data(0x007A);
207         send_cmd(0xD400); send_data(0x0003);
208         send_cmd(0xD401); send_data(0x00B0);
209         send_cmd(0xD402); send_data(0x0003);
210         send_cmd(0xD403); send_data(0x00F4);
211
212         /*Posie Gamma for GREEN*/
213         send_cmd(0xD500); send_data(0x0000);
214         send_cmd(0xD501); send_data(0x0037);
215         send_cmd(0xD502); send_data(0x0000);
216         send_cmd(0xD503); send_data(0x0041);
217         send_cmd(0xD504); send_data(0x0000);
218         send_cmd(0xD505); send_data(0x0054);
219         send_cmd(0xD506); send_data(0x0000);
220         send_cmd(0xD507); send_data(0x0067);
221         send_cmd(0xD508); send_data(0x0000);
222         send_cmd(0xD509); send_data(0x007A);
223         send_cmd(0xD50A); send_data(0x0000);
224         send_cmd(0xD50B); send_data(0x0098);
225         send_cmd(0xD50C); send_data(0x0000);
226         send_cmd(0xD50D); send_data(0x00B0);
227         send_cmd(0xD50E); send_data(0x0000);
228         send_cmd(0xD50F); send_data(0x00DB);
229         send_cmd(0xD600); send_data(0x0001);
230         send_cmd(0xD601); send_data(0x0001);
231         send_cmd(0xD602); send_data(0x0001);
232         send_cmd(0xD603); send_data(0x003F);
233         send_cmd(0xD604); send_data(0x0001);
234         send_cmd(0xD605); send_data(0x0070);
235         send_cmd(0xD606); send_data(0x0001);
236         send_cmd(0xD607); send_data(0x00B4);
237         send_cmd(0xD608); send_data(0x0001);
238         send_cmd(0xD609); send_data(0x00EC);
239         send_cmd(0xD60A); send_data(0x0001);
240         send_cmd(0xD60B); send_data(0x00ED);
241         send_cmd(0xD60C); send_data(0x0002);
242         send_cmd(0xD60D); send_data(0x001E);
243         send_cmd(0xD60E); send_data(0x0002);
244         send_cmd(0xD60F); send_data(0x0051);
245         send_cmd(0xD700); send_data(0x0002);
246         send_cmd(0xD701); send_data(0x006C);
247         send_cmd(0xD702); send_data(0x0002);
248         send_cmd(0xD703); send_data(0x008D);
249         send_cmd(0xD704); send_data(0x0002);
250         send_cmd(0xD705); send_data(0x00A5);
251         send_cmd(0xD706); send_data(0x0002);
252         send_cmd(0xD707); send_data(0x00C9);
253         send_cmd(0xD708); send_data(0x0002);
254         send_cmd(0xD709); send_data(0x00EA);
255         send_cmd(0xD70A); send_data(0x0003);
256         send_cmd(0xD70B); send_data(0x0019);
257         send_cmd(0xD70C); send_data(0x0003);
258         send_cmd(0xD70D); send_data(0x0045);
259         send_cmd(0xD70E); send_data(0x0003);
260         send_cmd(0xD70F); send_data(0x007A);
261         send_cmd(0xD800); send_data(0x0003);
262         send_cmd(0xD801); send_data(0x00A0);
263         send_cmd(0xD802); send_data(0x0003);
264         send_cmd(0xD803); send_data(0x00F4);
265
266         /*Posie Gamma for BLUE*/
267         send_cmd(0xD900); send_data(0x0000);
268         send_cmd(0xD901); send_data(0x0032);
269         send_cmd(0xD902); send_data(0x0000);
270         send_cmd(0xD903); send_data(0x0041);
271         send_cmd(0xD904); send_data(0x0000);
272         send_cmd(0xD905); send_data(0x0054);
273         send_cmd(0xD906); send_data(0x0000);
274         send_cmd(0xD907); send_data(0x0067);
275         send_cmd(0xD908); send_data(0x0000);
276         send_cmd(0xD909); send_data(0x007A);
277         send_cmd(0xD90A); send_data(0x0000);
278         send_cmd(0xD90B); send_data(0x0098);
279         send_cmd(0xD90C); send_data(0x0000);
280         send_cmd(0xD90D); send_data(0x00B0);
281         send_cmd(0xD90E); send_data(0x0000);
282         send_cmd(0xD90F); send_data(0x00DB);
283         send_cmd(0xDD00); send_data(0x0001);
284         send_cmd(0xDD01); send_data(0x0001);
285         send_cmd(0xDD02); send_data(0x0001);
286         send_cmd(0xDD03); send_data(0x003F);
287         send_cmd(0xDD04); send_data(0x0001);
288         send_cmd(0xDD05); send_data(0x0070);
289         send_cmd(0xDD06); send_data(0x0001);
290         send_cmd(0xDD07); send_data(0x00B4);
291         send_cmd(0xDD08); send_data(0x0001);
292         send_cmd(0xDD09); send_data(0x00EC);
293         send_cmd(0xDD0A); send_data(0x0001);
294         send_cmd(0xDD0B); send_data(0x00ED);
295         send_cmd(0xDD0C); send_data(0x0002);
296         send_cmd(0xDD0D); send_data(0x001E);
297         send_cmd(0xDD0E); send_data(0x0002);
298         send_cmd(0xDD0F); send_data(0x0051);
299         send_cmd(0xDE00); send_data(0x0002);
300         send_cmd(0xDE01); send_data(0x006C);
301         send_cmd(0xDE02); send_data(0x0002);
302         send_cmd(0xDE03); send_data(0x008D);
303         send_cmd(0xDE04); send_data(0x0002);
304         send_cmd(0xDE05); send_data(0x00A5);
305         send_cmd(0xDE06); send_data(0x0002);
306         send_cmd(0xDE07); send_data(0x00C9);
307         send_cmd(0xDE08); send_data(0x0002);
308         send_cmd(0xDE09); send_data(0x00EA);
309         send_cmd(0xDE0A); send_data(0x0003);
310         send_cmd(0xDE0B); send_data(0x0019);
311         send_cmd(0xDE0C); send_data(0x0003);
312         send_cmd(0xDE0D); send_data(0x0045);
313         send_cmd(0xDE0E); send_data(0x0003);
314         send_cmd(0xDE0F); send_data(0x007A);
315         send_cmd(0xDF00); send_data(0x0003);
316         send_cmd(0xDF01); send_data(0x00A0);
317         send_cmd(0xDF02); send_data(0x0003);
318         send_cmd(0xDF03); send_data(0x00F4);
319
320         /*Negae Gamma for RED*/
321         send_cmd(0xE000); send_data(0x0000);
322         send_cmd(0xE001); send_data(0x0032);
323         send_cmd(0xE002); send_data(0x0000);
324         send_cmd(0xE003); send_data(0x0041);
325         send_cmd(0xE004); send_data(0x0000);
326         send_cmd(0xE005); send_data(0x0054);
327         send_cmd(0xE006); send_data(0x0000);
328         send_cmd(0xE007); send_data(0x0067);
329         send_cmd(0xE008); send_data(0x0000);
330         send_cmd(0xE009); send_data(0x007A);
331         send_cmd(0xE00A); send_data(0x0000);
332         send_cmd(0xE00B); send_data(0x0098);
333         send_cmd(0xE00C); send_data(0x0000);
334         send_cmd(0xE00D); send_data(0x00B0);
335         send_cmd(0xE00E); send_data(0x0000);
336         send_cmd(0xE00F); send_data(0x00DB);
337         send_cmd(0xE100); send_data(0x0001);
338         send_cmd(0xE101); send_data(0x0001);
339         send_cmd(0xE102); send_data(0x0001);
340         send_cmd(0xE103); send_data(0x003F);
341         send_cmd(0xE104); send_data(0x0001);
342         send_cmd(0xE105); send_data(0x0070);
343         send_cmd(0xE106); send_data(0x0001);
344         send_cmd(0xE107); send_data(0x00B4);
345         send_cmd(0xE108); send_data(0x0001);
346         send_cmd(0xE109); send_data(0x00EC);
347         send_cmd(0xE10A); send_data(0x0001);
348         send_cmd(0xE10B); send_data(0x00ED);
349         send_cmd(0xE10C); send_data(0x0002);
350         send_cmd(0xE10D); send_data(0x001E);
351         send_cmd(0xE10E); send_data(0x0002);
352         send_cmd(0xE10F); send_data(0x0051);
353         send_cmd(0xE200); send_data(0x0002);
354         send_cmd(0xE201); send_data(0x006C);
355         send_cmd(0xE202); send_data(0x0002);
356         send_cmd(0xE203); send_data(0x008D);
357         send_cmd(0xE204); send_data(0x0002);
358         send_cmd(0xE205); send_data(0x00A5);
359         send_cmd(0xE206); send_data(0x0002);
360         send_cmd(0xE207); send_data(0x00C9);
361         send_cmd(0xE208); send_data(0x0002);
362         send_cmd(0xE209); send_data(0x00EA);
363         send_cmd(0xE20A); send_data(0x0003);
364         send_cmd(0xE20B); send_data(0x0019);
365         send_cmd(0xE20C); send_data(0x0003);
366         send_cmd(0xE20D); send_data(0x0045);
367         send_cmd(0xE20E); send_data(0x0003);
368         send_cmd(0xE20F); send_data(0x007A);
369         send_cmd(0xE300); send_data(0x0003);
370         send_cmd(0xE301); send_data(0x00A0);
371         send_cmd(0xE302); send_data(0x0003);
372         send_cmd(0xE303); send_data(0x00F4);
373
374         /*Negae Gamma for GERREN*/
375         send_cmd(0xE400); send_data(0x0000);
376         send_cmd(0xE401); send_data(0x0032);
377         send_cmd(0xE402); send_data(0x0000);
378         send_cmd(0xE403); send_data(0x0041);
379         send_cmd(0xE404); send_data(0x0000);
380         send_cmd(0xE405); send_data(0x0054);
381         send_cmd(0xE406); send_data(0x0000);
382         send_cmd(0xE407); send_data(0x0067);
383         send_cmd(0xE408); send_data(0x0000);
384         send_cmd(0xE409); send_data(0x007A);
385         send_cmd(0xE40A); send_data(0x0000);
386         send_cmd(0xE40B); send_data(0x0098);
387         send_cmd(0xE40C); send_data(0x0000);
388         send_cmd(0xE40D); send_data(0x00B0);
389         send_cmd(0xE40E); send_data(0x0000);
390         send_cmd(0xE40F); send_data(0x00DB);
391         send_cmd(0xE500); send_data(0x0001);
392         send_cmd(0xE501); send_data(0x0001);
393         send_cmd(0xE502); send_data(0x0001);
394         send_cmd(0xE503); send_data(0x003F);
395         send_cmd(0xE504); send_data(0x0001);
396         send_cmd(0xE505); send_data(0x0070);
397         send_cmd(0xE506); send_data(0x0001);
398         send_cmd(0xE507); send_data(0x00B4);
399         send_cmd(0xE508); send_data(0x0001);
400         send_cmd(0xE509); send_data(0x00EC);
401         send_cmd(0xE50A); send_data(0x0001);
402         send_cmd(0xE50B); send_data(0x00ED);
403         send_cmd(0xE50C); send_data(0x0002);
404         send_cmd(0xE50D); send_data(0x001E);
405         send_cmd(0xE50E); send_data(0x0002);
406         send_cmd(0xE50F); send_data(0x0051);
407         send_cmd(0xE600); send_data(0x0002);
408         send_cmd(0xE601); send_data(0x006C);
409         send_cmd(0xE602); send_data(0x0002);
410         send_cmd(0xE603); send_data(0x008D);
411         send_cmd(0xE604); send_data(0x0002);
412         send_cmd(0xE605); send_data(0x00A5);
413         send_cmd(0xE606); send_data(0x0002);
414         send_cmd(0xE607); send_data(0x00C9);
415         send_cmd(0xE608); send_data(0x0002);
416         send_cmd(0xE609); send_data(0x00EA);
417         send_cmd(0xE60A); send_data(0x0003);
418         send_cmd(0xE60B); send_data(0x0019);
419         send_cmd(0xE60C); send_data(0x0003);
420         send_cmd(0xE60D); send_data(0x0045);
421         send_cmd(0xE60E); send_data(0x0003);
422         send_cmd(0xE60F); send_data(0x007A);
423         send_cmd(0xE700); send_data(0x0003);
424         send_cmd(0xE701); send_data(0x00A0);
425         send_cmd(0xE702); send_data(0x0003);
426         send_cmd(0xE703); send_data(0x00F4);
427
428         /*Negae Gamma for BLUE*/
429         send_cmd(0xE800); send_data(0x0000);
430         send_cmd(0xE801); send_data(0x0032);
431         send_cmd(0xE802); send_data(0x0000);
432         send_cmd(0xE803); send_data(0x0041);
433         send_cmd(0xE804); send_data(0x0000);
434         send_cmd(0xE805); send_data(0x0054);
435         send_cmd(0xE806); send_data(0x0000);
436         send_cmd(0xE807); send_data(0x0067);
437         send_cmd(0xE808); send_data(0x0000);
438         send_cmd(0xE809); send_data(0x007A);
439         send_cmd(0xE80A); send_data(0x0000);
440         send_cmd(0xE80B); send_data(0x0098);
441         send_cmd(0xE80C); send_data(0x0000);
442         send_cmd(0xE80D); send_data(0x00B0);
443         send_cmd(0xE80E); send_data(0x0000);
444         send_cmd(0xE80F); send_data(0x00DB);
445         send_cmd(0xE900); send_data(0x0001);
446         send_cmd(0xE901); send_data(0x0001);
447         send_cmd(0xE902); send_data(0x0001);
448         send_cmd(0xE903); send_data(0x003F);
449         send_cmd(0xE904); send_data(0x0001);
450         send_cmd(0xE905); send_data(0x0070);
451         send_cmd(0xE906); send_data(0x0001);
452         send_cmd(0xE907); send_data(0x00B4);
453         send_cmd(0xE908); send_data(0x0001);
454         send_cmd(0xE909); send_data(0x00EC);
455         send_cmd(0xE90A); send_data(0x0001);
456         send_cmd(0xE90B); send_data(0x00ED);
457         send_cmd(0xE90C); send_data(0x0002);
458         send_cmd(0xE90D); send_data(0x001E);
459         send_cmd(0xE90E); send_data(0x0002);
460         send_cmd(0xE90F); send_data(0x0051);
461         send_cmd(0xEA00); send_data(0x0002);
462         send_cmd(0xEA01); send_data(0x006C);
463         send_cmd(0xEA02); send_data(0x0002);
464         send_cmd(0xEA03); send_data(0x008D);
465         send_cmd(0xEA04); send_data(0x0002);
466         send_cmd(0xEA05); send_data(0x00A5);
467         send_cmd(0xEA06); send_data(0x0002);
468         send_cmd(0xEA07); send_data(0x00C9);
469         send_cmd(0xEA08); send_data(0x0002);
470         send_cmd(0xEA09); send_data(0x00EA);
471         send_cmd(0xEA0A); send_data(0x0003);
472         send_cmd(0xEA0B); send_data(0x0019);
473         send_cmd(0xEA0C); send_data(0x0003);
474         send_cmd(0xEA0D); send_data(0x0045);
475         send_cmd(0xEA0E); send_data(0x0003);
476         send_cmd(0xEA0F); send_data(0x007A);
477         send_cmd(0xEB00); send_data(0x0003);
478         send_cmd(0xEB01); send_data(0x00A0);
479         send_cmd(0xEB02); send_data(0x0003);
480         send_cmd(0xEB03); send_data(0x00F4);
481
482         send_cmd(0x3A00); send_data(0x0007);
483
484         send_cmd(0x3500); send_data(0x0000);
485         
486         send_cmd(0x4C00); send_data(0x0011);
487
488         send_cmd(0x1100); /* Sleep out*/
489         LCD_DelayMS(120);
490 //      send_cmd(0x2900); /* Display On*/
491
492         send_cmd(0x2900); /* Display On*/
493         return 0;
494 }
495
496 static int32_t nt35516_enter_sleep(struct panel_spec *self, uint8_t is_sleep)
497 {
498         send_data_t send_cmd = self->info.mcu->ops->send_cmd;
499         send_cmd_data_t send_cmd_data = self->info.mcu->ops->send_cmd_data;
500         send_data_t send_data = self->info.mcu->ops->send_data;
501
502         if(is_sleep==1){
503                 send_cmd(0x2800);
504                 LCD_DelayMS(120);
505                 send_cmd(0x1000);
506                 LCD_DelayMS(120);
507                 /*Lcd_EnvidOnOff(0);*//*RGB TIMENG OFF*/
508                 /*LCD_Delay(200);*/
509         }else{
510                 send_cmd(0x1100);
511                 LCD_DelayMS(120);
512                 send_cmd(0x2900);
513                 LCD_DelayMS(120);
514                 //send_cmd(0x1100);
515                 //LCD_DelayMS(120);
516                 /*Lcd_EnvidOnOff(1);*//*RGB TIMENG ON*/
517                 /*LCD_Delay(200);*/
518                 /*LCDinit_TFT();*/
519                 /*LCD_Delay(200);*/
520         }
521
522         return 0;
523 }
524
525
526
527
528 static int32_t nt35516_set_window(struct panel_spec*self,
529                 uint16_t left, uint16_t top, uint16_t right, uint16_t bottom)
530 {
531         send_data_t send_cmd = self->info.mcu->ops->send_cmd;
532         send_cmd_data_t send_cmd_data = self->info.mcu->ops->send_cmd_data;
533         send_data_t send_data = self->info.mcu->ops->send_data;
534
535         LCD_PRINT("nt35516_set_window: %d, %d, %d, %d\n",left, top, right, bottom);
536
537         send_cmd(0x2A00); send_data((left>>8));// set left address
538         send_cmd(0x2A01); send_data((left&0xff));
539         send_cmd(0x2A02); send_data((right>>8));// set right address
540         send_cmd(0x2A03); send_data((right&0xff));
541
542         send_cmd(0x2B00); send_data((top>>8));// set left address
543         send_cmd(0x2B01); send_data((top&0xff));
544         send_cmd(0x2B02); send_data((bottom>>8));// set bottom address
545         send_cmd(0x2B03); send_data((bottom&0xff));
546
547         send_cmd(0x2C00);
548
549         return 0;
550 }
551 static int32_t nt35516_invalidate(struct panel_spec *self)
552 {
553         LCD_PRINT("nt35516_invalidate\n");
554
555         return self->ops->panel_set_window(self, 0, 0,
556                 self->width - 1, self->height - 1);
557 }
558
559
560
561 static int32_t nt35516_invalidate_rect(struct panel_spec *self,
562                                 uint16_t left, uint16_t top,
563                                 uint16_t right, uint16_t bottom)
564 {
565         LCD_PRINT("nt35516_invalidate_rect \n");
566
567         return self->ops->panel_set_window(self, left, top,
568                         right, bottom);
569 }
570
571 static int32_t nt35516_read_id(struct panel_spec *self)
572 {
573         int32_t id  = 0;
574         send_data_t send_cmd = self->info.mcu->ops->send_cmd;
575         read_data_t read_data = self->info.mcu->ops->read_data;
576         send_data_t send_data = self->info.mcu->ops->send_data;
577
578         //Get ID
579         send_cmd(0xF000); send_data(0x0055); /*Manufacture Command Set Control */
580         send_cmd(0xF001); send_data(0x00AA);
581         send_cmd(0xF002); send_data(0x0052);
582         send_cmd(0xF003); send_data(0x0008);
583         send_cmd(0xF004); send_data(0x0001);/*Page1*/
584
585         send_cmd(0xc501); //0xc500
586         id = read_data();
587
588         return id;
589 }
590
591 static struct panel_operations lcd_nt35516_operations = {
592         .panel_init = nt35516_init,
593         .panel_set_window = nt35516_set_window,
594         .panel_invalidate_rect= nt35516_invalidate_rect,
595         .panel_invalidate = nt35516_invalidate,
596         .panel_enter_sleep = nt35516_enter_sleep,
597         .panel_readid          = nt35516_read_id
598 };
599
600 static struct timing_mcu lcd_nt35516_timing[] = {
601 [0] = {                    // read/write register timing
602                 .rcss = 15,  // 15ns
603                 .rlpw = 60,
604                 .rhpw = 60,
605                 .wcss = 10,
606                 .wlpw = 35,
607                 .whpw = 35,
608         },
609 [1] = {                    // read/write gram timing
610                 .rcss = 1,  // 15ns
611                 .rlpw = 60,
612                 .rhpw = 60,
613                 .wcss = 0,
614                 .wlpw = 18,
615                 .whpw = 18,
616         },
617 };
618
619 static struct info_mcu lcd_nt35516_info = {
620         .bus_mode = LCD_BUS_8080,
621         .bus_width = 24,
622         .bpp = 24,
623         .timing = lcd_nt35516_timing,
624         .ops = NULL,
625 };
626
627 //lcd_panel_nt35516
628 struct panel_spec lcd_nt35516_mcu_spec = {
629         .width = 540,
630         .height = 960,
631         .type = LCD_MODE_MCU,
632         .direction = LCD_DIRECT_NORMAL,
633         .info = {
634                 .mcu = &lcd_nt35516_info
635         },
636         .ops = &lcd_nt35516_operations,
637 };