tizen 2.4 release
[kernel/u-boot-tm1.git] / drivers / video / sc8825fb / lcd_nt35516_rgb_i2c.c
1 /* drivers/video/sc8825/lcd_nt35516_i2c.c\r
2  *\r
3  * Support for nt35516 i2c 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_I2C_ADDR   0x4C\r
30 #define NT35516_I2C_DATA_LENGHT      0x2 \r
31 #define NT35516_I2C_ACK              0x01\r
32 //#define Set_NT35516_I2C_Send(len, data)  I2C_WriteCmdArr(NT35516_I2C_ADDR, data ,len, NT35516_I2C_ACK)\r
33 #define Set_NT35516_I2C_Send(len, data)  i2c_write_burst(NT35516_I2C_ADDR, data ,len)\r
34 #define LCDI2C_ID_ADDR 0xDB00\r
35 \r
36 #define NT35516_MAX_PARAM   4\r
37 \r
38 typedef struct LCM_Init_Code_tag {\r
39         unsigned int tag;\r
40         unsigned char data[NT35516_MAX_PARAM];\r
41 }LCM_Init_Code;\r
42 \r
43 #define LCM_TAG_SHIFT 24\r
44 #define LCM_TAG_MASK  ((1 << 24) -1)\r
45 #define LCM_SEND(len) ((1 << LCM_TAG_SHIFT)| len)\r
46 #define LCM_SLEEP(ms) ((2 << LCM_TAG_SHIFT)| ms) \r
47 //#define ARRAY_SIZE(array) ( sizeof(array) / sizeof(array[0]))\r
48 \r
49 #define LCM_TAG_SEND  (1<< 0)\r
50 #define LCM_TAG_SLEEP (1 << 1)\r
51 \r
52 static LCM_Init_Code init_data[] = {\r
53         {LCM_SEND(4), {0xFF, 0x00, 0x00, 0xAA}},//AA\r
54         {LCM_SEND(4), {0xFF, 0x01, 0x00, 0x55}},//55\r
55         {LCM_SEND(4), {0xFF, 0x02, 0x00, 0x25}},//08\r
56         {LCM_SEND(4), {0xFF, 0x03, 0x00, 0x01}},//01\r
57         {LCM_SEND(4), {0xF3, 0x00, 0x00, 0x02}},\r
58         {LCM_SEND(4), {0xF3, 0x03, 0x00, 0x15}},   \r
59         {LCM_SEND(4), {0xF0, 0x00, 0x00, 0x55}}, //Manufacture Command Set Control   \r
60         {LCM_SEND(4), {0xF0, 0x01, 0x00, 0xAA}},\r
61         {LCM_SEND(4), {0xF0, 0x02, 0x00, 0x52}},\r
62         {LCM_SEND(4), {0xF0, 0x03, 0x00, 0x08}},\r
63         {LCM_SEND(4), {0xF0, 0x04, 0x00, 0x00}},\r
64         {LCM_SEND(4), {0xB8, 0x00, 0x00, 0x01}}, \r
65         {LCM_SEND(4), {0xB8, 0x01, 0x00, 0x02}},\r
66         {LCM_SEND(4), {0xB8, 0x02, 0x00, 0x02}},\r
67         {LCM_SEND(4), {0xB8, 0x03, 0x00, 0x02}},\r
68         {LCM_SEND(4), {0xBC, 0x00, 0x00, 0x05}}, //Zig-Zag Inversion  \r
69         {LCM_SEND(4), {0xBC, 0x01, 0x00, 0x05}},\r
70         {LCM_SEND(4), {0xBC, 0x02, 0x00, 0x05}},\r
71         {LCM_SEND(4), {0x4C, 0x00, 0x00, 0x11}}, //DB4=1,Enable Vivid Color,DB4=0 Disable Vivid Color \r
72         {LCM_SEND(4), {0xF0, 0x00, 0x00, 0x55}}, //Manufacture Command Set Control      \r
73         {LCM_SEND(4), {0xF0, 0x01, 0x00, 0xAA}},\r
74         {LCM_SEND(4), {0xF0, 0x02, 0x00, 0x52}},\r
75         {LCM_SEND(4), {0xF0, 0x03, 0x00, 0x08}},\r
76         {LCM_SEND(4), {0xF0, 0x04, 0x00, 0x01}},//Page1\r
77         {LCM_SEND(4), {0xB0, 0x00, 0x00, 0x05}}, // Setting AVDD Voltage 6V\r
78         {LCM_SEND(4), {0xB0, 0x01, 0x00, 0x05}},\r
79         {LCM_SEND(4), {0xB0, 0x02, 0x00, 0x05}},\r
80         {LCM_SEND(4), {0xB6, 0x00, 0x00, 0x44}}, // Setting AVEE boosting time 2.5*vpnl \r
81         {LCM_SEND(4), {0xB6, 0x01, 0x00, 0x44}},\r
82         {LCM_SEND(4), {0xB6, 0x02, 0x00, 0x44}},\r
83         {LCM_SEND(4), {0xB1, 0x00, 0x00, 0x05}}, // Setting AVEE Voltage -6V\r
84         {LCM_SEND(4), {0xB1, 0x01, 0x00, 0x05}},\r
85         {LCM_SEND(4), {0xB1, 0x02, 0x00, 0x05}},\r
86         {LCM_SEND(4), {0xB7, 0x00, 0x00, 0x34}}, \r
87         {LCM_SEND(4), {0xB7, 0x01, 0x00, 0x34}},\r
88         {LCM_SEND(4), {0xB7, 0x02, 0x00, 0x34}},\r
89         {LCM_SEND(4), {0xBA, 0x00, 0x00, 0x14}}, //0x24 --> 0x14\r
90         {LCM_SEND(4), {0xBA, 0x01, 0x00, 0x14}},\r
91         {LCM_SEND(4), {0xBA, 0x02, 0x00, 0x14}},\r
92         {LCM_SEND(4), {0xBC, 0x00, 0x00, 0x00}}, \r
93         {LCM_SEND(4), {0xBC, 0x01, 0x00, 0xA0}},//VGMP 0x88=4.7V  0x78=4.5V   0xA0=5.0V  \r
94         {LCM_SEND(4), {0xBC, 0x02, 0x00, 0x00}},//VGSP \r
95         {LCM_SEND(4), {0xBD, 0x00, 0x00, 0x00}}, \r
96         {LCM_SEND(4), {0xBD, 0x01, 0x00, 0xA0}},//VGMN 0x88=-4.7V 0x78=-4.5V   0xA0=-5.0V\r
97         {LCM_SEND(4), {0xBD, 0x02, 0x00, 0x00}},//VGSN  \r
98         {LCM_SEND(4), {0xBE, 0x00, 0x00, 0x57}}, // Setting VCOM Offset Voltage  0x4E¸ÄΪ0x57  20111019 LIYAN      \r
99         {LCM_SEND(4), {0xD1, 0x00, 0x00, 0x00}},\r
100         {LCM_SEND(4), {0xD1, 0x01, 0x00, 0x32}},\r
101         {LCM_SEND(4), {0xD1, 0x02, 0x00, 0x00}},\r
102         {LCM_SEND(4), {0xD1, 0x03, 0x00, 0x41}},\r
103         {LCM_SEND(4), {0xD1, 0x04, 0x00, 0x00}},\r
104         {LCM_SEND(4), {0xD1, 0x05, 0x00, 0x54}},\r
105         {LCM_SEND(4), {0xD1, 0x06, 0x00, 0x00}},\r
106         {LCM_SEND(4), {0xD1, 0x07, 0x00, 0x67}},\r
107         {LCM_SEND(4), {0xD1, 0x08, 0x00, 0x00}},\r
108         {LCM_SEND(4), {0xD1, 0x09, 0x00, 0x7A}},\r
109         {LCM_SEND(4), {0xD1, 0x0A, 0x00, 0x00}},\r
110         {LCM_SEND(4), {0xD1, 0x0B, 0x00, 0x98}},\r
111         {LCM_SEND(4), {0xD1, 0x0C, 0x00, 0x00}},\r
112         {LCM_SEND(4), {0xD1, 0x0D, 0x00, 0xB0}},\r
113         {LCM_SEND(4), {0xD1, 0x0E, 0x00, 0x00}},\r
114         {LCM_SEND(4), {0xD1, 0x0F, 0x00, 0xDB}},\r
115         {LCM_SEND(4), {0xD2, 0x00, 0x00, 0x01}},\r
116         {LCM_SEND(4), {0xD2, 0x01, 0x00, 0x01}},\r
117         {LCM_SEND(4), {0xD2, 0x02, 0x00, 0x01}},\r
118         {LCM_SEND(4), {0xD2, 0x03, 0x00, 0x3F}},\r
119         {LCM_SEND(4), {0xD2, 0x04, 0x00, 0x01}},\r
120         {LCM_SEND(4), {0xD2, 0x05, 0x00, 0x70}},\r
121         {LCM_SEND(4), {0xD2, 0x06, 0x00, 0x01}},\r
122         {LCM_SEND(4), {0xD2, 0x07, 0x00, 0xB4}},\r
123         {LCM_SEND(4), {0xD2, 0x08, 0x00, 0x01}},\r
124         {LCM_SEND(4), {0xD2, 0x09, 0x00, 0xEC}},\r
125         {LCM_SEND(4), {0xD2, 0x0A, 0x00, 0x01}},\r
126         {LCM_SEND(4), {0xD2, 0x0B, 0x00, 0xED}},\r
127         {LCM_SEND(4), {0xD2, 0x0C, 0x00, 0x02}},\r
128         {LCM_SEND(4), {0xD2, 0x0D, 0x00, 0x1E}},\r
129         {LCM_SEND(4), {0xD2, 0x0E, 0x00, 0x02}},\r
130         {LCM_SEND(4), {0xD2, 0x0F, 0x00, 0x51}},\r
131         {LCM_SEND(4), {0xD3, 0x00, 0x00, 0x02}},\r
132         {LCM_SEND(4), {0xD3, 0x01, 0x00, 0x6C}},\r
133         {LCM_SEND(4), {0xD3, 0x02, 0x00, 0x02}},\r
134         {LCM_SEND(4), {0xD3, 0x03, 0x00, 0x8D}},\r
135         {LCM_SEND(4), {0xD3, 0x04, 0x00, 0x02}},\r
136         {LCM_SEND(4), {0xD3, 0x05, 0x00, 0xA5}},\r
137         {LCM_SEND(4), {0xD3, 0x06, 0x00, 0x02}},\r
138         {LCM_SEND(4), {0xD3, 0x07, 0x00, 0xC9}},\r
139         {LCM_SEND(4), {0xD3, 0x08, 0x00, 0x02}},\r
140         {LCM_SEND(4), {0xD3, 0x09, 0x00, 0xEA}},\r
141         {LCM_SEND(4), {0xD3, 0x0A, 0x00, 0x03}},\r
142         {LCM_SEND(4), {0xD3, 0x0B, 0x00, 0x19}},\r
143         {LCM_SEND(4), {0xD3, 0x0C, 0x00, 0x03}},\r
144         {LCM_SEND(4), {0xD3, 0x0D, 0x00, 0x45}},\r
145         {LCM_SEND(4), {0xD3, 0x0E, 0x00, 0x03}},\r
146         {LCM_SEND(4), {0xD3, 0x0F, 0x00, 0x7A}},\r
147         {LCM_SEND(4), {0xD4, 0x00, 0x00, 0x03}},\r
148         {LCM_SEND(4), {0xD4, 0x01, 0x00, 0xB0}},\r
149         {LCM_SEND(4), {0xD4, 0x02, 0x00, 0x03}},\r
150         {LCM_SEND(4), {0xD4, 0x03, 0x00, 0xF4}},\r
151         {LCM_SEND(4), {0xD5, 0x00, 0x00, 0x00}},\r
152         {LCM_SEND(4), {0xD5, 0x01, 0x00, 0x37}},\r
153         {LCM_SEND(4), {0xD5, 0x02, 0x00, 0x00}},\r
154         {LCM_SEND(4), {0xD5, 0x03, 0x00, 0x41}},\r
155         {LCM_SEND(4), {0xD5, 0x04, 0x00, 0x00}},\r
156         {LCM_SEND(4), {0xD5, 0x05, 0x00, 0x54}},\r
157         {LCM_SEND(4), {0xD5, 0x06, 0x00, 0x00}},\r
158         {LCM_SEND(4), {0xD5, 0x07, 0x00, 0x67}},\r
159         {LCM_SEND(4), {0xD5, 0x08, 0x00, 0x00}},\r
160         {LCM_SEND(4), {0xD5, 0x09, 0x00, 0x7A}},\r
161         {LCM_SEND(4), {0xD5, 0x0A, 0x00, 0x00}},\r
162         {LCM_SEND(4), {0xD5, 0x0B, 0x00, 0x98}},\r
163         {LCM_SEND(4), {0xD5, 0x0C, 0x00, 0x00}},\r
164         {LCM_SEND(4), {0xD5, 0x0D, 0x00, 0xB0}},\r
165         {LCM_SEND(4), {0xD5, 0x0E, 0x00, 0x00}},\r
166         {LCM_SEND(4), {0xD5, 0x0F, 0x00, 0xDB}},\r
167         {LCM_SEND(4), {0xD6, 0x00, 0x00, 0x01}},\r
168         {LCM_SEND(4), {0xD6, 0x01, 0x00, 0x01}},\r
169         {LCM_SEND(4), {0xD6, 0x02, 0x00, 0x01}},\r
170         {LCM_SEND(4), {0xD6, 0x03, 0x00, 0x3F}},\r
171         {LCM_SEND(4), {0xD6, 0x04, 0x00, 0x01}},\r
172         {LCM_SEND(4), {0xD6, 0x05, 0x00, 0x70}},\r
173         {LCM_SEND(4), {0xD6, 0x06, 0x00, 0x01}},\r
174         {LCM_SEND(4), {0xD6, 0x07, 0x00, 0xB4}},\r
175         {LCM_SEND(4), {0xD6, 0x08, 0x00, 0x01}},\r
176         {LCM_SEND(4), {0xD6, 0x09, 0x00, 0xEC}},\r
177         {LCM_SEND(4), {0xD6, 0x0A, 0x00, 0x01}},\r
178         {LCM_SEND(4), {0xD6, 0x0B, 0x00, 0xED}},\r
179         {LCM_SEND(4), {0xD6, 0x0C, 0x00, 0x02}},\r
180         {LCM_SEND(4), {0xD6, 0x0D, 0x00, 0x1E}},\r
181         {LCM_SEND(4), {0xD6, 0x0E, 0x00, 0x02}},\r
182         {LCM_SEND(4), {0xD6, 0x0F, 0x00, 0x51}},\r
183         {LCM_SEND(4), {0xD7, 0x00, 0x00, 0x02}},\r
184         {LCM_SEND(4), {0xD7, 0x01, 0x00, 0x6C}},\r
185         {LCM_SEND(4), {0xD7, 0x02, 0x00, 0x02}},\r
186         {LCM_SEND(4), {0xD7, 0x03, 0x00, 0x8D}},\r
187         {LCM_SEND(4), {0xD7, 0x04, 0x00, 0x02}},\r
188         {LCM_SEND(4), {0xD7, 0x05, 0x00, 0xA5}},\r
189         {LCM_SEND(4), {0xD7, 0x06, 0x00, 0x02}},\r
190         {LCM_SEND(4), {0xD7, 0x07, 0x00, 0xC9}},\r
191         {LCM_SEND(4), {0xD7, 0x08, 0x00, 0x02}},\r
192         {LCM_SEND(4), {0xD7, 0x09, 0x00, 0xEA}},\r
193         {LCM_SEND(4), {0xD7, 0x0A, 0x00, 0x03}},\r
194         {LCM_SEND(4), {0xD7, 0x0B, 0x00, 0x19}},\r
195         {LCM_SEND(4), {0xD7, 0x0C, 0x00, 0x03}},\r
196         {LCM_SEND(4), {0xD7, 0x0D, 0x00, 0x45}},\r
197         {LCM_SEND(4), {0xD7, 0x0E, 0x00, 0x03}},\r
198         {LCM_SEND(4), {0xD7, 0x0F, 0x00, 0x7A}},\r
199         {LCM_SEND(4), {0xD8, 0x00, 0x00, 0x03}},\r
200         {LCM_SEND(4), {0xD8, 0x01, 0x00, 0xA0}},\r
201         {LCM_SEND(4), {0xD8, 0x02, 0x00, 0x03}},\r
202         {LCM_SEND(4), {0xD8, 0x03, 0x00, 0xF4}},\r
203         {LCM_SEND(4), {0xD9, 0x00, 0x00, 0x00}},\r
204         {LCM_SEND(4), {0xD9, 0x01, 0x00, 0x32}},\r
205         {LCM_SEND(4), {0xD9, 0x02, 0x00, 0x00}},\r
206         {LCM_SEND(4), {0xD9, 0x03, 0x00, 0x41}},\r
207         {LCM_SEND(4), {0xD9, 0x04, 0x00, 0x00}},\r
208         {LCM_SEND(4), {0xD9, 0x05, 0x00, 0x54}},\r
209         {LCM_SEND(4), {0xD9, 0x06, 0x00, 0x00}},\r
210         {LCM_SEND(4), {0xD9, 0x07, 0x00, 0x67}},\r
211         {LCM_SEND(4), {0xD9, 0x08, 0x00, 0x00}},\r
212         {LCM_SEND(4), {0xD9, 0x09, 0x00, 0x7A}},\r
213         {LCM_SEND(4), {0xD9, 0x0A, 0x00, 0x00}},\r
214         {LCM_SEND(4), {0xD9, 0x0B, 0x00, 0x98}},\r
215         {LCM_SEND(4), {0xD9, 0x0C, 0x00, 0x00}},\r
216         {LCM_SEND(4), {0xD9, 0x0D, 0x00, 0xB0}},\r
217         {LCM_SEND(4), {0xD9, 0x0E, 0x00, 0x00}},\r
218         {LCM_SEND(4), {0xD9, 0x0F, 0x00, 0xDB}},\r
219         {LCM_SEND(4), {0xDD, 0x00, 0x00, 0x01}},\r
220         {LCM_SEND(4), {0xDD, 0x01, 0x00, 0x01}},\r
221         {LCM_SEND(4), {0xDD, 0x02, 0x00, 0x01}},\r
222         {LCM_SEND(4), {0xDD, 0x03, 0x00, 0x3F}},\r
223         {LCM_SEND(4), {0xDD, 0x04, 0x00, 0x01}},\r
224         {LCM_SEND(4), {0xDD, 0x05, 0x00, 0x70}},\r
225         {LCM_SEND(4), {0xDD, 0x06, 0x00, 0x01}},\r
226         {LCM_SEND(4), {0xDD, 0x07, 0x00, 0xB4}},\r
227         {LCM_SEND(4), {0xDD, 0x08, 0x00, 0x01}},\r
228         {LCM_SEND(4), {0xDD, 0x09, 0x00, 0xEC}},\r
229         {LCM_SEND(4), {0xDD, 0x0A, 0x00, 0x01}},\r
230         {LCM_SEND(4), {0xDD, 0x0B, 0x00, 0xED}},\r
231         {LCM_SEND(4), {0xDD, 0x0C, 0x00, 0x02}},\r
232         {LCM_SEND(4), {0xDD, 0x0D, 0x00, 0x1E}},\r
233         {LCM_SEND(4), {0xDD, 0x0E, 0x00, 0x02}},\r
234         {LCM_SEND(4), {0xDD, 0x0F, 0x00, 0x51}},\r
235         {LCM_SEND(4), {0xDE, 0x00, 0x00, 0x02}},\r
236         {LCM_SEND(4), {0xDE, 0x01, 0x00, 0x6C}},\r
237         {LCM_SEND(4), {0xDE, 0x02, 0x00, 0x02}},\r
238         {LCM_SEND(4), {0xDE, 0x03, 0x00, 0x8D}},\r
239         {LCM_SEND(4), {0xDE, 0x04, 0x00, 0x02}},\r
240         {LCM_SEND(4), {0xDE, 0x05, 0x00, 0xA5}},\r
241         {LCM_SEND(4), {0xDE, 0x06, 0x00, 0x02}},\r
242         {LCM_SEND(4), {0xDE, 0x07, 0x00, 0xC9}},\r
243         {LCM_SEND(4), {0xDE, 0x08, 0x00, 0x02}},\r
244         {LCM_SEND(4), {0xDE, 0x09, 0x00, 0xEA}},\r
245         {LCM_SEND(4), {0xDE, 0x0A, 0x00, 0x03}},\r
246         {LCM_SEND(4), {0xDE, 0x0B, 0x00, 0x19}},\r
247         {LCM_SEND(4), {0xDE, 0x0C, 0x00, 0x03}},\r
248         {LCM_SEND(4), {0xDE, 0x0D, 0x00, 0x45}},\r
249         {LCM_SEND(4), {0xDE, 0x0E, 0x00, 0x03}},\r
250         {LCM_SEND(4), {0xDE, 0x0F, 0x00, 0x7A}},\r
251         {LCM_SEND(4), {0xDF, 0x00, 0x00, 0x03}},\r
252         {LCM_SEND(4), {0xDF, 0x01, 0x00, 0xA0}},\r
253         {LCM_SEND(4), {0xDF, 0x02, 0x00, 0x03}},\r
254         {LCM_SEND(4), {0xDF, 0x03, 0x00, 0xF4}},\r
255         {LCM_SEND(4), {0xE0, 0x00, 0x00, 0x00}},\r
256         {LCM_SEND(4), {0xE0, 0x01, 0x00, 0x32}},\r
257         {LCM_SEND(4), {0xE0, 0x02, 0x00, 0x00}},\r
258         {LCM_SEND(4), {0xE0, 0x03, 0x00, 0x41}},\r
259         {LCM_SEND(4), {0xE0, 0x04, 0x00, 0x00}},\r
260         {LCM_SEND(4), {0xE0, 0x05, 0x00, 0x54}},\r
261         {LCM_SEND(4), {0xE0, 0x06, 0x00, 0x00}},\r
262         {LCM_SEND(4), {0xE0, 0x07, 0x00, 0x67}},\r
263         {LCM_SEND(4), {0xE0, 0x08, 0x00, 0x00}},\r
264         {LCM_SEND(4), {0xE0, 0x09, 0x00, 0x7A}},\r
265         {LCM_SEND(4), {0xE0, 0x0A, 0x00, 0x00}},\r
266         {LCM_SEND(4), {0xE0, 0x0B, 0x00, 0x98}},\r
267         {LCM_SEND(4), {0xE0, 0x0C, 0x00, 0x00}},\r
268         {LCM_SEND(4), {0xE0, 0x0D, 0x00, 0xB0}},\r
269         {LCM_SEND(4), {0xE0, 0x0E, 0x00, 0x00}},\r
270         {LCM_SEND(4), {0xE0, 0x0F, 0x00, 0xDB}},\r
271         {LCM_SEND(4), {0xE1, 0x00, 0x00, 0x01}},\r
272         {LCM_SEND(4), {0xE1, 0x01, 0x00, 0x01}},\r
273         {LCM_SEND(4), {0xE1, 0x02, 0x00, 0x01}},\r
274         {LCM_SEND(4), {0xE1, 0x03, 0x00, 0x3F}},\r
275         {LCM_SEND(4), {0xE1, 0x04, 0x00, 0x01}},\r
276         {LCM_SEND(4), {0xE1, 0x05, 0x00, 0x70}},\r
277         {LCM_SEND(4), {0xE1, 0x06, 0x00, 0x01}},\r
278         {LCM_SEND(4), {0xE1, 0x07, 0x00, 0xB4}},\r
279         {LCM_SEND(4), {0xE1, 0x08, 0x00, 0x01}},\r
280         {LCM_SEND(4), {0xE1, 0x09, 0x00, 0xEC}},\r
281         {LCM_SEND(4), {0xE1, 0x0A, 0x00, 0x01}},\r
282         {LCM_SEND(4), {0xE1, 0x0B, 0x00, 0xED}},\r
283         {LCM_SEND(4), {0xE1, 0x0C, 0x00, 0x02}},\r
284         {LCM_SEND(4), {0xE1, 0x0D, 0x00, 0x1E}},\r
285         {LCM_SEND(4), {0xE1, 0x0E, 0x00, 0x02}},\r
286         {LCM_SEND(4), {0xE1, 0x0F, 0x00, 0x51}},\r
287         {LCM_SEND(4), {0xE2, 0x00, 0x00, 0x02}},\r
288         {LCM_SEND(4), {0xE2, 0x01, 0x00, 0x6C}},\r
289         {LCM_SEND(4), {0xE2, 0x02, 0x00, 0x02}},\r
290         {LCM_SEND(4), {0xE2, 0x03, 0x00, 0x8D}},\r
291         {LCM_SEND(4), {0xE2, 0x04, 0x00, 0x02}},\r
292         {LCM_SEND(4), {0xE2, 0x05, 0x00, 0xA5}},\r
293         {LCM_SEND(4), {0xE2, 0x06, 0x00, 0x02}},\r
294         {LCM_SEND(4), {0xE2, 0x07, 0x00, 0xC9}},\r
295         {LCM_SEND(4), {0xE2, 0x08, 0x00, 0x02}},\r
296         {LCM_SEND(4), {0xE2, 0x09, 0x00, 0xEA}},\r
297         {LCM_SEND(4), {0xE2, 0x0A, 0x00, 0x03}},\r
298         {LCM_SEND(4), {0xE2, 0x0B, 0x00, 0x19}},\r
299         {LCM_SEND(4), {0xE2, 0x0C, 0x00, 0x03}},\r
300         {LCM_SEND(4), {0xE2, 0x0D, 0x00, 0x45}},\r
301         {LCM_SEND(4), {0xE2, 0x0E, 0x00, 0x03}},\r
302         {LCM_SEND(4), {0xE2, 0x0F, 0x00, 0x7A}},\r
303         {LCM_SEND(4), {0xE3, 0x00, 0x00, 0x03}},\r
304         {LCM_SEND(4), {0xE3, 0x01, 0x00, 0xA0}},\r
305         {LCM_SEND(4), {0xE3, 0x02, 0x00, 0x03}},\r
306         {LCM_SEND(4), {0xE3, 0x03, 0x00, 0xF4}},\r
307         {LCM_SEND(4), {0xE4, 0x00, 0x00, 0x00}},\r
308         {LCM_SEND(4), {0xE4, 0x01, 0x00, 0x32}},\r
309         {LCM_SEND(4), {0xE4, 0x02, 0x00, 0x00}},\r
310         {LCM_SEND(4), {0xE4, 0x03, 0x00, 0x41}},\r
311         {LCM_SEND(4), {0xE4, 0x04, 0x00, 0x00}},\r
312         {LCM_SEND(4), {0xE4, 0x05, 0x00, 0x54}},\r
313         {LCM_SEND(4), {0xE4, 0x06, 0x00, 0x00}},\r
314         {LCM_SEND(4), {0xE4, 0x07, 0x00, 0x67}},\r
315         {LCM_SEND(4), {0xE4, 0x08, 0x00, 0x00}},\r
316         {LCM_SEND(4), {0xE4, 0x09, 0x00, 0x7A}},\r
317         {LCM_SEND(4), {0xE4, 0x0A, 0x00, 0x00}},\r
318         {LCM_SEND(4), {0xE4, 0x0B, 0x00, 0x98}},\r
319         {LCM_SEND(4), {0xE4, 0x0C, 0x00, 0x00}},\r
320         {LCM_SEND(4), {0xE4, 0x0D, 0x00, 0xB0}},\r
321         {LCM_SEND(4), {0xE4, 0x0E, 0x00, 0x00}},\r
322         {LCM_SEND(4), {0xE4, 0x0F, 0x00, 0xDB}},\r
323         {LCM_SEND(4), {0xE5, 0x00, 0x00, 0x01}},\r
324         {LCM_SEND(4), {0xE5, 0x01, 0x00, 0x01}},\r
325         {LCM_SEND(4), {0xE5, 0x02, 0x00, 0x01}},\r
326         {LCM_SEND(4), {0xE5, 0x03, 0x00, 0x3F}},\r
327         {LCM_SEND(4), {0xE5, 0x04, 0x00, 0x01}},\r
328         {LCM_SEND(4), {0xE5, 0x05, 0x00, 0x70}},\r
329         {LCM_SEND(4), {0xE5, 0x06, 0x00, 0x01}},\r
330         {LCM_SEND(4), {0xE5, 0x07, 0x00, 0xB4}},\r
331         {LCM_SEND(4), {0xE5, 0x08, 0x00, 0x01}},\r
332         {LCM_SEND(4), {0xE5, 0x09, 0x00, 0xEC}},\r
333         {LCM_SEND(4), {0xE5, 0x0A, 0x00, 0x01}},\r
334         {LCM_SEND(4), {0xE5, 0x0B, 0x00, 0xED}},\r
335         {LCM_SEND(4), {0xE5, 0x0C, 0x00, 0x02}},\r
336         {LCM_SEND(4), {0xE5, 0x0D, 0x00, 0x1E}},\r
337         {LCM_SEND(4), {0xE5, 0x0E, 0x00, 0x02}},\r
338         {LCM_SEND(4), {0xE5, 0x0F, 0x00, 0x51}},\r
339         {LCM_SEND(4), {0xE6, 0x00, 0x00, 0x02}},\r
340         {LCM_SEND(4), {0xE6, 0x01, 0x00, 0x6C}},\r
341         {LCM_SEND(4), {0xE6, 0x02, 0x00, 0x02}},\r
342         {LCM_SEND(4), {0xE6, 0x03, 0x00, 0x8D}},\r
343         {LCM_SEND(4), {0xE6, 0x04, 0x00, 0x02}},\r
344         {LCM_SEND(4), {0xE6, 0x05, 0x00, 0xA5}},\r
345         {LCM_SEND(4), {0xE6, 0x06, 0x00, 0x02}},\r
346         {LCM_SEND(4), {0xE6, 0x07, 0x00, 0xC9}},\r
347         {LCM_SEND(4), {0xE6, 0x08, 0x00, 0x02}},\r
348         {LCM_SEND(4), {0xE6, 0x09, 0x00, 0xEA}},\r
349         {LCM_SEND(4), {0xE6, 0x0A, 0x00, 0x03}},\r
350         {LCM_SEND(4), {0xE6, 0x0B, 0x00, 0x19}},\r
351         {LCM_SEND(4), {0xE6, 0x0C, 0x00, 0x03}},\r
352         {LCM_SEND(4), {0xE6, 0x0D, 0x00, 0x45}},\r
353         {LCM_SEND(4), {0xE6, 0x0E, 0x00, 0x03}},\r
354         {LCM_SEND(4), {0xE6, 0x0F, 0x00, 0x7A}},\r
355         {LCM_SEND(4), {0xE7, 0x00, 0x00, 0x03}},\r
356         {LCM_SEND(4), {0xE7, 0x01, 0x00, 0xA0}},\r
357         {LCM_SEND(4), {0xE7, 0x02, 0x00, 0x03}},\r
358         {LCM_SEND(4), {0xE7, 0x03, 0x00, 0xF4}},\r
359         {LCM_SEND(4), {0xE8, 0x00, 0x00, 0x00}},\r
360         {LCM_SEND(4), {0xE8, 0x01, 0x00, 0x32}},\r
361         {LCM_SEND(4), {0xE8, 0x02, 0x00, 0x00}},\r
362         {LCM_SEND(4), {0xE8, 0x03, 0x00, 0x41}},\r
363         {LCM_SEND(4), {0xE8, 0x04, 0x00, 0x00}},\r
364         {LCM_SEND(4), {0xE8, 0x05, 0x00, 0x54}},\r
365         {LCM_SEND(4), {0xE8, 0x06, 0x00, 0x00}},\r
366         {LCM_SEND(4), {0xE8, 0x07, 0x00, 0x67}},\r
367         {LCM_SEND(4), {0xE8, 0x08, 0x00, 0x00}},\r
368         {LCM_SEND(4), {0xE8, 0x09, 0x00, 0x7A}},\r
369         {LCM_SEND(4), {0xE8, 0x0A, 0x00, 0x00}},\r
370         {LCM_SEND(4), {0xE8, 0x0B, 0x00, 0x98}},\r
371         {LCM_SEND(4), {0xE8, 0x0C, 0x00, 0x00}},\r
372         {LCM_SEND(4), {0xE8, 0x0D, 0x00, 0xB0}},\r
373         {LCM_SEND(4), {0xE8, 0x0E, 0x00, 0x00}},\r
374         {LCM_SEND(4), {0xE8, 0x0F, 0x00, 0xDB}},\r
375         {LCM_SEND(4), {0xE9, 0x00, 0x00, 0x01}},\r
376         {LCM_SEND(4), {0xE9, 0x01, 0x00, 0x01}},\r
377         {LCM_SEND(4), {0xE9, 0x02, 0x00, 0x01}},\r
378         {LCM_SEND(4), {0xE9, 0x03, 0x00, 0x3F}},\r
379         {LCM_SEND(4), {0xE9, 0x04, 0x00, 0x01}},\r
380         {LCM_SEND(4), {0xE9, 0x05, 0x00, 0x70}},\r
381         {LCM_SEND(4), {0xE9, 0x06, 0x00, 0x01}},\r
382         {LCM_SEND(4), {0xE9, 0x07, 0x00, 0xB4}},\r
383         {LCM_SEND(4), {0xE9, 0x08, 0x00, 0x01}},\r
384         {LCM_SEND(4), {0xE9, 0x09, 0x00, 0xEC}},\r
385         {LCM_SEND(4), {0xE9, 0x0A, 0x00, 0x01}},\r
386         {LCM_SEND(4), {0xE9, 0x0B, 0x00, 0xED}},\r
387         {LCM_SEND(4), {0xE9, 0x0C, 0x00, 0x02}},\r
388         {LCM_SEND(4), {0xE9, 0x0D, 0x00, 0x1E}},\r
389         {LCM_SEND(4), {0xE9, 0x0E, 0x00, 0x02}},\r
390         {LCM_SEND(4), {0xE9, 0x0F, 0x00, 0x51}},\r
391         {LCM_SEND(4), {0xEA, 0x00, 0x00, 0x02}},\r
392         {LCM_SEND(4), {0xEA, 0x01, 0x00, 0x6C}},\r
393         {LCM_SEND(4), {0xEA, 0x02, 0x00, 0x02}},\r
394         {LCM_SEND(4), {0xEA, 0x03, 0x00, 0x8D}},\r
395         {LCM_SEND(4), {0xEA, 0x04, 0x00, 0x02}},\r
396         {LCM_SEND(4), {0xEA, 0x05, 0x00, 0xA5}},\r
397         {LCM_SEND(4), {0xEA, 0x06, 0x00, 0x02}},\r
398         {LCM_SEND(4), {0xEA, 0x07, 0x00, 0xC9}},\r
399         {LCM_SEND(4), {0xEA, 0x08, 0x00, 0x02}},\r
400         {LCM_SEND(4), {0xEA, 0x09, 0x00, 0xEA}},\r
401         {LCM_SEND(4), {0xEA, 0x0A, 0x00, 0x03}},\r
402         {LCM_SEND(4), {0xEA, 0x0B, 0x00, 0x19}},\r
403         {LCM_SEND(4), {0xEA, 0x0C, 0x00, 0x03}},\r
404         {LCM_SEND(4), {0xEA, 0x0D, 0x00, 0x45}},\r
405         {LCM_SEND(4), {0xEA, 0x0E, 0x00, 0x03}},\r
406         {LCM_SEND(4), {0xEA, 0x0F, 0x00, 0x7A}},\r
407         {LCM_SEND(4), {0xEB, 0x00, 0x00, 0x03}},\r
408         {LCM_SEND(4), {0xEB, 0x01, 0x00, 0xA0}},\r
409         {LCM_SEND(4), {0xEB, 0x02, 0x00, 0x03}},\r
410         {LCM_SEND(4), {0xEB, 0x03, 0x00, 0xF4}},\r
411         {LCM_SEND(4), {0x3A, 0x00, 0x00, 0x07}},\r
412         {LCM_SEND(4), {0x35, 0x00, 0x00, 0x00}},\r
413 \r
414         {LCM_SEND(2), {0x11, 0x00}},\r
415 };\r
416 \r
417 static LCM_Init_Code disp_on =  {LCM_SEND(2), {0x29, 0x00}};\r
418 \r
419 #if 0\r
420 LCD_ERR_E Set_NT35516_I2C_Read(uint16 addr, uint32 addr_len, uint16* data, uint32 data_len)\r
421 {\r
422         uint32 rtn=LCD_ERR_NONE;\r
423         uint8 cmd[2]={0x00};\r
424         uint8 value[4]={0x00};\r
425         //uint8 value=0;\r
426 \r
427         cmd[0]=(uint8)((addr>>0x08)&0xff);\r
428         cmd[1]=(uint8)(addr&0xff);\r
429         \r
430         rtn=I2C_WriteCmdArr(NT35516_I2C_ADDR, cmd, addr_len, NT35516_I2C_ACK);\r
431         rtn=I2C_ReadCmdArr(NT35516_I2C_ADDR, value, data_len,NT35516_I2C_ACK );\r
432 \r
433         *data=(value[0]<<0x08)|value[1];\r
434         // *data = value;\r
435         return rtn;\r
436 }\r
437 #endif\r
438 \r
439 static int32_t nt35516_rgb_i2c_init(struct panel_spec *self)\r
440 {\r
441         unsigned int i;\r
442         unsigned int tag;\r
443         uint16_t data=0x00;\r
444         uint16_t data1=0x00;\r
445         uint16_t data2=0x00;\r
446         LCM_Init_Code *init = init_data;\r
447 \r
448         i2c_write_8bits_t i2c_write_8bits = self->info.rgb->bus_info.i2c->ops->i2c_write_8bits; \r
449         i2c_read_8bits_t i2c_read_8bits = self->info.rgb->bus_info.i2c->ops->i2c_read_8bits; \r
450         i2c_write_16bits_t i2c_write_16bits = self->info.rgb->bus_info.i2c->ops->i2c_write_16bits; \r
451         i2c_read_16bits_t i2c_read_16bits = self->info.rgb->bus_info.i2c->ops->i2c_read_16bits; \r
452         i2c_write_burst_t i2c_write_burst = self->info.rgb->bus_info.i2c->ops->i2c_write_burst; \r
453 \r
454         printf("nt35516_rgb_i2c_init\n");\r
455 \r
456 \r
457         //    Set_NT35516_I2C_Read(LCDI2C_ID_ADDR, 2, &data, 2);\r
458         i2c_read_16bits(NT35516_I2C_ADDR, 0xda00, FALSE, &data, FALSE);\r
459         i2c_read_16bits(NT35516_I2C_ADDR, 0xdb00, FALSE, &data1, FALSE);\r
460         i2c_read_16bits(NT35516_I2C_ADDR, 0xdc00, FALSE, &data2, FALSE);\r
461 \r
462         for (i = 0 ; i < ARRAY_SIZE(init_data); i++ ) {\r
463                 tag = (init->tag >> 24);\r
464                 if (tag & LCM_TAG_SEND) {\r
465                         Set_NT35516_I2C_Send( (init->tag & LCM_TAG_MASK) , init->data);\r
466                         printf("send one i2c data!\n");\r
467                 } else if (tag & LCM_TAG_SLEEP) {\r
468                         udelay((init->tag & LCM_TAG_MASK)*1000);\r
469                         printf("delay!\n");\r
470                 }\r
471                 init++;\r
472         } \r
473         udelay(200);    \r
474         // while(1)\r
475         //      {\r
476         printf("send disp_on!\n");\r
477         Set_NT35516_I2C_Send( (disp_on.tag & LCM_TAG_MASK) , disp_on.data);\r
478         //      }\r
479 \r
480         //I2C_ReadCmd(0xDB00,pCmd,NT35516_I2C_ACK);\r
481         //Set_NT35516_I2C_Read(0xdb00, 2, &data, 2);\r
482         printf("nt35516_rgb_i2c_init finish\n");\r
483 \r
484         return 0;\r
485 }\r
486 \r
487 static uint32_t nt35516_rgb_i2c_readid(struct panel_spec *self)\r
488 {\r
489         /*Jessica TODO: need read id*/\r
490         return 0x16;\r
491 }\r
492 \r
493 #if 0\r
494 void NT35516_RGB_I2C_set_display_window(\r
495     uint16 left,     // start Horizon address\r
496     uint16 right,     // end Horizon address\r
497     uint16 top,         // start Vertical address\r
498     uint16 bottom    // end Vertical address\r
499     )\r
500 {\r
501     unsigned char data[4];\r
502         data[0] = 0x2A; \r
503         data[1] = 0x00; data[2] = (left>>8);\r
504         Set_NT35516_I2C_Send(3, data);\r
505         \r
506         data[1] = 0x01; data[2] = (left&0xff);\r
507         Set_NT35516_I2C_Send(3, data);\r
508         \r
509         data[1] = 0x02; data[2] = (right>>8);\r
510         Set_NT35516_I2C_Send(3, data);\r
511 \r
512         data[1] = 0x03; data[2] = (right&0xff);\r
513         Set_NT35516_I2C_Send(3, data);\r
514 \r
515         data[0] = 0x2B; \r
516 \r
517         data[1] = 0x00; data[2] = (top>>8);\r
518         Set_NT35516_I2C_Send(3, data);\r
519         \r
520         data[1] = 0x01; data[2] = (top&0xff);\r
521         Set_NT35516_I2C_Send(3, data);\r
522         \r
523         data[1] = 0x02; data[2] = (bottom>>8);\r
524         Set_NT35516_I2C_Send(3, data);\r
525 \r
526         data[1] = 0x03; data[2] = (bottom&0xff);\r
527         Set_NT35516_I2C_Send(3, data);\r
528 \r
529 }\r
530 \r
531 LCD_ERR_E NT35516_RGB_I2C_EnterSleep(BOOLEAN is_sleep)\r
532 {\r
533     unsigned char data[4];\r
534     if(is_sleep==1)\r
535     {\r
536                 data[0] = 0x28;data[1] = 0x00; \r
537                 Set_NT35516_I2C_Send(2, data);\r
538         LCD_Delay(200);\r
539 \r
540                 data[0] = 0x10;data[1] = 0x00; \r
541                 Set_NT35516_I2C_Send(2, data);\r
542         LCD_Delay(200);\r
543         //Lcd_EnvidOnOff(0);//RGB TIMENG OFF\r
544         //LCD_Delay(200);\r
545     }\r
546     else\r
547     {\r
548         //Lcd_EnvidOnOff(1);//RGB TIMENG ON \r
549         //LCD_Delay(200);\r
550         //LCDinit_TFT();\r
551         //LCD_Delay(200);\r
552 \r
553     }\r
554 \r
555     return 0;\r
556 }\r
557 \r
558 LCD_ERR_E NT35516_RGB_I2C_SetDisplayWindow(\r
559     uint16 left,         //left of the window\r
560     uint16 top,            //top of the window\r
561     uint16 right,        //right of the window\r
562     uint16 bottom        //bottom of the window\r
563     )\r
564 {\r
565     unsigned char data[4];\r
566     //NT35516_RGB_I2C_set_display_window(left, right, top, bottom);\r
567         data[0] = 0x2C; data[1] = 0x00; \r
568         Set_NT35516_I2C_Send(2, data);\r
569     return TRUE;\r
570 }\r
571 #endif\r
572 \r
573 \r
574 \r
575 static struct panel_operations lcd_nt35516_rgb_i2c_operations = {\r
576         .panel_init = nt35516_rgb_i2c_init,\r
577         .panel_readid = nt35516_rgb_i2c_readid,\r
578 };\r
579 \r
580 static struct timing_rgb lcd_nt35516_rgb_timing = {\r
581         .hfp = 16,  /* unit: pixel */\r
582         .hbp = 16,\r
583         .hsync = 1,\r
584         .vfp = 16, /*unit: line*/\r
585         .vbp = 16,\r
586         .vsync = 1,\r
587 };\r
588 \r
589 static struct i2c_info lcd_nt35516_rgb_i2c_info = {\r
590         .i2c_addr = NT35516_I2C_ADDR,\r
591         .ops = NULL,\r
592 };\r
593 \r
594 static struct info_rgb lcd_nt35516_rgb_info = {\r
595         .cmd_bus_mode  = SPRDFB_RGB_BUS_TYPE_I2C,\r
596         .video_bus_width = 24, /*18,16*/\r
597         .h_sync_pol = SPRDFB_POLARITY_NEG, //SPRDFB_POLARITY_POS,\r
598         .v_sync_pol = SPRDFB_POLARITY_NEG, //SPRDFB_POLARITY_POS,\r
599         .de_pol = SPRDFB_POLARITY_POS,\r
600         .timing = &lcd_nt35516_rgb_timing,\r
601         .bus_info = {\r
602                 .i2c = &lcd_nt35516_rgb_i2c_info,\r
603         }\r
604 };\r
605 \r
606 struct panel_spec lcd_nt35516_rgb_i2c_spec = {\r
607         .width = 540,\r
608         .height = 960,\r
609         .type = LCD_MODE_RGB,\r
610         .direction = LCD_DIRECT_NORMAL,\r
611         .info = {\r
612                 .rgb = &lcd_nt35516_rgb_info\r
613         },\r
614         .ops = &lcd_nt35516_rgb_i2c_operations,\r
615 };\r