1 /*
2 * drivers/video/fbdev/sunxi/disp2/disp/lcd/ili9341/ili9341.c
3 *
4 * Copyright (c) 2007-2018 Allwinnertech Co., Ltd.
5 * Author: zhengxiaobin <zhengxiaobin@allwinnertech.com>
6 *
7 * This software is licensed under the terms of the GNU General Public
8 * License version 2, as published by the Free Software Foundation, and
9 * may be copied, distributed, and modified under those terms.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15
16 [lcd0]
17 lcd_used = 1
18
19 lcd_driver_name = "ili9341"
20 lcd_x = 240
21 lcd_y = 320
22 lcd_width = 108
23 lcd_height = 64
24 lcd_dclk_freq = 60
25
26 lcd_pwm_used = 0
27 lcd_pwm_ch = 0
28 lcd_pwm_freq = 50000
29 lcd_pwm_pol = 1
30 lcd_pwm_max_limit = 255
31
32 lcd_hbp = 20
33 ;10 + 20 + 10 + 240*3 = 760 real set 1000
34 lcd_ht = 1000
35 lcd_hspw = 10
36 lcd_vbp = 5
37 lcd_vt = 340
38 lcd_vspw = 2
39
40 lcd_frm = 0
41 lcd_if = 0
42 lcd_hv_if = 8
43 lcd_hv_clk_phase = 0
44 lcd_hv_sync_polarity = 0
45 lcd_hv_srgb_seq = 0
46
47 lcd_io_phase = 0x0000
48 lcd_gamma_en = 0
49 lcd_bright_curve_en = 1
50 lcd_cmap_en = 0
51
52
53 lcd_rb_swap = 0
54
55 deu_mode = 0
56 lcdgamma4iep = 22
57 smart_color = 90
58
59 lcd_bl_en = port:PB07<1><0><default><1>
60 lcd_power = "axp233_dc1sw"
61
62 ;reset
63 lcd_gpio_0 = port:PB06<1><0><default><1>
64 ;cs
65 lcd_gpio_1 = port:PD22<1><0><default><0>
66 ;sda
67 lcd_gpio_2 = port:PH08<1><0><default><0>
68 ;sck
69 lcd_gpio_3 = port:PH07<1><0><default><0>
70
71
72 lcdd3 = port:PD01<2><0><2><default>
73 lcdd4 = port:PD02<2><0><2><default>
74 lcdd5 = port:PD03<2><0><2><default>
75 lcdd6 = port:PD04<2><0><2><default>
76 lcdd7 = port:PD05<2><0><2><default>
77 lcdd10 = port:PD06<2><0><2><default>
78 lcdd11 = port:PD07<2><0><2><default>
79 lcdd12 = port:PD08<2><0><2><default>
80
81 lcdclk = port:PD18<2><0><3><default>
82 lcdde = port:PD19<2><0><3><default>
83 lcdhsync = port:PD20<2><0><3><default>
84 lcdvsync = port:PD21<2><0><3><default>
85 [lcd0_suspend]
86 lcdd3 = port:PD01<7><0><2><default>
87 lcdd4 = port:PD02<7><0><2><default>
88 lcdd5 = port:PD03<7><0><2><default>
89 lcdd6 = port:PD04<7><0><2><default>
90 lcdd7 = port:PD05<7><0><2><default>
91 lcdd10 = port:PD06<7><0><2><default>
92 lcdd11 = port:PD07<7><0><2><default>
93 lcdd12 = port:PD08<7><0><2><default>
94
95 lcdclk = port:PD18<7><0><3><default>
96 lcdde = port:PD19<7><0><3><default>
97 lcdhsync = port:PD20<7><0><3><default>
98 lcdvsync = port:PD21<7><0><3><default>
99 *
100 */
101 #include "ili9341.h"
102
103 #define CPU_TRI_MODE
104
105 #define ili9341c_spi_scl_1 sunxi_lcd_gpio_set_value(0, 3, 1)
106 #define ili9341c_spi_scl_0 sunxi_lcd_gpio_set_value(0, 3, 0)
107 #define ili9341c_spi_sdi_1 sunxi_lcd_gpio_set_value(0, 2, 1)
108 #define ili9341c_spi_sdi_0 sunxi_lcd_gpio_set_value(0, 2, 0)
109 #define ili9341c_spi_cs_1 sunxi_lcd_gpio_set_value(0, 1, 1)
110 #define ili9341c_spi_cs_0 sunxi_lcd_gpio_set_value(0, 1, 0)
111
112 #define ili9341c_spi_reset_1 sunxi_lcd_gpio_set_value(0, 0, 1)
113 #define ili9341c_spi_reset_0 sunxi_lcd_gpio_set_value(0, 0, 0)
114
115 static void lcd_panel_ili9341_init(struct disp_panel_para *info);
116
117 static void LCD_power_on(u32 sel);
118 static void LCD_power_off(u32 sel);
119 static void LCD_bl_open(u32 sel);
120 static void LCD_bl_close(u32 sel);
121
122 static void LCD_panel_init(u32 sel);
123 static void LCD_panel_exit(u32 sel);
124
125 extern s32 tcon0_cpu_set_tri_mode(u32 sel);
126
write_tcon_register(int offset,int value)127 void write_tcon_register(int offset, int value)
128 {
129 volatile int *tcon_reg = (int *)(0xf1c0c000 + offset);
130 int reg = 0;
131
132 reg = *((volatile int *)tcon_reg);
133 reg |= value;
134 *((volatile int *)tcon_reg) = reg;
135 }
136
lcd_cfg_panel_info(struct panel_extend_para * info)137 static void lcd_cfg_panel_info(struct panel_extend_para *info)
138 {
139 u32 i = 0, j = 0;
140 u32 items;
141 u8 lcd_gamma_tbl[][2] = {
142 //{input value, corrected value}
143 {0, 0}, {15, 15}, {30, 30}, {45, 45}, {60, 60},
144 {75, 75}, {90, 90}, {105, 105}, {120, 120}, {135, 135},
145 {150, 150}, {165, 165}, {180, 180}, {195, 195}, {210, 210},
146 {225, 225}, {240, 240}, {255, 255},
147 };
148
149 u32 lcd_cmap_tbl[2][3][4] = {
150 {
151 {LCD_CMAP_G0, LCD_CMAP_B1, LCD_CMAP_G2, LCD_CMAP_B3},
152 {LCD_CMAP_B0, LCD_CMAP_R1, LCD_CMAP_B2, LCD_CMAP_R3},
153 {LCD_CMAP_R0, LCD_CMAP_G1, LCD_CMAP_R2, LCD_CMAP_G3},
154 },
155 {
156 {LCD_CMAP_B3, LCD_CMAP_G2, LCD_CMAP_B1, LCD_CMAP_G0},
157 {LCD_CMAP_R3, LCD_CMAP_B2, LCD_CMAP_R1, LCD_CMAP_B0},
158 {LCD_CMAP_G3, LCD_CMAP_R2, LCD_CMAP_G1, LCD_CMAP_R0},
159 },
160 };
161
162 items = sizeof(lcd_gamma_tbl) / 2;
163 for (i = 0; i < items - 1; i++) {
164 u32 num = lcd_gamma_tbl[i + 1][0] - lcd_gamma_tbl[i][0];
165
166 for (j = 0; j < num; j++) {
167 u32 value = 0;
168
169 value =
170 lcd_gamma_tbl[i][1] +
171 ((lcd_gamma_tbl[i + 1][1] - lcd_gamma_tbl[i][1]) *
172 j) /
173 num;
174 info->lcd_gamma_tbl[lcd_gamma_tbl[i][0] + j] =
175 (value << 16) + (value << 8) + value;
176 }
177 }
178 info->lcd_gamma_tbl[255] = (lcd_gamma_tbl[items - 1][1] << 16) +
179 (lcd_gamma_tbl[items - 1][1] << 8) +
180 lcd_gamma_tbl[items - 1][1];
181 memcpy(info->lcd_cmap_tbl, lcd_cmap_tbl, sizeof(lcd_cmap_tbl));
182 }
183
lcd_open_flow(u32 sel)184 static s32 lcd_open_flow(u32 sel)
185 {
186 LCD_OPEN_FUNC(sel, LCD_power_on, 40);
187 #ifdef CPU_TRI_MODE
188 LCD_OPEN_FUNC(sel, LCD_panel_init, 50);
189 LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 50);
190 #else
191 LCD_OPEN_FUNC(sel, sunxi_lcd_tcon_enable, 50);
192 LCD_OPEN_FUNC(sel, LCD_panel_init, 50);
193 #endif
194 LCD_OPEN_FUNC(sel, LCD_bl_open, 0);
195
196 return 0;
197 }
198
lcd_close_flow(u32 sel)199 static s32 lcd_close_flow(u32 sel)
200 {
201 LCD_CLOSE_FUNC(sel, LCD_bl_close, 50);
202 #ifdef CPU_TRI_MODE
203 LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 10);
204 LCD_CLOSE_FUNC(sel, LCD_panel_exit, 10);
205 #else
206 LCD_CLOSE_FUNC(sel, LCD_panel_exit, 10);
207 LCD_CLOSE_FUNC(sel, sunxi_lcd_tcon_disable, 10);
208 #endif
209 LCD_CLOSE_FUNC(sel, LCD_power_off, 10);
210
211 return 0;
212 }
213
LCD_power_on(u32 sel)214 static void LCD_power_on(u32 sel)
215 {
216 /*config lcd_power pin to open lcd power0*/
217 sunxi_lcd_power_enable(sel, 0);
218 /*pwr_en, active low*/
219 sunxi_lcd_gpio_set_value(sel, 3, 0);
220 sunxi_lcd_pin_cfg(sel, 1);
221 }
222
LCD_power_off(u32 sel)223 static void LCD_power_off(u32 sel)
224 {
225 sunxi_lcd_pin_cfg(sel, 0);
226 /*pwr_en, active low*/
227 sunxi_lcd_gpio_set_value(sel, 3, 1);
228 /*config lcd_power pin to close lcd power0*/
229 sunxi_lcd_power_disable(sel, 0);
230 }
231
LCD_bl_open(u32 sel)232 static void LCD_bl_open(u32 sel)
233 {
234 sunxi_lcd_pwm_enable(sel);
235 /*config lcd_bl_en pin to open lcd backlight*/
236 sunxi_lcd_backlight_enable(sel);
237 }
238
LCD_bl_close(u32 sel)239 static void LCD_bl_close(u32 sel)
240 {
241 /*config lcd_bl_en pin to close lcd backlight*/
242 sunxi_lcd_backlight_disable(sel);
243 sunxi_lcd_pwm_disable(sel);
244 }
245
LCD_WRITE_DATA(u32 value)246 static void LCD_WRITE_DATA(u32 value)
247 {
248 u32 i;
249 ili9341c_spi_cs_0;
250 ili9341c_spi_sdi_1;
251 ili9341c_spi_scl_0;
252 sunxi_lcd_delay_us(10);
253 ili9341c_spi_scl_1;
254 for (i = 0; i < 8; i++) {
255 sunxi_lcd_delay_us(10);
256 if (value & 0x80)
257 ili9341c_spi_sdi_1;
258 else
259 ili9341c_spi_sdi_0;
260 value <<= 1;
261 sunxi_lcd_delay_us(10);
262 ili9341c_spi_scl_0;
263 ili9341c_spi_scl_1;
264 }
265 sunxi_lcd_delay_us(10);
266 ili9341c_spi_cs_1;
267 }
268
LCD_WRITE_COMMAND(u32 value)269 static void LCD_WRITE_COMMAND(u32 value)
270 {
271 u32 i;
272 ili9341c_spi_cs_0;
273 ili9341c_spi_sdi_0;
274 ili9341c_spi_scl_0;
275 sunxi_lcd_delay_us(10);
276 ili9341c_spi_scl_1;
277 for (i = 0; i < 8; i++) {
278 sunxi_lcd_delay_us(10);
279 if (value & 0x80)
280 ili9341c_spi_sdi_1;
281 else
282 ili9341c_spi_sdi_0;
283 ili9341c_spi_scl_0;
284 sunxi_lcd_delay_us(10);
285 ili9341c_spi_scl_1;
286 value <<= 1;
287 }
288 sunxi_lcd_delay_us(10);
289 ili9341c_spi_cs_1;
290 }
291
LCD_panel_init(u32 sel)292 static void LCD_panel_init(u32 sel)
293 {
294 struct disp_panel_para *info =
295 kmalloc(sizeof(struct disp_panel_para), GFP_KERNEL | __GFP_ZERO);
296
297 bsp_disp_get_panel_info(sel, info);
298 lcd_panel_ili9341_init(info);
299 disp_sys_free(info);
300 return;
301 }
302
LCD_panel_exit(u32 sel)303 static void LCD_panel_exit(u32 sel)
304 {
305 struct disp_panel_para *info =
306 kmalloc(sizeof(struct disp_panel_para), GFP_KERNEL | __GFP_ZERO);
307
308 LCD_WRITE_COMMAND(0x28);
309 LCD_WRITE_COMMAND(0x10);
310 sunxi_lcd_delay_ms(300);
311 bsp_disp_get_panel_info(sel, info);
312 disp_sys_free(info);
313 return;
314 }
315
lcd_panel_ili9341_init(struct disp_panel_para * info)316 static void lcd_panel_ili9341_init(struct disp_panel_para *info)
317 {
318 //************* Start Initial Sequence **********//
319 //************* Reset LCD Driver ****************//
320 ili9341c_spi_reset_1;
321 sunxi_lcd_delay_ms(1);
322 ili9341c_spi_reset_0;
323 /*Delay 10ms This delay time is necessary*/
324 sunxi_lcd_delay_ms(10);
325 ili9341c_spi_reset_1;
326 /*Delay 120 ms*/
327 sunxi_lcd_delay_ms(120);
328 /************** Start Initial Sequence ***********/
329 /*Pixel Format Set*/
330 LCD_WRITE_COMMAND(0x3A);
331 LCD_WRITE_DATA(0x55);
332 LCD_WRITE_COMMAND(0xF6);
333 LCD_WRITE_DATA(0x01);
334 LCD_WRITE_DATA(0x33);
335 LCD_WRITE_COMMAND(0xB5);
336 LCD_WRITE_DATA(0x04);
337 LCD_WRITE_DATA(0x04);
338 LCD_WRITE_DATA(0x0A);
339 LCD_WRITE_DATA(0x14);
340 LCD_WRITE_COMMAND(0x35);
341 LCD_WRITE_DATA(0x00);
342 LCD_WRITE_COMMAND(0xCF);
343 LCD_WRITE_DATA(0x00);
344 LCD_WRITE_DATA(0xEA);
345 LCD_WRITE_DATA(0xF0);
346 LCD_WRITE_COMMAND(0xED);
347 LCD_WRITE_DATA(0x64);
348 LCD_WRITE_DATA(0x03);
349 LCD_WRITE_DATA(0x12);
350 LCD_WRITE_DATA(0x81);
351 LCD_WRITE_COMMAND(0xE8);
352 LCD_WRITE_DATA(0x85);
353 LCD_WRITE_DATA(0x00);
354 LCD_WRITE_DATA(0x78);
355 LCD_WRITE_COMMAND(0xCB);
356 LCD_WRITE_DATA(0x39);
357 LCD_WRITE_DATA(0x2C);
358 LCD_WRITE_DATA(0x00);
359 LCD_WRITE_DATA(0x33);
360 LCD_WRITE_DATA(0x06);
361 LCD_WRITE_COMMAND(0xF7);
362 LCD_WRITE_DATA(0x20);
363 LCD_WRITE_COMMAND(0xEA);
364 LCD_WRITE_DATA(0x00);
365 LCD_WRITE_DATA(0x00);
366 /*VRH[5:0]*/
367 LCD_WRITE_COMMAND(0xC0);
368 LCD_WRITE_DATA(0x21);
369 LCD_WRITE_COMMAND(0xC1);
370 LCD_WRITE_DATA(0x10);
371 LCD_WRITE_COMMAND(0xC5);
372 LCD_WRITE_DATA(0x31);
373 LCD_WRITE_DATA(0x3C);
374 LCD_WRITE_COMMAND(0x36);
375 LCD_WRITE_DATA(0x08);
376 LCD_WRITE_COMMAND(0xB0);
377 /*E0,E9£¬D3£¬40*/
378 LCD_WRITE_DATA(0xE9);
379 LCD_WRITE_COMMAND(0xB1);
380 LCD_WRITE_DATA(0x00);
381 LCD_WRITE_DATA(0x13);
382 LCD_WRITE_COMMAND(0xB6);
383 LCD_WRITE_DATA(0x0A);
384 LCD_WRITE_DATA(0xA2);
385 LCD_WRITE_COMMAND(0xF2);
386 LCD_WRITE_DATA(0x02);
387 LCD_WRITE_COMMAND(0xF6);
388 LCD_WRITE_DATA(0x01);
389 LCD_WRITE_DATA(0x30);
390 LCD_WRITE_DATA(0x07);
391 LCD_WRITE_COMMAND(0x26);
392 LCD_WRITE_DATA(0x01);
393 LCD_WRITE_COMMAND(0xE0);
394 LCD_WRITE_DATA(0x0F);
395 LCD_WRITE_DATA(0x30);
396 LCD_WRITE_DATA(0x24);
397 LCD_WRITE_DATA(0x08);
398 LCD_WRITE_DATA(0x07);
399 LCD_WRITE_DATA(0x03);
400 LCD_WRITE_DATA(0x51);
401 LCD_WRITE_DATA(0x50);
402 LCD_WRITE_DATA(0x45);
403 LCD_WRITE_DATA(0x0a);
404 LCD_WRITE_DATA(0x15);
405 LCD_WRITE_DATA(0x04);
406 LCD_WRITE_DATA(0x10);
407 LCD_WRITE_DATA(0x40);
408 LCD_WRITE_DATA(0x00);
409 LCD_WRITE_COMMAND(0xE1);
410 LCD_WRITE_DATA(0x00);
411 LCD_WRITE_DATA(0x15);
412 LCD_WRITE_DATA(0x0a);
413 LCD_WRITE_DATA(0x12);
414 LCD_WRITE_DATA(0x07);
415 LCD_WRITE_DATA(0x13);
416 LCD_WRITE_DATA(0x21);
417 LCD_WRITE_DATA(0x22);
418 LCD_WRITE_DATA(0x38);
419 LCD_WRITE_DATA(0x32);
420 LCD_WRITE_DATA(0x06);
421 LCD_WRITE_DATA(0x03);
422 LCD_WRITE_DATA(0x20);
423 LCD_WRITE_DATA(0x2c);
424 LCD_WRITE_DATA(0x34);
425 LCD_WRITE_COMMAND(0x36);
426 LCD_WRITE_DATA(0x08);
427 LCD_WRITE_COMMAND(0x11);
428 sunxi_lcd_delay_ms(120);
429 LCD_WRITE_COMMAND(0x29);
430 /*Display on*/
431 LCD_WRITE_COMMAND(0x2C);
432 }
433
lcd_reflush(void)434 void lcd_reflush(void)
435 {
436 /************** Start Initial Sequence ***********/
437 /************** Reset LCD Driver *****************/
438 ili9341c_spi_reset_1;
439 sunxi_lcd_delay_ms(1);
440 ili9341c_spi_reset_0;
441 /*Delay 10ms This delay time is necessary*/
442 sunxi_lcd_delay_ms(10);
443 ili9341c_spi_reset_1;
444 /*Delay 120 ms*/
445 sunxi_lcd_delay_ms(120);
446 /************** Start Initial Sequence ***********/
447 /*Pixel Format Set*/
448 LCD_WRITE_COMMAND(0x3A);
449 LCD_WRITE_DATA(0x55);
450 LCD_WRITE_COMMAND(0xF6);
451 LCD_WRITE_DATA(0x01);
452 LCD_WRITE_DATA(0x33);
453 LCD_WRITE_COMMAND(0xB5);
454 LCD_WRITE_DATA(0x04);
455 LCD_WRITE_DATA(0x04);
456 LCD_WRITE_DATA(0x0A);
457 LCD_WRITE_DATA(0x14);
458 LCD_WRITE_COMMAND(0x35);
459 LCD_WRITE_DATA(0x00);
460 LCD_WRITE_COMMAND(0xCF);
461 LCD_WRITE_DATA(0x00);
462 LCD_WRITE_DATA(0xEA);
463 LCD_WRITE_DATA(0xF0);
464 LCD_WRITE_COMMAND(0xED);
465 LCD_WRITE_DATA(0x64);
466 LCD_WRITE_DATA(0x03);
467 LCD_WRITE_DATA(0x12);
468 LCD_WRITE_DATA(0x81);
469 LCD_WRITE_COMMAND(0xE8);
470 LCD_WRITE_DATA(0x85);
471 LCD_WRITE_DATA(0x00);
472 LCD_WRITE_DATA(0x78);
473 LCD_WRITE_COMMAND(0xCB);
474 LCD_WRITE_DATA(0x39);
475 LCD_WRITE_DATA(0x2C);
476 LCD_WRITE_DATA(0x00);
477 LCD_WRITE_DATA(0x33);
478 LCD_WRITE_DATA(0x06);
479 LCD_WRITE_COMMAND(0xF7);
480 LCD_WRITE_DATA(0x20);
481 LCD_WRITE_COMMAND(0xEA);
482 LCD_WRITE_DATA(0x00);
483 LCD_WRITE_DATA(0x00);
484 /*VRH[5:0]*/
485 LCD_WRITE_COMMAND(0xC0);
486 LCD_WRITE_DATA(0x21);
487 LCD_WRITE_COMMAND(0xC1);
488 LCD_WRITE_DATA(0x10);
489 LCD_WRITE_COMMAND(0xC5);
490 LCD_WRITE_DATA(0x4F);
491 LCD_WRITE_DATA(0x38);
492 LCD_WRITE_COMMAND(0x36);
493 LCD_WRITE_DATA(0x08);
494 LCD_WRITE_COMMAND(0xB0);
495 LCD_WRITE_DATA(0xE9);
496 LCD_WRITE_COMMAND(0xB1);
497 LCD_WRITE_DATA(0x00);
498 LCD_WRITE_DATA(0x13);
499 LCD_WRITE_COMMAND(0xB6);
500 LCD_WRITE_DATA(0x0A);
501 LCD_WRITE_DATA(0xA2);
502 LCD_WRITE_COMMAND(0xF2);
503 LCD_WRITE_DATA(0x02);
504 LCD_WRITE_COMMAND(0xF6);
505 LCD_WRITE_DATA(0x01);
506 LCD_WRITE_DATA(0x30);
507 LCD_WRITE_DATA(0x07);
508 LCD_WRITE_COMMAND(0x26);
509 LCD_WRITE_DATA(0x01);
510 LCD_WRITE_COMMAND(0xE0);
511 LCD_WRITE_DATA(0x0F);
512 LCD_WRITE_DATA(0x30);
513 LCD_WRITE_DATA(0x24);
514 LCD_WRITE_DATA(0x08);
515 LCD_WRITE_DATA(0x07);
516 LCD_WRITE_DATA(0x03);
517 LCD_WRITE_DATA(0x51);
518 LCD_WRITE_DATA(0x50);
519 LCD_WRITE_DATA(0x45);
520 LCD_WRITE_DATA(0x0a);
521 LCD_WRITE_DATA(0x15);
522 LCD_WRITE_DATA(0x04);
523 LCD_WRITE_DATA(0x10);
524 LCD_WRITE_DATA(0x40);
525 LCD_WRITE_DATA(0x00);
526 LCD_WRITE_COMMAND(0xE1);
527 LCD_WRITE_DATA(0x00);
528 LCD_WRITE_DATA(0x15);
529 LCD_WRITE_DATA(0x0a);
530 LCD_WRITE_DATA(0x12);
531 LCD_WRITE_DATA(0x07);
532 LCD_WRITE_DATA(0x13);
533 LCD_WRITE_DATA(0x21);
534 LCD_WRITE_DATA(0x22);
535 LCD_WRITE_DATA(0x38);
536 LCD_WRITE_DATA(0x32);
537 LCD_WRITE_DATA(0x06);
538 LCD_WRITE_DATA(0x03);
539 LCD_WRITE_DATA(0x20);
540 LCD_WRITE_DATA(0x2c);
541 LCD_WRITE_DATA(0x34);
542 LCD_WRITE_COMMAND(0x36);
543 LCD_WRITE_DATA(0x08);
544 LCD_WRITE_COMMAND(0x11);
545 sunxi_lcd_delay_ms(120);
546 LCD_WRITE_COMMAND(0x29);
547 /*Display on*/
548 LCD_WRITE_COMMAND(0x2C);
549 }
550
lcd_user_defined_func(u32 sel,u32 para1,u32 para2,u32 para3)551 static s32 lcd_user_defined_func(u32 sel, u32 para1, u32 para2, u32 para3)
552 {
553 return 0;
554 }
555
556 struct __lcd_panel ili9341_panel = {
557 /* panel driver name, must mach the name of lcd_drv_name in sys_config.fex
558 */
559 .name = "ili9341",
560 .func = {
561 .cfg_panel_info = lcd_cfg_panel_info,
562 .cfg_open_flow = lcd_open_flow,
563 .cfg_close_flow = lcd_close_flow,
564 .lcd_user_defined_func = lcd_user_defined_func,
565 },
566 };
567