2 #include <linux/delay.h>
3 #include "../../rk2818_fb.h"
5 #include <mach/iomux.h>
10 #define OUT_TYPE SCREEN_RGB
11 #define OUT_FACE OUT_P666 /*OUT_P888*/
12 #define OUT_CLK 12 //***27
17 #define H_VD 320 //***800
22 #define V_VD 480 //***480
30 int standby(u8 enable);
31 void set_lcd_info(struct rk28fb_screen *screen);
33 static void screen_set_iomux(u8 enable)
38 rk2818_mux_api_set(GPIOH6_IQ_SEL_NAME, 0);
39 ret = gpio_request(RK2818_PIN_PH6, NULL);
42 gpio_free(RK2818_PIN_PH6);
43 printk(">>>>>> lcd cs gpio_request err \n ");
47 rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 1);
49 ret = gpio_request(RK2818_PIN_PE5, NULL);
52 gpio_free(RK2818_PIN_PE5);
53 printk(">>>>>> lcd clk gpio_request err \n ");
57 ret = gpio_request(RK2818_PIN_PE4, NULL);
60 gpio_free(RK2818_PIN_PE4);
61 printk(">>>>>> lcd txd gpio_request err \n ");
67 gpio_free(RK2818_PIN_PH6);
68 // rk2818_mux_api_set(CXGPIO_HSADC_SEL_NAME, 1);
70 gpio_free(RK2818_PIN_PE5);
71 gpio_free(RK2818_PIN_PE4);
72 rk2818_mux_api_set(GPIOE_I2C0_SEL_NAME, 0);
79 void set_lcd_info(struct rk28fb_screen *screen)
81 printk("lcd_hx8357 set_lcd_info \n");
82 /* screen type & face */
83 screen->type = OUT_TYPE;
84 screen->face = OUT_FACE;
91 screen->pixclock = OUT_CLK;
92 screen->left_margin = H_BP; /*>2*/
93 screen->right_margin = H_FP; /*>2*/
94 screen->hsync_len = H_PW; /*>2*/ //***all > 326, 4<PW+BP<15,
95 screen->upper_margin = V_BP; /*>2*/
96 screen->lower_margin = V_FP; /*>2*/
97 screen->vsync_len = V_PW; /*>6*/
100 screen->pin_hsync = 0;
101 screen->pin_vsync = 0;
103 screen->pin_dclk = DCLK_POL;
106 screen->swap_rb = SWAP_RB;
109 screen->swap_delta = 0;
110 screen->swap_dumy = 0;
112 /* Operation function*/
114 screen->standby = standby;
117 void spi_screenreg_set(u32 Addr, u32 Data)
119 #define CS_OUT() gpio_direction_output(RK2818_PIN_PH6, GPIO_OUT)
120 #define CS_SET() gpio_set_value(RK2818_PIN_PH6, GPIO_HIGH)
121 #define CS_CLR() gpio_set_value(RK2818_PIN_PH6, GPIO_LOW)
122 #define CLK_OUT() gpio_direction_output(RK2818_PIN_PE5, GPIO_OUT) //I2C0_SCL
123 #define CLK_SET() gpio_set_value(RK2818_PIN_PE5, GPIO_HIGH)
124 #define CLK_CLR() gpio_set_value(RK2818_PIN_PE5, GPIO_LOW)
125 #define TXD_OUT() gpio_direction_output(RK2818_PIN_PE4, GPIO_OUT) //I2C0_SDA
126 #define TXD_SET() gpio_set_value(RK2818_PIN_PE4, GPIO_HIGH)
127 #define TXD_CLR() gpio_set_value(RK2818_PIN_PE4, GPIO_LOW)
129 #define DRVDelayUs(i) udelay(i*2)
147 control_bit = 0x70<<8;
148 Addr = (control_bit | Addr);
149 //printk("addr is 0x%x \n", Addr);
150 for(i = 0; i < 16; i++) //reg
152 if(Addr &(1<<(15-i)))
188 control_bit = 0x72<<8;
189 Data = (control_bit | Data);
190 //printk("data is 0x%x \n", Data);
191 for(i = 0; i < 16; i++) //data
193 if(Data &(1<<(15-i)))
217 printk("lcd_hx8357 init \n");
220 #if 0 //***Õâ¾ä´úÂëÊDz»ÊÇд´íÁË
221 spi_screenreg_set(0x02, 0x07);
222 spi_screenreg_set(0x03, 0x5f);
223 spi_screenreg_set(0x04, 0x17);
224 spi_screenreg_set(0x05, 0x20);
225 spi_screenreg_set(0x06, 0x08);
226 spi_screenreg_set(0x07, 0x20);
227 spi_screenreg_set(0x08, 0x20);
228 spi_screenreg_set(0x09, 0x20);
229 spi_screenreg_set(0x0a, 0x20);
230 spi_screenreg_set(0x0b, 0x22);
231 spi_screenreg_set(0x0c, 0x22);
232 spi_screenreg_set(0x0d, 0x22);
233 spi_screenreg_set(0x0e, 0x10);
234 spi_screenreg_set(0x0f, 0x10);
235 spi_screenreg_set(0x10, 0x10);
237 spi_screenreg_set(0x11, 0x15);
238 spi_screenreg_set(0x12, 0xAA);
239 spi_screenreg_set(0x13, 0xFF);
240 spi_screenreg_set(0x14, 0xb0);
241 spi_screenreg_set(0x15, 0x8e);
242 spi_screenreg_set(0x16, 0xd6);
243 spi_screenreg_set(0x17, 0xfe);
244 spi_screenreg_set(0x18, 0x28);
245 spi_screenreg_set(0x19, 0x52);
246 spi_screenreg_set(0x1A, 0x7c);
248 spi_screenreg_set(0x1B, 0xe9);
249 spi_screenreg_set(0x1C, 0x42);
250 spi_screenreg_set(0x1D, 0x88);
251 spi_screenreg_set(0x1E, 0xb8);
252 spi_screenreg_set(0x1F, 0xFF);
253 spi_screenreg_set(0x20, 0xF0);
254 spi_screenreg_set(0x21, 0xF0);
255 spi_screenreg_set(0x22, 0x09);
257 spi_screenreg_set(0xff, 0x00);
258 spi_screenreg_set(0x16, 0x08);
259 spi_screenreg_set(0x01, 0x02);
260 spi_screenreg_set(0xe2, 0x00);
261 spi_screenreg_set(0xe3, 0x00);
262 spi_screenreg_set(0xf2, 0x00);
263 spi_screenreg_set(0xe4, 0x1c);
264 spi_screenreg_set(0xe5, 0x1c);
265 spi_screenreg_set(0xe6, 0x00);
266 spi_screenreg_set(0xe7, 0x1c);
268 spi_screenreg_set(0x19, 0x01);
270 spi_screenreg_set(0x2a, 0x00);
271 spi_screenreg_set(0x2b, 0x13);
272 spi_screenreg_set(0x2f, 0x01);
273 spi_screenreg_set(0x02, 0x00);
274 spi_screenreg_set(0x03, 0x00);
275 spi_screenreg_set(0x04, 0x01);
276 spi_screenreg_set(0x05, 0x3f);
277 spi_screenreg_set(0x06, 0x00);
278 spi_screenreg_set(0x07, 0x00);
280 spi_screenreg_set(0x08, 0x01);
281 spi_screenreg_set(0x09, 0xdf);
282 spi_screenreg_set(0x24, 0x91);
283 spi_screenreg_set(0x25, 0x8a);
284 spi_screenreg_set(0x29, 0x01);
285 spi_screenreg_set(0x18, 0x22);
286 spi_screenreg_set(0x1b, 0x30);
288 spi_screenreg_set(0x1d, 0x22);
290 spi_screenreg_set(0x40, 0x00);
291 spi_screenreg_set(0x41, 0x3c);
292 spi_screenreg_set(0x42, 0x38);
293 spi_screenreg_set(0x43, 0x34);
294 spi_screenreg_set(0x44, 0x2e);
295 spi_screenreg_set(0x45, 0x2f);
296 spi_screenreg_set(0x46, 0x41);
297 spi_screenreg_set(0x47, 0x7d);
298 spi_screenreg_set(0x48, 0x0b);
299 spi_screenreg_set(0x49, 0x05);
300 spi_screenreg_set(0x4a, 0x06);
301 spi_screenreg_set(0x4b, 0x12);
302 spi_screenreg_set(0x4c, 0x16);
303 spi_screenreg_set(0x50, 0x10);
304 spi_screenreg_set(0x51, 0x11);
305 spi_screenreg_set(0x52, 0x0b);
306 spi_screenreg_set(0x53, 0x07);
307 spi_screenreg_set(0x54, 0x03);
308 spi_screenreg_set(0x55, 0x3f);
309 spi_screenreg_set(0x56, 0x02);
310 spi_screenreg_set(0x57, 0x3e);
311 spi_screenreg_set(0x58, 0x09);
312 spi_screenreg_set(0x59, 0x0d);
313 spi_screenreg_set(0x5a, 0x19);
314 spi_screenreg_set(0x5b, 0x1a);
315 spi_screenreg_set(0x5c, 0x14);
316 spi_screenreg_set(0x5d, 0xc0);
317 spi_screenreg_set(0x1a, 0x05);
320 spi_screenreg_set(0x1c, 0x03);
322 spi_screenreg_set(0x1f, 0x90);
324 spi_screenreg_set(0x1f, 0xd2);
326 spi_screenreg_set(0x28, 0x04);
328 spi_screenreg_set(0x28, 0x38);
330 spi_screenreg_set(0x28, 0x3c);
332 spi_screenreg_set(0x80, 0x00);
333 spi_screenreg_set(0x81, 0x00);
334 spi_screenreg_set(0x82, 0x00);
335 spi_screenreg_set(0x83, 0x00);
337 spi_screenreg_set(0x60, 0x08);
338 spi_screenreg_set(0x31, 0x02);
339 spi_screenreg_set(0x32, 0x08 /*0x00*/);
340 spi_screenreg_set(0x17, 0x60); //***RGB666
341 spi_screenreg_set(0x2d, 0x1f);
342 spi_screenreg_set(0xe8, 0x90);
349 int standby(u8 enable) //***enable =1 means suspend, 0 means resume
354 printk("---------screen suspend--------------\n");
356 spi_screenreg_set(0x03, 0xde);
358 spi_screenreg_set(0x1f, 0x91);
359 spi_screenreg_set(0x19, 0x00);
362 printk("---------screen resume--------------\n ");
364 spi_screenreg_set(0x03, 0x5f);
366 spi_screenreg_set(0x19, 0x01);
367 spi_screenreg_set(0x1f, 0x90);
369 spi_screenreg_set(0x1f, 0xd2);