tizen 2.4 release
[kernel/u-boot-tm1.git] / drivers / video / sc8825fb / lcd_nt35516_rgb_spi.c
1 /* drivers/video/sc8825/lcd_nt35516_spi.c\r
2  *\r
3  * Support for nt35516 spi LCD device\r
4  *\r
5  * Copyright (C) 2010 Spreadtrum\r
6  *\r
7  * This software is licensed under the terms of the GNU General Public\r
8  * License version 2, as published by the Free Software Foundation, and\r
9  * may be copied, distributed, and modified under those terms.\r
10  *\r
11  * This program is distributed in the hope that it will be useful,\r
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the\r
14  * GNU General Public License for more details.\r
15  */\r
16 \r
17 #include <asm/arch/tiger_lcd.h>\r
18 \r
19 \r
20 //#define  LCD_DEBUG
21 #ifdef LCD_DEBUG
22 #define LCD_PRINT printk
23 #else
24 #define LCD_PRINT(...)
25 #endif
26 \r
27 \r
28 \r
29 #define NT35516_SpiWriteCmd(cmd) \ \r
30 { \\r
31         spi_send_cmd((cmd >>8));\\r
32         spi_send_cmd((cmd & 0xFF));\\r
33 }\r
34 \r
35 #define  NT35516_SpiWriteData(data)\\r
36 { \\r
37         spi_send_data((data >> 8));\\r
38         spi_send_data((data & 0xFF));\\r
39 }\r
40 \r
41 static int32_t nt35516_rgb_spi_init(struct panel_spec *self)\r
42 {\r
43         uint32_t data = 0;\r
44         spi_send_cmd_t spi_send_cmd = self->info.rgb->bus_info.spi->ops->spi_send_cmd; \r
45         spi_send_data_t spi_send_data = self->info.rgb->bus_info.spi->ops->spi_send_data; \r
46         spi_read_t spi_read = self->info.rgb->bus_info.spi->ops->spi_read; \r
47 \r
48         // NT35516 + AUO 4.29'\r
49         // VCC=IOVCC=3.3V  RGB_24Bit\r
50         NT35516_SpiWriteCmd(0xDB00);\r
51         spi_read(&data);\r
52 \r
53         //TEST Commands\r
54         NT35516_SpiWriteCmd(0xFF00); NT35516_SpiWriteData(0xAA);//AA\r
55 \r
56         NT35516_SpiWriteCmd(0xFF01); NT35516_SpiWriteData(0x55);//55\r
57         NT35516_SpiWriteCmd(0xFF02); NT35516_SpiWriteData(0x25);//08\r
58         NT35516_SpiWriteCmd(0xFF03); NT35516_SpiWriteData(0x01);//01\r
59 \r
60         //NT35516_SpiWriteCmd(0xFA0F); NT35516_SpiWriteData(0x20);\r
61 \r
62         NT35516_SpiWriteCmd(0xF300); NT35516_SpiWriteData(0x02);\r
63         NT35516_SpiWriteCmd(0xF303); NT35516_SpiWriteData(0x15);\r
64 \r
65         //ENABLE PAGE 0    \r
66         NT35516_SpiWriteCmd(0xF000); NT35516_SpiWriteData(0x55); //Manufacture Command Set Control   \r
67         NT35516_SpiWriteCmd(0xF001); NT35516_SpiWriteData(0xAA);\r
68         NT35516_SpiWriteCmd(0xF002); NT35516_SpiWriteData(0x52);\r
69         NT35516_SpiWriteCmd(0xF003); NT35516_SpiWriteData(0x08);\r
70         NT35516_SpiWriteCmd(0xF004); NT35516_SpiWriteData(0x00);\r
71 \r
72         NT35516_SpiWriteCmd(0xB800); NT35516_SpiWriteData(0x01); \r
73         NT35516_SpiWriteCmd(0xB801); NT35516_SpiWriteData(0x02);\r
74         NT35516_SpiWriteCmd(0xB802); NT35516_SpiWriteData(0x02);\r
75         NT35516_SpiWriteCmd(0xB803); NT35516_SpiWriteData(0x02);\r
76 \r
77         NT35516_SpiWriteCmd(0xBC00); NT35516_SpiWriteData(0x05); //Zig-Zag Inversion  \r
78         NT35516_SpiWriteCmd(0xBC01); NT35516_SpiWriteData(0x05);\r
79         NT35516_SpiWriteCmd(0xBC02); NT35516_SpiWriteData(0x05);\r
80 \r
81         NT35516_SpiWriteCmd(0x4C00); NT35516_SpiWriteData(0x11); //DB4=1,Enable Vivid Color,DB4=0 Disable Vivid Color\r
82 \r
83         // ENABLE PAGE 1   \r
84         NT35516_SpiWriteCmd(0xF000); NT35516_SpiWriteData(0x55); //Manufacture Command Set Control      \r
85         NT35516_SpiWriteCmd(0xF001); NT35516_SpiWriteData(0xAA);\r
86         NT35516_SpiWriteCmd(0xF002); NT35516_SpiWriteData(0x52);\r
87         NT35516_SpiWriteCmd(0xF003); NT35516_SpiWriteData(0x08);\r
88         NT35516_SpiWriteCmd(0xF004); NT35516_SpiWriteData(0x01);//Page1\r
89 \r
90         NT35516_SpiWriteCmd(0xB000); NT35516_SpiWriteData(0x05); // Setting AVDD Voltage 6V\r
91         NT35516_SpiWriteCmd(0xB001); NT35516_SpiWriteData(0x05);\r
92         NT35516_SpiWriteCmd(0xB002); NT35516_SpiWriteData(0x05);\r
93 \r
94         NT35516_SpiWriteCmd(0xB600); NT35516_SpiWriteData(0x44); // Setting AVEE boosting time 2.5*vpnl \r
95         NT35516_SpiWriteCmd(0xB601); NT35516_SpiWriteData(0x44);\r
96         NT35516_SpiWriteCmd(0xB602); NT35516_SpiWriteData(0x44);\r
97 \r
98         NT35516_SpiWriteCmd(0xB100); NT35516_SpiWriteData(0x05); // Setting AVEE Voltage -6V\r
99         NT35516_SpiWriteCmd(0xB101); NT35516_SpiWriteData(0x05);\r
100         NT35516_SpiWriteCmd(0xB102); NT35516_SpiWriteData(0x05);\r
101 \r
102         //Setting AVEE boosting time -2.5xVPNL\r
103         NT35516_SpiWriteCmd(0xB700); NT35516_SpiWriteData(0x34); \r
104         NT35516_SpiWriteCmd(0xB701); NT35516_SpiWriteData(0x34);\r
105         NT35516_SpiWriteCmd(0xB702); NT35516_SpiWriteData(0x34);\r
106 \r
107         //Setting VGLX boosting time  AVEE-AVDD\r
108         NT35516_SpiWriteCmd(0xBA00); NT35516_SpiWriteData(0x14); //0x24 --> 0x14\r
109         NT35516_SpiWriteCmd(0xBA01); NT35516_SpiWriteData(0x14);\r
110         NT35516_SpiWriteCmd(0xBA02); NT35516_SpiWriteData(0x14);\r
111 \r
112         //Gamma Voltage\r
113         NT35516_SpiWriteCmd(0xBC00); NT35516_SpiWriteData(0x00); \r
114         NT35516_SpiWriteCmd(0xBC01); NT35516_SpiWriteData(0xA0);//VGMP 0x88=4.7V  0x78=4.5V   0xA0=5.0V  \r
115         NT35516_SpiWriteCmd(0xBC02); NT35516_SpiWriteData(0x00);//VGSP \r
116 \r
117         //Gamma Voltage\r
118         NT35516_SpiWriteCmd(0xBD00); NT35516_SpiWriteData(0x00); \r
119         NT35516_SpiWriteCmd(0xBD01); NT35516_SpiWriteData(0xA0);//VGMN 0x88=-4.7V 0x78=-4.5V   0xA0=-5.0V\r
120         NT35516_SpiWriteCmd(0xBD02); NT35516_SpiWriteData(0x00);//VGSN  \r
121 \r
122         NT35516_SpiWriteCmd(0xBE00); NT35516_SpiWriteData(0x57); // Setting VCOM Offset Voltage  0x4E¸ÄΪ0x57  20111019 LIYAN\r
123 \r
124         //GAMMA RED Positive       \r
125         NT35516_SpiWriteCmd(0xD100); NT35516_SpiWriteData(0x00);\r
126         NT35516_SpiWriteCmd(0xD101); NT35516_SpiWriteData(0x32);\r
127         NT35516_SpiWriteCmd(0xD102); NT35516_SpiWriteData(0x00);\r
128         NT35516_SpiWriteCmd(0xD103); NT35516_SpiWriteData(0x41);\r
129         NT35516_SpiWriteCmd(0xD104); NT35516_SpiWriteData(0x00);\r
130         NT35516_SpiWriteCmd(0xD105); NT35516_SpiWriteData(0x54);\r
131         NT35516_SpiWriteCmd(0xD106); NT35516_SpiWriteData(0x00);\r
132         NT35516_SpiWriteCmd(0xD107); NT35516_SpiWriteData(0x67);\r
133         NT35516_SpiWriteCmd(0xD108); NT35516_SpiWriteData(0x00);\r
134         NT35516_SpiWriteCmd(0xD109); NT35516_SpiWriteData(0x7A);\r
135         NT35516_SpiWriteCmd(0xD10A); NT35516_SpiWriteData(0x00);\r
136         NT35516_SpiWriteCmd(0xD10B); NT35516_SpiWriteData(0x98);\r
137         NT35516_SpiWriteCmd(0xD10C); NT35516_SpiWriteData(0x00);\r
138         NT35516_SpiWriteCmd(0xD10D); NT35516_SpiWriteData(0xB0);\r
139         NT35516_SpiWriteCmd(0xD10E); NT35516_SpiWriteData(0x00);\r
140         NT35516_SpiWriteCmd(0xD10F); NT35516_SpiWriteData(0xDB);\r
141         NT35516_SpiWriteCmd(0xD200); NT35516_SpiWriteData(0x01);\r
142         NT35516_SpiWriteCmd(0xD201); NT35516_SpiWriteData(0x01);\r
143         NT35516_SpiWriteCmd(0xD202); NT35516_SpiWriteData(0x01);\r
144         NT35516_SpiWriteCmd(0xD203); NT35516_SpiWriteData(0x3F);\r
145         NT35516_SpiWriteCmd(0xD204); NT35516_SpiWriteData(0x01);\r
146         NT35516_SpiWriteCmd(0xD205); NT35516_SpiWriteData(0x70);\r
147         NT35516_SpiWriteCmd(0xD206); NT35516_SpiWriteData(0x01);\r
148         NT35516_SpiWriteCmd(0xD207); NT35516_SpiWriteData(0xB4);\r
149         NT35516_SpiWriteCmd(0xD208); NT35516_SpiWriteData(0x01);\r
150         NT35516_SpiWriteCmd(0xD209); NT35516_SpiWriteData(0xEC);\r
151         NT35516_SpiWriteCmd(0xD20A); NT35516_SpiWriteData(0x01);\r
152         NT35516_SpiWriteCmd(0xD20B); NT35516_SpiWriteData(0xED);\r
153         NT35516_SpiWriteCmd(0xD20C); NT35516_SpiWriteData(0x02);\r
154         NT35516_SpiWriteCmd(0xD20D); NT35516_SpiWriteData(0x1E);\r
155         NT35516_SpiWriteCmd(0xD20E); NT35516_SpiWriteData(0x02);\r
156         NT35516_SpiWriteCmd(0xD20F); NT35516_SpiWriteData(0x51);\r
157         NT35516_SpiWriteCmd(0xD300); NT35516_SpiWriteData(0x02);\r
158         NT35516_SpiWriteCmd(0xD301); NT35516_SpiWriteData(0x6C);\r
159         NT35516_SpiWriteCmd(0xD302); NT35516_SpiWriteData(0x02);\r
160         NT35516_SpiWriteCmd(0xD303); NT35516_SpiWriteData(0x8D);\r
161         NT35516_SpiWriteCmd(0xD304); NT35516_SpiWriteData(0x02);\r
162         NT35516_SpiWriteCmd(0xD305); NT35516_SpiWriteData(0xA5);\r
163         NT35516_SpiWriteCmd(0xD306); NT35516_SpiWriteData(0x02);\r
164         NT35516_SpiWriteCmd(0xD307); NT35516_SpiWriteData(0xC9);\r
165         NT35516_SpiWriteCmd(0xD308); NT35516_SpiWriteData(0x02);\r
166         NT35516_SpiWriteCmd(0xD309); NT35516_SpiWriteData(0xEA);\r
167         NT35516_SpiWriteCmd(0xD30A); NT35516_SpiWriteData(0x03);\r
168         NT35516_SpiWriteCmd(0xD30B); NT35516_SpiWriteData(0x19);\r
169         NT35516_SpiWriteCmd(0xD30C); NT35516_SpiWriteData(0x03);\r
170         NT35516_SpiWriteCmd(0xD30D); NT35516_SpiWriteData(0x45);\r
171         NT35516_SpiWriteCmd(0xD30E); NT35516_SpiWriteData(0x03);\r
172         NT35516_SpiWriteCmd(0xD30F); NT35516_SpiWriteData(0x7A);\r
173         NT35516_SpiWriteCmd(0xD400); NT35516_SpiWriteData(0x03);\r
174         NT35516_SpiWriteCmd(0xD401); NT35516_SpiWriteData(0xB0);\r
175         NT35516_SpiWriteCmd(0xD402); NT35516_SpiWriteData(0x03);\r
176         NT35516_SpiWriteCmd(0xD403); NT35516_SpiWriteData(0xF4);\r
177 \r
178         //Positive Gamma for GREEN\r
179         NT35516_SpiWriteCmd(0xD500); NT35516_SpiWriteData(0x00);\r
180         NT35516_SpiWriteCmd(0xD501); NT35516_SpiWriteData(0x37);\r
181         NT35516_SpiWriteCmd(0xD502); NT35516_SpiWriteData(0x00);\r
182         NT35516_SpiWriteCmd(0xD503); NT35516_SpiWriteData(0x41);\r
183         NT35516_SpiWriteCmd(0xD504); NT35516_SpiWriteData(0x00);\r
184         NT35516_SpiWriteCmd(0xD505); NT35516_SpiWriteData(0x54);\r
185         NT35516_SpiWriteCmd(0xD506); NT35516_SpiWriteData(0x00);\r
186         NT35516_SpiWriteCmd(0xD507); NT35516_SpiWriteData(0x67);\r
187         NT35516_SpiWriteCmd(0xD508); NT35516_SpiWriteData(0x00);\r
188         NT35516_SpiWriteCmd(0xD509); NT35516_SpiWriteData(0x7A);\r
189         NT35516_SpiWriteCmd(0xD50A); NT35516_SpiWriteData(0x00);\r
190         NT35516_SpiWriteCmd(0xD50B); NT35516_SpiWriteData(0x98);\r
191         NT35516_SpiWriteCmd(0xD50C); NT35516_SpiWriteData(0x00);\r
192         NT35516_SpiWriteCmd(0xD50D); NT35516_SpiWriteData(0xB0);\r
193         NT35516_SpiWriteCmd(0xD50E); NT35516_SpiWriteData(0x00);\r
194         NT35516_SpiWriteCmd(0xD50F); NT35516_SpiWriteData(0xDB);\r
195         NT35516_SpiWriteCmd(0xD600); NT35516_SpiWriteData(0x01);\r
196         NT35516_SpiWriteCmd(0xD601); NT35516_SpiWriteData(0x01);\r
197         NT35516_SpiWriteCmd(0xD602); NT35516_SpiWriteData(0x01);\r
198         NT35516_SpiWriteCmd(0xD603); NT35516_SpiWriteData(0x3F);\r
199         NT35516_SpiWriteCmd(0xD604); NT35516_SpiWriteData(0x01);\r
200         NT35516_SpiWriteCmd(0xD605); NT35516_SpiWriteData(0x70);\r
201         NT35516_SpiWriteCmd(0xD606); NT35516_SpiWriteData(0x01);\r
202         NT35516_SpiWriteCmd(0xD607); NT35516_SpiWriteData(0xB4);\r
203         NT35516_SpiWriteCmd(0xD608); NT35516_SpiWriteData(0x01);\r
204         NT35516_SpiWriteCmd(0xD609); NT35516_SpiWriteData(0xEC);\r
205         NT35516_SpiWriteCmd(0xD60A); NT35516_SpiWriteData(0x01);\r
206         NT35516_SpiWriteCmd(0xD60B); NT35516_SpiWriteData(0xED);\r
207         NT35516_SpiWriteCmd(0xD60C); NT35516_SpiWriteData(0x02);\r
208         NT35516_SpiWriteCmd(0xD60D); NT35516_SpiWriteData(0x1E);\r
209         NT35516_SpiWriteCmd(0xD60E); NT35516_SpiWriteData(0x02);\r
210         NT35516_SpiWriteCmd(0xD60F); NT35516_SpiWriteData(0x51);\r
211         NT35516_SpiWriteCmd(0xD700); NT35516_SpiWriteData(0x02);\r
212         NT35516_SpiWriteCmd(0xD701); NT35516_SpiWriteData(0x6C);\r
213         NT35516_SpiWriteCmd(0xD702); NT35516_SpiWriteData(0x02);\r
214         NT35516_SpiWriteCmd(0xD703); NT35516_SpiWriteData(0x8D);\r
215         NT35516_SpiWriteCmd(0xD704); NT35516_SpiWriteData(0x02);\r
216         NT35516_SpiWriteCmd(0xD705); NT35516_SpiWriteData(0xA5);\r
217         NT35516_SpiWriteCmd(0xD706); NT35516_SpiWriteData(0x02);\r
218         NT35516_SpiWriteCmd(0xD707); NT35516_SpiWriteData(0xC9);\r
219         NT35516_SpiWriteCmd(0xD708); NT35516_SpiWriteData(0x02);\r
220         NT35516_SpiWriteCmd(0xD709); NT35516_SpiWriteData(0xEA);\r
221         NT35516_SpiWriteCmd(0xD70A); NT35516_SpiWriteData(0x03);\r
222         NT35516_SpiWriteCmd(0xD70B); NT35516_SpiWriteData(0x19);\r
223         NT35516_SpiWriteCmd(0xD70C); NT35516_SpiWriteData(0x03);\r
224         NT35516_SpiWriteCmd(0xD70D); NT35516_SpiWriteData(0x45);\r
225         NT35516_SpiWriteCmd(0xD70E); NT35516_SpiWriteData(0x03);\r
226         NT35516_SpiWriteCmd(0xD70F); NT35516_SpiWriteData(0x7A);\r
227         NT35516_SpiWriteCmd(0xD800); NT35516_SpiWriteData(0x03);\r
228         NT35516_SpiWriteCmd(0xD801); NT35516_SpiWriteData(0xA0);\r
229         NT35516_SpiWriteCmd(0xD802); NT35516_SpiWriteData(0x03);\r
230         NT35516_SpiWriteCmd(0xD803); NT35516_SpiWriteData(0xF4);\r
231 \r
232         //Positive Gamma for BLUE\r
233         NT35516_SpiWriteCmd(0xD900); NT35516_SpiWriteData(0x00);\r
234         NT35516_SpiWriteCmd(0xD901); NT35516_SpiWriteData(0x32);\r
235         NT35516_SpiWriteCmd(0xD902); NT35516_SpiWriteData(0x00);\r
236         NT35516_SpiWriteCmd(0xD903); NT35516_SpiWriteData(0x41);\r
237         NT35516_SpiWriteCmd(0xD904); NT35516_SpiWriteData(0x00);\r
238         NT35516_SpiWriteCmd(0xD905); NT35516_SpiWriteData(0x54);\r
239         NT35516_SpiWriteCmd(0xD906); NT35516_SpiWriteData(0x00);\r
240         NT35516_SpiWriteCmd(0xD907); NT35516_SpiWriteData(0x67);\r
241         NT35516_SpiWriteCmd(0xD908); NT35516_SpiWriteData(0x00);\r
242         NT35516_SpiWriteCmd(0xD909); NT35516_SpiWriteData(0x7A);\r
243         NT35516_SpiWriteCmd(0xD90A); NT35516_SpiWriteData(0x00);\r
244         NT35516_SpiWriteCmd(0xD90B); NT35516_SpiWriteData(0x98);\r
245         NT35516_SpiWriteCmd(0xD90C); NT35516_SpiWriteData(0x00);\r
246         NT35516_SpiWriteCmd(0xD90D); NT35516_SpiWriteData(0xB0);\r
247         NT35516_SpiWriteCmd(0xD90E); NT35516_SpiWriteData(0x00);\r
248         NT35516_SpiWriteCmd(0xD90F); NT35516_SpiWriteData(0xDB);\r
249         NT35516_SpiWriteCmd(0xDD00); NT35516_SpiWriteData(0x01);\r
250         NT35516_SpiWriteCmd(0xDD01); NT35516_SpiWriteData(0x01);\r
251         NT35516_SpiWriteCmd(0xDD02); NT35516_SpiWriteData(0x01);\r
252         NT35516_SpiWriteCmd(0xDD03); NT35516_SpiWriteData(0x3F);\r
253         NT35516_SpiWriteCmd(0xDD04); NT35516_SpiWriteData(0x01);\r
254         NT35516_SpiWriteCmd(0xDD05); NT35516_SpiWriteData(0x70);\r
255         NT35516_SpiWriteCmd(0xDD06); NT35516_SpiWriteData(0x01);\r
256         NT35516_SpiWriteCmd(0xDD07); NT35516_SpiWriteData(0xB4);\r
257         NT35516_SpiWriteCmd(0xDD08); NT35516_SpiWriteData(0x01);\r
258         NT35516_SpiWriteCmd(0xDD09); NT35516_SpiWriteData(0xEC);\r
259         NT35516_SpiWriteCmd(0xDD0A); NT35516_SpiWriteData(0x01);\r
260         NT35516_SpiWriteCmd(0xDD0B); NT35516_SpiWriteData(0xED);\r
261         NT35516_SpiWriteCmd(0xDD0C); NT35516_SpiWriteData(0x02);\r
262         NT35516_SpiWriteCmd(0xDD0D); NT35516_SpiWriteData(0x1E);\r
263         NT35516_SpiWriteCmd(0xDD0E); NT35516_SpiWriteData(0x02);\r
264         NT35516_SpiWriteCmd(0xDD0F); NT35516_SpiWriteData(0x51);\r
265         NT35516_SpiWriteCmd(0xDE00); NT35516_SpiWriteData(0x02);\r
266         NT35516_SpiWriteCmd(0xDE01); NT35516_SpiWriteData(0x6C);\r
267         NT35516_SpiWriteCmd(0xDE02); NT35516_SpiWriteData(0x02);\r
268         NT35516_SpiWriteCmd(0xDE03); NT35516_SpiWriteData(0x8D);\r
269         NT35516_SpiWriteCmd(0xDE04); NT35516_SpiWriteData(0x02);\r
270         NT35516_SpiWriteCmd(0xDE05); NT35516_SpiWriteData(0xA5);\r
271         NT35516_SpiWriteCmd(0xDE06); NT35516_SpiWriteData(0x02);\r
272         NT35516_SpiWriteCmd(0xDE07); NT35516_SpiWriteData(0xC9);\r
273         NT35516_SpiWriteCmd(0xDE08); NT35516_SpiWriteData(0x02);\r
274         NT35516_SpiWriteCmd(0xDE09); NT35516_SpiWriteData(0xEA);\r
275         NT35516_SpiWriteCmd(0xDE0A); NT35516_SpiWriteData(0x03);\r
276         NT35516_SpiWriteCmd(0xDE0B); NT35516_SpiWriteData(0x19);\r
277         NT35516_SpiWriteCmd(0xDE0C); NT35516_SpiWriteData(0x03);\r
278         NT35516_SpiWriteCmd(0xDE0D); NT35516_SpiWriteData(0x45);\r
279         NT35516_SpiWriteCmd(0xDE0E); NT35516_SpiWriteData(0x03);\r
280         NT35516_SpiWriteCmd(0xDE0F); NT35516_SpiWriteData(0x7A);\r
281         NT35516_SpiWriteCmd(0xDF00); NT35516_SpiWriteData(0x03);\r
282         NT35516_SpiWriteCmd(0xDF01); NT35516_SpiWriteData(0xA0);\r
283         NT35516_SpiWriteCmd(0xDF02); NT35516_SpiWriteData(0x03);\r
284         NT35516_SpiWriteCmd(0xDF03); NT35516_SpiWriteData(0xF4);\r
285 \r
286         //Negative Gamma for RED\r
287         NT35516_SpiWriteCmd(0xE000); NT35516_SpiWriteData(0x00);\r
288         NT35516_SpiWriteCmd(0xE001); NT35516_SpiWriteData(0x32);\r
289         NT35516_SpiWriteCmd(0xE002); NT35516_SpiWriteData(0x00);\r
290         NT35516_SpiWriteCmd(0xE003); NT35516_SpiWriteData(0x41);\r
291         NT35516_SpiWriteCmd(0xE004); NT35516_SpiWriteData(0x00);\r
292         NT35516_SpiWriteCmd(0xE005); NT35516_SpiWriteData(0x54);\r
293         NT35516_SpiWriteCmd(0xE006); NT35516_SpiWriteData(0x00);\r
294         NT35516_SpiWriteCmd(0xE007); NT35516_SpiWriteData(0x67);\r
295         NT35516_SpiWriteCmd(0xE008); NT35516_SpiWriteData(0x00);\r
296         NT35516_SpiWriteCmd(0xE009); NT35516_SpiWriteData(0x7A);\r
297         NT35516_SpiWriteCmd(0xE00A); NT35516_SpiWriteData(0x00);\r
298         NT35516_SpiWriteCmd(0xE00B); NT35516_SpiWriteData(0x98);\r
299         NT35516_SpiWriteCmd(0xE00C); NT35516_SpiWriteData(0x00);\r
300         NT35516_SpiWriteCmd(0xE00D); NT35516_SpiWriteData(0xB0);\r
301         NT35516_SpiWriteCmd(0xE00E); NT35516_SpiWriteData(0x00);\r
302         NT35516_SpiWriteCmd(0xE00F); NT35516_SpiWriteData(0xDB);\r
303         NT35516_SpiWriteCmd(0xE100); NT35516_SpiWriteData(0x01);\r
304         NT35516_SpiWriteCmd(0xE101); NT35516_SpiWriteData(0x01);\r
305         NT35516_SpiWriteCmd(0xE102); NT35516_SpiWriteData(0x01);\r
306         NT35516_SpiWriteCmd(0xE103); NT35516_SpiWriteData(0x3F);\r
307         NT35516_SpiWriteCmd(0xE104); NT35516_SpiWriteData(0x01);\r
308         NT35516_SpiWriteCmd(0xE105); NT35516_SpiWriteData(0x70);\r
309         NT35516_SpiWriteCmd(0xE106); NT35516_SpiWriteData(0x01);\r
310         NT35516_SpiWriteCmd(0xE107); NT35516_SpiWriteData(0xB4);\r
311         NT35516_SpiWriteCmd(0xE108); NT35516_SpiWriteData(0x01);\r
312         NT35516_SpiWriteCmd(0xE109); NT35516_SpiWriteData(0xEC);\r
313         NT35516_SpiWriteCmd(0xE10A); NT35516_SpiWriteData(0x01);\r
314         NT35516_SpiWriteCmd(0xE10B); NT35516_SpiWriteData(0xED);\r
315         NT35516_SpiWriteCmd(0xE10C); NT35516_SpiWriteData(0x02);\r
316         NT35516_SpiWriteCmd(0xE10D); NT35516_SpiWriteData(0x1E);\r
317         NT35516_SpiWriteCmd(0xE10E); NT35516_SpiWriteData(0x02);\r
318         NT35516_SpiWriteCmd(0xE10F); NT35516_SpiWriteData(0x51);\r
319         NT35516_SpiWriteCmd(0xE200); NT35516_SpiWriteData(0x02);\r
320         NT35516_SpiWriteCmd(0xE201); NT35516_SpiWriteData(0x6C);\r
321         NT35516_SpiWriteCmd(0xE202); NT35516_SpiWriteData(0x02);\r
322         NT35516_SpiWriteCmd(0xE203); NT35516_SpiWriteData(0x8D);\r
323         NT35516_SpiWriteCmd(0xE204); NT35516_SpiWriteData(0x02);\r
324         NT35516_SpiWriteCmd(0xE205); NT35516_SpiWriteData(0xA5);\r
325         NT35516_SpiWriteCmd(0xE206); NT35516_SpiWriteData(0x02);\r
326         NT35516_SpiWriteCmd(0xE207); NT35516_SpiWriteData(0xC9);\r
327         NT35516_SpiWriteCmd(0xE208); NT35516_SpiWriteData(0x02);\r
328         NT35516_SpiWriteCmd(0xE209); NT35516_SpiWriteData(0xEA);\r
329         NT35516_SpiWriteCmd(0xE20A); NT35516_SpiWriteData(0x03);\r
330         NT35516_SpiWriteCmd(0xE20B); NT35516_SpiWriteData(0x19);\r
331         NT35516_SpiWriteCmd(0xE20C); NT35516_SpiWriteData(0x03);\r
332         NT35516_SpiWriteCmd(0xE20D); NT35516_SpiWriteData(0x45);\r
333         NT35516_SpiWriteCmd(0xE20E); NT35516_SpiWriteData(0x03);\r
334         NT35516_SpiWriteCmd(0xE20F); NT35516_SpiWriteData(0x7A);\r
335         NT35516_SpiWriteCmd(0xE300); NT35516_SpiWriteData(0x03);\r
336         NT35516_SpiWriteCmd(0xE301); NT35516_SpiWriteData(0xA0);\r
337         NT35516_SpiWriteCmd(0xE302); NT35516_SpiWriteData(0x03);\r
338         NT35516_SpiWriteCmd(0xE303); NT35516_SpiWriteData(0xF4);\r
339 \r
340         //Negative Gamma for GERREN\r
341         NT35516_SpiWriteCmd(0xE400); NT35516_SpiWriteData(0x00);\r
342         NT35516_SpiWriteCmd(0xE401); NT35516_SpiWriteData(0x32);\r
343         NT35516_SpiWriteCmd(0xE402); NT35516_SpiWriteData(0x00);\r
344         NT35516_SpiWriteCmd(0xE403); NT35516_SpiWriteData(0x41);\r
345         NT35516_SpiWriteCmd(0xE404); NT35516_SpiWriteData(0x00);\r
346         NT35516_SpiWriteCmd(0xE405); NT35516_SpiWriteData(0x54);\r
347         NT35516_SpiWriteCmd(0xE406); NT35516_SpiWriteData(0x00);\r
348         NT35516_SpiWriteCmd(0xE407); NT35516_SpiWriteData(0x67);\r
349         NT35516_SpiWriteCmd(0xE408); NT35516_SpiWriteData(0x00);\r
350         NT35516_SpiWriteCmd(0xE409); NT35516_SpiWriteData(0x7A);\r
351         NT35516_SpiWriteCmd(0xE40A); NT35516_SpiWriteData(0x00);\r
352         NT35516_SpiWriteCmd(0xE40B); NT35516_SpiWriteData(0x98);\r
353         NT35516_SpiWriteCmd(0xE40C); NT35516_SpiWriteData(0x00);\r
354         NT35516_SpiWriteCmd(0xE40D); NT35516_SpiWriteData(0xB0);\r
355         NT35516_SpiWriteCmd(0xE40E); NT35516_SpiWriteData(0x00);\r
356         NT35516_SpiWriteCmd(0xE40F); NT35516_SpiWriteData(0xDB);\r
357         NT35516_SpiWriteCmd(0xE500); NT35516_SpiWriteData(0x01);\r
358         NT35516_SpiWriteCmd(0xE501); NT35516_SpiWriteData(0x01);\r
359         NT35516_SpiWriteCmd(0xE502); NT35516_SpiWriteData(0x01);\r
360         NT35516_SpiWriteCmd(0xE503); NT35516_SpiWriteData(0x3F);\r
361         NT35516_SpiWriteCmd(0xE504); NT35516_SpiWriteData(0x01);\r
362         NT35516_SpiWriteCmd(0xE505); NT35516_SpiWriteData(0x70);\r
363         NT35516_SpiWriteCmd(0xE506); NT35516_SpiWriteData(0x01);\r
364         NT35516_SpiWriteCmd(0xE507); NT35516_SpiWriteData(0xB4);\r
365         NT35516_SpiWriteCmd(0xE508); NT35516_SpiWriteData(0x01);\r
366         NT35516_SpiWriteCmd(0xE509); NT35516_SpiWriteData(0xEC);\r
367         NT35516_SpiWriteCmd(0xE50A); NT35516_SpiWriteData(0x01);\r
368         NT35516_SpiWriteCmd(0xE50B); NT35516_SpiWriteData(0xED);\r
369         NT35516_SpiWriteCmd(0xE50C); NT35516_SpiWriteData(0x02);\r
370         NT35516_SpiWriteCmd(0xE50D); NT35516_SpiWriteData(0x1E);\r
371         NT35516_SpiWriteCmd(0xE50E); NT35516_SpiWriteData(0x02);\r
372         NT35516_SpiWriteCmd(0xE50F); NT35516_SpiWriteData(0x51);\r
373         NT35516_SpiWriteCmd(0xE600); NT35516_SpiWriteData(0x02);\r
374         NT35516_SpiWriteCmd(0xE601); NT35516_SpiWriteData(0x6C);\r
375         NT35516_SpiWriteCmd(0xE602); NT35516_SpiWriteData(0x02);\r
376         NT35516_SpiWriteCmd(0xE603); NT35516_SpiWriteData(0x8D);\r
377         NT35516_SpiWriteCmd(0xE604); NT35516_SpiWriteData(0x02);\r
378         NT35516_SpiWriteCmd(0xE605); NT35516_SpiWriteData(0xA5);\r
379         NT35516_SpiWriteCmd(0xE606); NT35516_SpiWriteData(0x02);\r
380         NT35516_SpiWriteCmd(0xE607); NT35516_SpiWriteData(0xC9);\r
381         NT35516_SpiWriteCmd(0xE608); NT35516_SpiWriteData(0x02);\r
382         NT35516_SpiWriteCmd(0xE609); NT35516_SpiWriteData(0xEA);\r
383         NT35516_SpiWriteCmd(0xE60A); NT35516_SpiWriteData(0x03);\r
384         NT35516_SpiWriteCmd(0xE60B); NT35516_SpiWriteData(0x19);\r
385         NT35516_SpiWriteCmd(0xE60C); NT35516_SpiWriteData(0x03);\r
386         NT35516_SpiWriteCmd(0xE60D); NT35516_SpiWriteData(0x45);\r
387         NT35516_SpiWriteCmd(0xE60E); NT35516_SpiWriteData(0x03);\r
388         NT35516_SpiWriteCmd(0xE60F); NT35516_SpiWriteData(0x7A);\r
389         NT35516_SpiWriteCmd(0xE700); NT35516_SpiWriteData(0x03);\r
390         NT35516_SpiWriteCmd(0xE701); NT35516_SpiWriteData(0xA0);\r
391         NT35516_SpiWriteCmd(0xE702); NT35516_SpiWriteData(0x03);\r
392         NT35516_SpiWriteCmd(0xE703); NT35516_SpiWriteData(0xF4);\r
393 \r
394         //Negative Gamma for BLUE\r
395         NT35516_SpiWriteCmd(0xE800); NT35516_SpiWriteData(0x00);\r
396         NT35516_SpiWriteCmd(0xE801); NT35516_SpiWriteData(0x32);\r
397         NT35516_SpiWriteCmd(0xE802); NT35516_SpiWriteData(0x00);\r
398         NT35516_SpiWriteCmd(0xE803); NT35516_SpiWriteData(0x41);\r
399         NT35516_SpiWriteCmd(0xE804); NT35516_SpiWriteData(0x00);\r
400         NT35516_SpiWriteCmd(0xE805); NT35516_SpiWriteData(0x54);\r
401         NT35516_SpiWriteCmd(0xE806); NT35516_SpiWriteData(0x00);\r
402         NT35516_SpiWriteCmd(0xE807); NT35516_SpiWriteData(0x67);\r
403         NT35516_SpiWriteCmd(0xE808); NT35516_SpiWriteData(0x00);\r
404         NT35516_SpiWriteCmd(0xE809); NT35516_SpiWriteData(0x7A);\r
405         NT35516_SpiWriteCmd(0xE80A); NT35516_SpiWriteData(0x00);\r
406         NT35516_SpiWriteCmd(0xE80B); NT35516_SpiWriteData(0x98);\r
407         NT35516_SpiWriteCmd(0xE80C); NT35516_SpiWriteData(0x00);\r
408         NT35516_SpiWriteCmd(0xE80D); NT35516_SpiWriteData(0xB0);\r
409         NT35516_SpiWriteCmd(0xE80E); NT35516_SpiWriteData(0x00);\r
410         NT35516_SpiWriteCmd(0xE80F); NT35516_SpiWriteData(0xDB);\r
411         NT35516_SpiWriteCmd(0xE900); NT35516_SpiWriteData(0x01);\r
412         NT35516_SpiWriteCmd(0xE901); NT35516_SpiWriteData(0x01);\r
413         NT35516_SpiWriteCmd(0xE902); NT35516_SpiWriteData(0x01);\r
414         NT35516_SpiWriteCmd(0xE903); NT35516_SpiWriteData(0x3F);\r
415         NT35516_SpiWriteCmd(0xE904); NT35516_SpiWriteData(0x01);\r
416         NT35516_SpiWriteCmd(0xE905); NT35516_SpiWriteData(0x70);\r
417         NT35516_SpiWriteCmd(0xE906); NT35516_SpiWriteData(0x01);\r
418         NT35516_SpiWriteCmd(0xE907); NT35516_SpiWriteData(0xB4);\r
419         NT35516_SpiWriteCmd(0xE908); NT35516_SpiWriteData(0x01);\r
420         NT35516_SpiWriteCmd(0xE909); NT35516_SpiWriteData(0xEC);\r
421         NT35516_SpiWriteCmd(0xE90A); NT35516_SpiWriteData(0x01);\r
422         NT35516_SpiWriteCmd(0xE90B); NT35516_SpiWriteData(0xED);\r
423         NT35516_SpiWriteCmd(0xE90C); NT35516_SpiWriteData(0x02);\r
424         NT35516_SpiWriteCmd(0xE90D); NT35516_SpiWriteData(0x1E);\r
425         NT35516_SpiWriteCmd(0xE90E); NT35516_SpiWriteData(0x02);\r
426         NT35516_SpiWriteCmd(0xE90F); NT35516_SpiWriteData(0x51);\r
427         NT35516_SpiWriteCmd(0xEA00); NT35516_SpiWriteData(0x02);\r
428         NT35516_SpiWriteCmd(0xEA01); NT35516_SpiWriteData(0x6C);\r
429         NT35516_SpiWriteCmd(0xEA02); NT35516_SpiWriteData(0x02);\r
430         NT35516_SpiWriteCmd(0xEA03); NT35516_SpiWriteData(0x8D);\r
431         NT35516_SpiWriteCmd(0xEA04); NT35516_SpiWriteData(0x02);\r
432         NT35516_SpiWriteCmd(0xEA05); NT35516_SpiWriteData(0xA5);\r
433         NT35516_SpiWriteCmd(0xEA06); NT35516_SpiWriteData(0x02);\r
434         NT35516_SpiWriteCmd(0xEA07); NT35516_SpiWriteData(0xC9);\r
435         NT35516_SpiWriteCmd(0xEA08); NT35516_SpiWriteData(0x02);\r
436         NT35516_SpiWriteCmd(0xEA09); NT35516_SpiWriteData(0xEA);\r
437         NT35516_SpiWriteCmd(0xEA0A); NT35516_SpiWriteData(0x03);\r
438         NT35516_SpiWriteCmd(0xEA0B); NT35516_SpiWriteData(0x19);\r
439         NT35516_SpiWriteCmd(0xEA0C); NT35516_SpiWriteData(0x03);\r
440         NT35516_SpiWriteCmd(0xEA0D); NT35516_SpiWriteData(0x45);\r
441         NT35516_SpiWriteCmd(0xEA0E); NT35516_SpiWriteData(0x03);\r
442         NT35516_SpiWriteCmd(0xEA0F); NT35516_SpiWriteData(0x7A);\r
443         NT35516_SpiWriteCmd(0xEB00); NT35516_SpiWriteData(0x03);\r
444         NT35516_SpiWriteCmd(0xEB01); NT35516_SpiWriteData(0xA0);\r
445         NT35516_SpiWriteCmd(0xEB02); NT35516_SpiWriteData(0x03);\r
446         NT35516_SpiWriteCmd(0xEB03); NT35516_SpiWriteData(0xF4);\r
447 \r
448         NT35516_SpiWriteCmd(0x3A00); NT35516_SpiWriteData(0x77);\r
449 \r
450         NT35516_SpiWriteCmd(0x3500); NT35516_SpiWriteData(0x00);\r
451 \r
452         NT35516_SpiWriteCmd(0x1100); // Sleep out\r
453         udelay(120);\r
454 \r
455         NT35516_SpiWriteCmd(0x2900); // Display On\r
456 }\r
457 \r
458 static uint32_t nt35516_rgb_spi_readid(struct panel_spec *self)\r
459 {\r
460         /*Jessica TODO: need read id*/\r
461         return 0x16;\r
462 }\r
463 \r
464 #if 0\r
465 void NT35516_RGB_SPI_set_display_window(\r
466     uint16 left,     // start Horizon address\r
467     uint16 right,     // end Horizon address\r
468     uint16 top,         // start Vertical address\r
469     uint16 bottom    // end Vertical address\r
470     )\r
471 {\r
472     NT35516_SpiWriteCmd(0x2A00); NT35516_SpiWriteData((left>>8));// set left address\r
473     NT35516_SpiWriteCmd(0x2A01); NT35516_SpiWriteData((left&0xff));\r
474     NT35516_SpiWriteCmd(0x2A02); NT35516_SpiWriteData((right>>8));// set right address\r
475     NT35516_SpiWriteCmd(0x2A03); NT35516_SpiWriteData((right&0xff));\r
476 \r
477     NT35516_SpiWriteCmd(0x2B00); NT35516_SpiWriteData((top>>8));// set left address\r
478     NT35516_SpiWriteCmd(0x2B01); NT35516_SpiWriteData((top&0xff));\r
479     NT35516_SpiWriteCmd(0x2B02); NT35516_SpiWriteData((bottom>>8));// set bottom address\r
480     NT35516_SpiWriteCmd(0x2B03); NT35516_SpiWriteData((bottom&0xff));\r
481 }\r
482 \r
483 LCD_ERR_E NT35516_RGB_SPI_EnterSleep(BOOLEAN is_sleep)\r
484 {\r
485     if(is_sleep==1)\r
486     {\r
487         NT35516_SpiWriteCmd(0x2800);\r
488         LCD_Delay(200);\r
489         NT35516_SpiWriteCmd(0x1000);\r
490         LCD_Delay(200);\r
491         //Lcd_EnvidOnOff(0);//RGB TIMENG OFF\r
492         //LCD_Delay(200);        \r
493 \r
494     }\r
495     else\r
496     {\r
497         //Lcd_EnvidOnOff(1);//RGB TIMENG ON \r
498         //LCD_Delay(200);\r
499         //LCDinit_TFT();\r
500         //LCD_Delay(200);\r
501 \r
502     }\r
503 \r
504     return 0;\r
505 }\r
506 \r
507 LCD_ERR_E NT35516_RGB_SPI_SetDisplayWindow(\r
508     uint16 left,         //left of the window\r
509     uint16 top,            //top of the window\r
510     uint16 right,        //right of the window\r
511     uint16 bottom        //bottom of the window\r
512     )\r
513 {         \r
514     //NT35516_RGB_SPI_set_display_window(left, right, top, bottom);\r
515 \r
516     NT35516_SpiWriteCmd(0x2C00);\r
517     return TRUE;\r
518 }\r
519 #endif\r
520 \r
521 \r
522 static struct panel_operations lcd_nt35516_rgb_spi_operations = {\r
523         .panel_init = nt35516_rgb_spi_init,\r
524         .panel_readid = nt35516_rgb_spi_readid,\r
525 };\r
526 \r
527 static struct timing_rgb lcd_nt35516_rgb_timing = {\r
528         .hfp = 16,  /* unit: pixel */\r
529         .hbp = 16,\r
530         .hsync = 1,\r
531         .vfp = 16, /*unit: line*/\r
532         .vbp = 16,\r
533         .vsync = 1,\r
534 };\r
535 \r
536 static struct spi_info lcd_nt35516_rgb_spi_info = {\r
537         .ops = NULL,\r
538 };\r
539 \r
540 static struct info_rgb lcd_nt35516_rgb_info = {\r
541         .cmd_bus_mode  = SPRDFB_RGB_BUS_TYPE_SPI,\r
542         .video_bus_width = 24, /*18,16*/\r
543         .h_sync_pol = SPRDFB_POLARITY_POS,\r
544         .v_sync_pol = SPRDFB_POLARITY_POS,\r
545         .de_pol = SPRDFB_POLARITY_POS,\r
546         .timing = &lcd_nt35516_rgb_timing,\r
547         .bus_info = {\r
548                 .spi = &lcd_nt35516_rgb_spi_info,\r
549         }\r
550 };\r
551 \r
552 struct panel_spec lcd_nt35516_rgb_spi_spec = {\r
553         .width = 540,\r
554         .height = 960,\r
555         .type = LCD_MODE_RGB,\r
556         .direction = LCD_DIRECT_NORMAL,\r
557         .info = {\r
558                 .rgb = &lcd_nt35516_rgb_info\r
559         },\r
560         .ops = &lcd_nt35516_rgb_spi_operations,\r
561 };\r