tizen 2.4 release
[profile/mobile/platform/kernel/u-boot-tm1.git] / drivers / video / lcd_nt35510.c
1 /*
2  * Copyright (C) 2012 Spreadtrum Communications Inc.
3  *
4  * This software is licensed under the terms of the GNU General Public
5  * License version 2, as published by the Free Software Foundation, and
6  * may be copied, distributed, and modified under those terms.
7  *
8  * This program is distributed in the hope that it will be useful,
9  * but WITHOUT ANY WARRANTY; without even the implied warranty of
10  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  * GNU General Public License for more details.
12  */
13
14 #include <common.h>
15
16 #include <asm/arch/sc8810_lcd.h>
17 #define mdelay(a) udelay(a * 1000)
18
19 #define  LCD_DEBUG
20 #ifdef LCD_DEBUG
21 #define LCD_PRINT printf
22 #else
23 #define LCD_PRINT(...)
24 #endif
25
26 static int32_t nt35510_init(struct lcd_spec *self)
27 {
28         Send_data send_cmd = self->info.mcu->ops->send_cmd;
29         Send_data send_data = self->info.mcu->ops->send_data;
30
31         LCD_PRINT("nt35510_init===\n"); 
32
33         mdelay(200);
34
35         //Power setting sequence
36         send_cmd(0xF000);
37         send_data(0x55);
38         send_cmd(0xF001);
39         send_data(0xAA);        
40         send_cmd(0xF002);
41         send_data(0x52);
42         send_cmd(0xF003);
43         send_data(0x08);
44         send_cmd(0xF004);
45         send_data(0x01);
46         
47         send_cmd(0xB000);
48         send_data(0x09);
49         send_cmd(0xB001);
50         send_data(0x09);
51         send_cmd(0xB002);
52         send_data(0x09);
53         
54         send_cmd(0xB600);
55         send_data(0x34);
56         send_cmd(0xB601);
57         send_data(0x34);        
58         send_cmd(0xB602);
59         send_data(0x34);
60         
61         send_cmd(0xB100);
62         send_data(0x09);
63         send_cmd(0xB101);
64         send_data(0x09);        
65         send_cmd(0xB102);
66         send_data(0x09);
67         
68         send_cmd(0xB700);
69         send_data(0x24);
70         send_cmd(0xB701);
71         send_data(0x24);        
72         send_cmd(0xB702);
73         send_data(0x24);
74         
75         send_cmd(0xB300);
76         send_data(0x05);
77         send_cmd(0xB301);
78         send_data(0x05);        
79         send_cmd(0xB302);
80         send_data(0x05);
81         
82         send_cmd(0xB900);
83         send_data(0x24);
84         send_cmd(0xB901);
85         send_data(0x24);        
86         send_cmd(0xB902);
87         send_data(0x24);
88         
89         send_cmd(0xBF00);
90         send_data(0x01);
91         
92         send_cmd(0xB500);
93         send_data(0x0B);
94         send_cmd(0xB501);
95         send_data(0x0B);        
96         send_cmd(0xB502);
97         send_data(0x0B);
98         
99         send_cmd(0xBA00);
100         send_data(0x24);
101         send_cmd(0xBA01);
102         send_data(0x24);        
103         send_cmd(0xBA02);
104         send_data(0x24);
105         
106         send_cmd(0xBC00);
107         send_data(0x00);
108         send_cmd(0xBC01);
109         send_data(0xA3);        
110         send_cmd(0xBC02);
111         send_data(0x00);
112         
113         send_cmd(0xBD00);
114         send_data(0x00);
115         send_cmd(0xBD01);
116         send_data(0xA3);        
117         send_cmd(0xBD02);
118         send_data(0x00);
119         
120         mdelay(120);
121
122         //Display parameter setting
123         send_cmd(0xF000);
124         send_data(0x55);
125         send_cmd(0xF001);
126         send_data(0xAA);        
127         send_cmd(0xF002);
128         send_data(0x52);
129         send_cmd(0xF003);
130         send_data(0x08);
131         send_cmd(0xF004);
132         send_data(0x00);
133         
134         send_cmd(0xB000);
135         send_data(0x00);
136         
137         send_cmd(0xB600);
138         send_data(0x0A);
139         
140         send_cmd(0xB700);
141         send_data(0x00);
142         send_cmd(0xB701);
143         send_data(0x00);
144         
145         send_cmd(0xB800);
146         send_data(0x01);
147         send_cmd(0xB801);
148         send_data(0x05);
149         send_cmd(0xB802);
150         send_data(0x05);
151         send_cmd(0xB803);
152         send_data(0x05);
153         
154         send_cmd(0xBA00);
155         send_data(0x01);
156         
157         send_cmd(0xBC00);
158         send_data(0x00);
159         send_cmd(0xBc01);
160         send_data(0x00);
161         send_cmd(0xBC02);
162         send_data(0x00);
163         
164         send_cmd(0xBD00);
165         send_data(0x01);
166         send_cmd(0xBD01);
167         send_data(0x84);        
168         send_cmd(0xBD02);
169         send_data(0x07);
170         send_cmd(0xBD03);
171         send_data(0x31);
172         send_cmd(0xBD04);
173         send_data(0x00);
174         
175         send_cmd(0xBE00);
176         send_data(0x01);
177         send_cmd(0xBE01);
178         send_data(0x84);        
179         send_cmd(0xBE02);
180         send_data(0x07);
181         send_cmd(0xBE03);
182         send_data(0x31);
183         send_cmd(0xBE04);
184         send_data(0x00);
185         
186         send_cmd(0xBF00);
187         send_data(0x01);
188         send_cmd(0xBF01);
189         send_data(0x84);        
190         send_cmd(0xBF02);
191         send_data(0x07);
192         send_cmd(0xBF03);
193         send_data(0x31);
194         send_cmd(0xBF04);
195         send_data(0x00);
196         
197         send_cmd(0xCC00);
198         send_data(0x03);
199         send_cmd(0xCC01);
200         send_data(0x00);        
201         send_cmd(0xCC02);
202         send_data(0x00);
203         
204         send_cmd(0xB101);
205         send_data(0x03);
206
207         send_cmd(0x3500);
208         send_data(0x00);
209         
210         send_cmd(0x3600);
211         send_data(0xD6);//(0x00);->0x01->0x11
212         
213         send_cmd(0x3A00);
214         send_data(0x05);
215         
216         send_cmd(0x2C00);
217
218         //Gamma setting R+
219         send_cmd(0xD100);
220         send_data(0x00);
221         send_cmd(0xD101);
222         send_data(0x37);        
223         send_cmd(0xD102);
224         send_data(0x00);
225         send_cmd(0xD103);
226         send_data(0x51);
227         send_cmd(0xD104);
228         send_data(0x00);
229         send_cmd(0xD105);
230         send_data(0x71);
231         send_cmd(0xD106);
232         send_data(0x00);        
233         send_cmd(0xD107);
234         send_data(0x96);
235         send_cmd(0xD108);
236         send_data(0x00);
237         send_cmd(0xD109);
238         send_data(0xAA);
239         send_cmd(0xD10A);
240         send_data(0x00);
241         send_cmd(0xD10B);
242         send_data(0xC9);        
243         send_cmd(0xD10C);
244         send_data(0x00);
245         send_cmd(0xD10D);
246         send_data(0xE4);
247         send_cmd(0xD10E);
248         send_data(0x01);
249         send_cmd(0xD10F);
250         send_data(0x1C);
251         send_cmd(0xD110);
252         send_data(0x01);
253         send_cmd(0xD111);
254         send_data(0x3C);        
255         send_cmd(0xD112);
256         send_data(0x01);
257         send_cmd(0xD113);
258         send_data(0x80);
259         send_cmd(0xD114);
260         send_data(0x01);
261         send_cmd(0xD115);
262         send_data(0xB5);
263         send_cmd(0xD116);
264         send_data(0x02);        
265         send_cmd(0xD117);
266         send_data(0x02);
267         send_cmd(0xD118);
268         send_data(0x02);
269         send_cmd(0xD119);
270         send_data(0x48);
271         send_cmd(0xD11A);
272         send_data(0x02);
273         send_cmd(0xD11B);
274         send_data(0x4A);        
275         send_cmd(0xD11C);
276         send_data(0x02);
277         send_cmd(0xD11D);
278         send_data(0x83);
279         send_cmd(0xD11E);
280         send_data(0x02);
281         send_cmd(0xD11F);
282         send_data(0xC5);
283         
284         send_cmd(0xD120);
285         send_data(0x02);
286         send_cmd(0xD121);
287         send_data(0xE8);        
288         send_cmd(0xD122);
289         send_data(0x03);
290         send_cmd(0xD123);
291         send_data(0x14);
292         send_cmd(0xD124);
293         send_data(0x03);
294         send_cmd(0xD125);
295         send_data(0x32);
296         send_cmd(0xD126);
297         send_data(0x03);        
298         send_cmd(0xD127);
299         send_data(0x5D);
300         send_cmd(0xD128);
301         send_data(0x03);
302         send_cmd(0xD129);
303         send_data(0x73);
304         send_cmd(0xD12A);
305         send_data(0x03);
306         send_cmd(0xD12B);
307         send_data(0x91);        
308         send_cmd(0xD12C);
309         send_data(0x03);
310         send_cmd(0xD12D);
311         send_data(0xA0);
312         send_cmd(0xD12E);
313         send_data(0x03);
314         send_cmd(0xD12F);
315         send_data(0xBF);
316         
317         send_cmd(0xD130);
318         send_data(0x03);
319         send_cmd(0xD131);
320         send_data(0xCF);        
321         send_cmd(0xD132);
322         send_data(0x03);
323         send_cmd(0xD133);
324         send_data(0xDF);
325
326         //Gamma setting G+
327         send_cmd(0xD200);
328         send_data(0x00);
329         send_cmd(0xD201);
330         send_data(0x37);        
331         send_cmd(0xD202);
332         send_data(0x00);
333         send_cmd(0xD203);
334         send_data(0x51);
335         send_cmd(0xD204);
336         send_data(0x00);
337         send_cmd(0xD205);
338         send_data(0x71);
339         send_cmd(0xD206);
340         send_data(0x00);        
341         send_cmd(0xD207);
342         send_data(0x96);
343         send_cmd(0xD208);
344         send_data(0x00);
345         send_cmd(0xD209);
346         send_data(0xAA);
347         send_cmd(0xD20A);
348         send_data(0x00);
349         send_cmd(0xD20B);
350         send_data(0xC9);        
351         send_cmd(0xD20C);
352         send_data(0x00);
353         send_cmd(0xD20D);
354         send_data(0xE4);
355         send_cmd(0xD20E);
356         send_data(0x01);
357         send_cmd(0xD20F);
358         send_data(0x1C);
359         
360         send_cmd(0xD210);
361         send_data(0x01);
362         send_cmd(0xD211);
363         send_data(0x3C);        
364         send_cmd(0xD212);
365         send_data(0x01);
366         send_cmd(0xD213);
367         send_data(0x80);
368         send_cmd(0xD214);
369         send_data(0x01);
370         send_cmd(0xD215);
371         send_data(0xB5);
372         send_cmd(0xD216);
373         send_data(0x02);        
374         send_cmd(0xD217);
375         send_data(0x02);
376         send_cmd(0xD218);
377         send_data(0x02);
378         send_cmd(0xD219);
379         send_data(0x48);
380         send_cmd(0xD21A);
381         send_data(0x02);
382         send_cmd(0xD21B);
383         send_data(0x4A);        
384         send_cmd(0xD21C);
385         send_data(0x02);
386         send_cmd(0xD21D);
387         send_data(0x83);
388         send_cmd(0xD21E);
389         send_data(0x02);
390         send_cmd(0xD21F);
391         send_data(0xC5);
392         
393         send_cmd(0xD220);
394         send_data(0x02);
395         send_cmd(0xD221);
396         send_data(0xE8);        
397         send_cmd(0xD222);
398         send_data(0x03);
399         send_cmd(0xD223);
400         send_data(0x14);
401         send_cmd(0xD224);
402         send_data(0x03);
403         send_cmd(0xD225);
404         send_data(0x32);
405         send_cmd(0xD226);
406         send_data(0x03);        
407         send_cmd(0xD227);
408         send_data(0x5D);
409         send_cmd(0xD228);
410         send_data(0x03);
411         send_cmd(0xD229);
412         send_data(0x73);
413         send_cmd(0xD22A);
414         send_data(0x03);
415         send_cmd(0xD22B);
416         send_data(0x91);        
417         send_cmd(0xD22C);
418         send_data(0x03);
419         send_cmd(0xD22D);
420         send_data(0xA0);
421         send_cmd(0xD22E);
422         send_data(0x03);
423         send_cmd(0xD22F);
424         send_data(0xBF);
425         
426         send_cmd(0xD230);
427         send_data(0x03);
428         send_cmd(0xD231);
429         send_data(0xCF);        
430         send_cmd(0xD232);
431         send_data(0x03);
432         send_cmd(0xD233);
433         send_data(0xDF);
434
435         //Gamma setting B+
436         send_cmd(0xD300);
437         send_data(0x00);
438         send_cmd(0xD301);
439         send_data(0x37);        
440         send_cmd(0xD302);
441         send_data(0x00);
442         send_cmd(0xD303);
443         send_data(0x51);
444         send_cmd(0xD304);
445         send_data(0x00);
446         send_cmd(0xD305);
447         send_data(0x71);
448         send_cmd(0xD306);
449         send_data(0x00);        
450         send_cmd(0xD307);
451         send_data(0x96);
452         send_cmd(0xD308);
453         send_data(0x00);
454         send_cmd(0xD309);
455         send_data(0xAA);
456         send_cmd(0xD30A);
457         send_data(0x00);
458         send_cmd(0xD30B);
459         send_data(0xC9);        
460         send_cmd(0xD30C);
461         send_data(0x00);
462         send_cmd(0xD30D);
463         send_data(0xE4);
464         send_cmd(0xD30E);
465         send_data(0x01);
466         send_cmd(0xD30F);
467         send_data(0x1C);
468
469         send_cmd(0xD310);
470         send_data(0x01);
471         send_cmd(0xD311);
472         send_data(0x3C);        
473         send_cmd(0xD312);
474         send_data(0x01);
475         send_cmd(0xD313);
476         send_data(0x80);
477         send_cmd(0xD314);
478         send_data(0x01);
479         send_cmd(0xD315);
480         send_data(0xB5);
481         send_cmd(0xD316);
482         send_data(0x02);        
483         send_cmd(0xD317);
484         send_data(0x02);
485         send_cmd(0xD318);
486         send_data(0x02);
487         send_cmd(0xD319);
488         send_data(0x48);
489         send_cmd(0xD31A);
490         send_data(0x02);
491         send_cmd(0xD31B);
492         send_data(0x4A);        
493         send_cmd(0xD31C);
494         send_data(0x02);
495         send_cmd(0xD31D);
496         send_data(0x83);
497         send_cmd(0xD31E);
498         send_data(0x02);
499         send_cmd(0xD31F);
500         send_data(0xC5);
501
502         send_cmd(0xD320);
503         send_data(0x02);
504         send_cmd(0xD321);
505         send_data(0xE8);        
506         send_cmd(0xD322);
507         send_data(0x03);
508         send_cmd(0xD323);
509         send_data(0x14);
510         send_cmd(0xD324);
511         send_data(0x03);
512         send_cmd(0xD325);
513         send_data(0x32);
514         send_cmd(0xD326);
515         send_data(0x03);        
516         send_cmd(0xD327);
517         send_data(0x5D);
518         send_cmd(0xD328);
519         send_data(0x03);
520         send_cmd(0xD329);
521         send_data(0x73);
522         send_cmd(0xD32A);
523         send_data(0x03);
524         send_cmd(0xD32B);
525         send_data(0x91);        
526         send_cmd(0xD32C);
527         send_data(0x03);
528         send_cmd(0xD32D);
529         send_data(0xA0);
530         send_cmd(0xD32E);
531         send_data(0x03);
532         send_cmd(0xD32F);
533         send_data(0xBF);
534
535         send_cmd(0xD330);
536         send_data(0x03);
537         send_cmd(0xD331);
538         send_data(0xCF);        
539         send_cmd(0xD332);
540         send_data(0x03);
541         send_cmd(0xD333);
542         send_data(0xDF);        
543
544         //Gamma setting R-
545         send_cmd(0xD400);
546         send_data(0x00);
547         send_cmd(0xD401);
548         send_data(0x37);        
549         send_cmd(0xD402);
550         send_data(0x00);
551         send_cmd(0xD403);
552         send_data(0x51);
553         send_cmd(0xD404);
554         send_data(0x00);
555         send_cmd(0xD405);
556         send_data(0x71);
557         send_cmd(0xD406);
558         send_data(0x00);        
559         send_cmd(0xD407);
560         send_data(0x96);
561         send_cmd(0xD408);
562         send_data(0x00);
563         send_cmd(0xD409);
564         send_data(0xAA);
565         send_cmd(0xD40A);
566         send_data(0x00);
567         send_cmd(0xD40B);
568         send_data(0xC9);        
569         send_cmd(0xD40C);
570         send_data(0x00);
571         send_cmd(0xD40D);
572         send_data(0xE4);
573         send_cmd(0xD40E);
574         send_data(0x01);
575         send_cmd(0xD40F);
576         send_data(0x1C);
577         
578         send_cmd(0xD410);
579         send_data(0x01);
580         send_cmd(0xD411);
581         send_data(0x3C);        
582         send_cmd(0xD412);
583         send_data(0x01);
584         send_cmd(0xD413);
585         send_data(0x80);
586         send_cmd(0xD414);
587         send_data(0x01);
588         send_cmd(0xD415);
589         send_data(0xB5);
590         send_cmd(0xD416);
591         send_data(0x02);        
592         send_cmd(0xD417);
593         send_data(0x02);
594         send_cmd(0xD418);
595         send_data(0x02);
596         send_cmd(0xD419);
597         send_data(0x48);
598         send_cmd(0xD41A);
599         send_data(0x02);
600         send_cmd(0xD41B);
601         send_data(0x4A);        
602         send_cmd(0xD41C);
603         send_data(0x02);
604         send_cmd(0xD41D);
605         send_data(0x83);
606         send_cmd(0xD41E);
607         send_data(0x02);
608         send_cmd(0xD41F);
609         send_data(0xC5);
610         
611         send_cmd(0xD420);
612         send_data(0x02);
613         send_cmd(0xD421);
614         send_data(0xE8);        
615         send_cmd(0xD422);
616         send_data(0x03);
617         send_cmd(0xD423);
618         send_data(0x14);
619         send_cmd(0xD424);
620         send_data(0x03);
621         send_cmd(0xD425);
622         send_data(0x32);
623         send_cmd(0xD426);
624         send_data(0x03);        
625         send_cmd(0xD427);
626         send_data(0x5D);
627         send_cmd(0xD428);
628         send_data(0x03);
629         send_cmd(0xD429);
630         send_data(0x73);
631         send_cmd(0xD42A);
632         send_data(0x03);
633         send_cmd(0xD42B);
634         send_data(0x91);        
635         send_cmd(0xD42C);
636         send_data(0x03);
637         send_cmd(0xD42D);
638         send_data(0xA0);
639         send_cmd(0xD42E);
640         send_data(0x03);
641         send_cmd(0xD42F);
642         send_data(0xBF);
643         
644         send_cmd(0xD430);
645         send_data(0x03);
646         send_cmd(0xD431);
647         send_data(0xCF);        
648         send_cmd(0xD432);
649         send_data(0x03);
650         send_cmd(0xD433);
651         send_data(0xDF);
652
653         //Gamma setting G-
654         send_cmd(0xD500);
655         send_data(0x00);
656         send_cmd(0xD501);
657         send_data(0x37);        
658         send_cmd(0xD502);
659         send_data(0x00);
660         send_cmd(0xD503);
661         send_data(0x51);
662         send_cmd(0xD504);
663         send_data(0x00);
664         send_cmd(0xD505);
665         send_data(0x71);
666         send_cmd(0xD506);
667         send_data(0x00);        
668         send_cmd(0xD507);
669         send_data(0x96);
670         send_cmd(0xD508);
671         send_data(0x00);
672         send_cmd(0xD509);
673         send_data(0xAA);
674         send_cmd(0xD50A);
675         send_data(0x00);
676         send_cmd(0xD50B);
677         send_data(0xC9);        
678         send_cmd(0xD50C);
679         send_data(0x00);
680         send_cmd(0xD50D);
681         send_data(0xE4);
682         send_cmd(0xD50E);
683         send_data(0x01);
684         send_cmd(0xD50F);
685         send_data(0x1C);
686         
687         send_cmd(0xD510);
688         send_data(0x01);
689         send_cmd(0xD511);
690         send_data(0x3C);        
691         send_cmd(0xD512);
692         send_data(0x01);
693         send_cmd(0xD513);
694         send_data(0x80);
695         send_cmd(0xD514);
696         send_data(0x01);
697         send_cmd(0xD515);
698         send_data(0xB5);
699         send_cmd(0xD516);
700         send_data(0x02);        
701         send_cmd(0xD517);
702         send_data(0x02);
703         send_cmd(0xD518);
704         send_data(0x02);
705         send_cmd(0xD519);
706         send_data(0x48);
707         send_cmd(0xD51A);
708         send_data(0x02);
709         send_cmd(0xD51B);
710         send_data(0x4A);        
711         send_cmd(0xD51C);
712         send_data(0x02);
713         send_cmd(0xD51D);
714         send_data(0x83);
715         send_cmd(0xD51E);
716         send_data(0x02);
717         send_cmd(0xD51F);
718         send_data(0xC5);
719         
720         send_cmd(0xD520);
721         send_data(0x02);
722         send_cmd(0xD521);
723         send_data(0xE8);        
724         send_cmd(0xD522);
725         send_data(0x03);
726         send_cmd(0xD523);
727         send_data(0x14);
728         send_cmd(0xD524);
729         send_data(0x03);
730         send_cmd(0xD525);
731         send_data(0x32);
732         send_cmd(0xD526);
733         send_data(0x03);        
734         send_cmd(0xD527);
735         send_data(0x5D);
736         send_cmd(0xD528);
737         send_data(0x03);
738         send_cmd(0xD529);
739         send_data(0x73);
740         send_cmd(0xD52A);
741         send_data(0x03);
742         send_cmd(0xD52B);
743         send_data(0x91);        
744         send_cmd(0xD52C);
745         send_data(0x03);
746         send_cmd(0xD52D);
747         send_data(0xA0);
748         send_cmd(0xD52E);
749         send_data(0x03);
750         send_cmd(0xD52F);
751         send_data(0xBF);
752         
753         send_cmd(0xD530);
754         send_data(0x03);
755         send_cmd(0xD531);
756         send_data(0xCF);        
757         send_cmd(0xD532);
758         send_data(0x03);
759         send_cmd(0xD533);
760         send_data(0xDF);
761
762         //Gamma setting B-
763         send_cmd(0xD600);
764         send_data(0x00);
765         send_cmd(0xD601);
766         send_data(0x37);        
767         send_cmd(0xD602);
768         send_data(0x00);
769         send_cmd(0xD603);
770         send_data(0x51);
771         send_cmd(0xD604);
772         send_data(0x00);
773         send_cmd(0xD605);
774         send_data(0x71);
775         send_cmd(0xD606);
776         send_data(0x00);        
777         send_cmd(0xD607);
778         send_data(0x96);
779         send_cmd(0xD608);
780         send_data(0x00);
781         send_cmd(0xD609);
782         send_data(0xAA);
783         send_cmd(0xD60A);
784         send_data(0x00);
785         send_cmd(0xD60B);
786         send_data(0xC9);        
787         send_cmd(0xD60C);
788         send_data(0x00);
789         send_cmd(0xD60D);
790         send_data(0xE4);
791         send_cmd(0xD60E);
792         send_data(0x01);
793         send_cmd(0xD60F);
794         send_data(0x1C);
795         
796         send_cmd(0xD610);
797         send_data(0x01);
798         send_cmd(0xD611);
799         send_data(0x3C);        
800         send_cmd(0xD612);
801         send_data(0x01);
802         send_cmd(0xD613);
803         send_data(0x80);
804         send_cmd(0xD614);
805         send_data(0x01);
806         send_cmd(0xD615);
807         send_data(0xB5);
808         send_cmd(0xD616);
809         send_data(0x02);        
810         send_cmd(0xD617);
811         send_data(0x02);
812         send_cmd(0xD618);
813         send_data(0x02);
814         send_cmd(0xD619);
815         send_data(0x48);
816         send_cmd(0xD61A);
817         send_data(0x02);
818         send_cmd(0xD61B);
819         send_data(0x4A);        
820         send_cmd(0xD61C);
821         send_data(0x02);
822         send_cmd(0xD61D);
823         send_data(0x83);
824         send_cmd(0xD61E);
825         send_data(0x02);
826         send_cmd(0xD61F);
827         send_data(0xC5);
828         
829         send_cmd(0xD620);
830         send_data(0x02);
831         send_cmd(0xD621);
832         send_data(0xE8);        
833         send_cmd(0xD622);
834         send_data(0x03);
835         send_cmd(0xD623);
836         send_data(0x14);
837         send_cmd(0xD624);
838         send_data(0x03);
839         send_cmd(0xD625);
840         send_data(0x32);
841         send_cmd(0xD626);
842         send_data(0x03);        
843         send_cmd(0xD627);
844         send_data(0x5D);
845         send_cmd(0xD628);
846         send_data(0x03);
847         send_cmd(0xD629);
848         send_data(0x73);
849         send_cmd(0xD62A);
850         send_data(0x03);
851         send_cmd(0xD62B);
852         send_data(0x91);        
853         send_cmd(0xD62C);
854         send_data(0x03);
855         send_cmd(0xD62D);
856         send_data(0xA0);
857         send_cmd(0xD62E);
858         send_data(0x03);
859         send_cmd(0xD62F);
860         send_data(0xBF);
861         
862         send_cmd(0xD630);
863         send_data(0x03);
864         send_cmd(0xD631);
865         send_data(0xCF);        
866         send_cmd(0xD632);
867         send_data(0x03);
868         send_cmd(0xD633);
869         send_data(0xDF);
870         
871         send_cmd(0x1100); // (DISPON)
872         mdelay(100); // 100ms
873         
874         send_cmd(0x2900); // (DISPON)
875         mdelay(100);
876         
877         return 0;
878 }
879
880
881 static int32_t nt35510_set_window(struct lcd_spec *self,
882                 uint16_t left, uint16_t top, uint16_t right, uint16_t bottom)
883 {
884         Send_data send_cmd = self->info.mcu->ops->send_cmd;
885         Send_data send_data = self->info.mcu->ops->send_data;
886
887         LCD_PRINT("nt35510_set_window:%d, %d, %d, %d\n", left, top, right, bottom);
888         
889         send_cmd(0x2A00);
890         send_data((left >> 8));
891         send_cmd(0x2A01);
892         send_data((left & 0xFF));
893         send_cmd(0x2A02);
894         send_data((right >> 8));
895         send_cmd(0x2A03);
896         send_data((right & 0xFF));
897
898         send_cmd(0x2B00);
899         send_data((top >> 8));
900         send_cmd(0x2B01);
901         send_data((top & 0xFF));
902         send_cmd(0x2B02);
903         send_data((bottom >> 8));
904         send_cmd(0x2B03);
905         send_data((bottom & 0xFF));
906
907         send_cmd(0x2C00);       
908
909         return 0;
910 }
911
912 static int32_t nt35510_invalidate(struct lcd_spec *self)
913 {
914
915         return self->ops->lcd_set_window(self, 0, 0,
916                         self->width-1, self->height-1);
917
918 }
919
920 static int32_t nt35510_invalidate_rect(struct lcd_spec *self,
921                                 uint16_t left, uint16_t top,
922                                 uint16_t right, uint16_t bottom)
923 {
924
925         LCD_PRINT("nt35510_invalidate_rect\n");
926
927         return self->ops->lcd_set_window(self, left, top,
928                         right, bottom);
929 }
930
931 static int32_t nt35510_set_direction(struct lcd_spec *self, uint16_t direction)
932 {
933
934         LCD_PRINT("nt35510_set_direction\n");
935         return 0;
936 }
937
938 static int32_t nt35510_enter_sleep(struct lcd_spec *self, uint8_t is_sleep)
939 {
940         Send_data send_cmd = self->info.mcu->ops->send_cmd;
941         Send_data send_data = self->info.mcu->ops->send_data;
942
943         if(is_sleep) {
944                 LCD_PRINT("[LCD] nt35510_enter_sleep\n");
945                 send_cmd(0x2800);
946                 mdelay(15);     
947
948                 send_cmd(0x1000);
949                 mdelay(120);
950         }
951         else {
952                 LCD_PRINT("[LCD] nt35510_enter_wakeup\n");              
953                 self->ops->lcd_init(self);
954         }
955         return 0;
956 }
957
958 static uint32_t nt35510_read_id(struct lcd_spec *self)
959 {
960         uint32_t read_value = 0;
961         Send_data send_cmd = self->info.mcu->ops->send_cmd;
962         Read_data read_data = self->info.mcu->ops->read_data;
963 #if 1
964         send_cmd(0xDC00);
965         read_value = read_data();
966         LCD_PRINT("nt35510_read_id=%x=====\n",read_value);      
967 #else   
968         send_cmd(0x0400);
969
970         read_data();
971         read_value += read_data()<< 16;
972         LCD_PRINT("ili9486_read_id=%x+++\n",read_value);                
973         read_value += read_data()<< 8;
974         LCD_PRINT("ili9486_read_id=%x++++\n",read_value);               
975         read_value += read_data();
976         LCD_PRINT("ili9486_read_id=%x+++++\n",read_value);              
977 #endif
978         return 0x5bbc; /* !!! WORK AROUND !!! */
979         //return read_value;
980 }
981
982 static struct lcd_operations lcd_nt35510_operations = {
983         .lcd_init            = nt35510_init,
984         .lcd_set_window      = nt35510_set_window,
985         .lcd_invalidate      = nt35510_invalidate,
986         .lcd_invalidate_rect = nt35510_invalidate_rect,
987         .lcd_set_direction   = nt35510_set_direction,
988         .lcd_enter_sleep     = nt35510_enter_sleep,
989         .lcd_readid          = nt35510_read_id,
990 };
991
992 static struct timing_mcu lcd_nt35510_timing[] = {
993         [LCD_REGISTER_TIMING] = {
994                 .rcss = 20,
995                 .rlpw = 55,
996                 .rhpw = 100,
997                 .wcss = 20,
998                 .wlpw = 25,
999                 .whpw = 25,
1000         },
1001         [LCD_GRAM_TIMING] = {
1002                 .rcss = 10, //20,
1003                 .rlpw = 45, //55,
1004                 .rhpw = 90, //100,
1005                 .wcss = 1,//20,
1006                 .wlpw = 15,//25,
1007                 .whpw = 15,//25,
1008         }
1009 };
1010
1011 static struct info_mcu lcd_nt35510_info = {
1012         .bus_mode  = LCD_BUS_8080,
1013         .bus_width = 16,
1014         .timing    = lcd_nt35510_timing,
1015         .ops       = NULL,
1016 };
1017
1018 struct lcd_spec lcd_nt35510_spec = {
1019         .width = 480,
1020         .height = 800,
1021         .mode = LCD_MODE_MCU,
1022         .direction = LCD_DIRECT_NORMAL,
1023         .info = {
1024                 .mcu = &lcd_nt35510_info
1025         },
1026         .ops = &lcd_nt35510_operations,
1027 };
1028