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