| /* |
| * drivers/display/lcd/lcd_extern/mipi_P070ACB.c |
| * |
| * This program is free software; you can redistribute it and/or modify |
| * it under the terms of the GNU General Public License as published by |
| * the Free Software Foundation; either version 2 of the named License, |
| * or any later version. |
| * |
| * This program is distributed in the hope that it will be useful, |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| * GNU General Public License for more details. |
| * |
| */ |
| |
| #include <common.h> |
| #include <malloc.h> |
| #include <asm/arch/gpio.h> |
| #ifdef CONFIG_OF_LIBFDT |
| #include <libfdt.h> |
| #endif |
| #include <amlogic/aml_lcd.h> |
| #include <amlogic/aml_lcd_extern.h> |
| #include "lcd_extern.h" |
| |
| #define LCD_EXTERN_INDEX 4 |
| #define LCD_EXTERN_NAME "mipi_P070ACB_FT" |
| #define LCD_EXTERN_TYPE LCD_EXTERN_MIPI |
| |
| //******************** mipi command ********************// |
| //format: data_type, num, data.... |
| //special: data_type=0xff, num<0xff means delay ms, num=0xff means ending. |
| //******************************************************// |
| static unsigned char mipi_init_on_table[] = { |
| 0xff, 100, /* delay */ |
| 0x23,2,0xE0,0x00,//Page 0 |
| 0x23,2,0xE1,0x93,// PASSWORD |
| 0x23,2,0xE2,0x65, |
| 0x23,2,0xE3,0xF8, |
| 0x23,2,0x80,0x03, |
| 0x23,2,0xE0,0x01,//Page 01 |
| 0x23,2,0x0C,0x74,//Set PWRIC |
| 0x23,2,0x17,0x00,//Set Gamma Power |
| 0x23,2,0x18,0xEF,//VGMP=5.1V |
| 0x23,2,0x19,0x00, |
| 0x23,2,0x1A,0x00, |
| 0x23,2,0x1B,0xEF,//VGMN=-5.1V |
| 0x23,2,0x1C,0x00, |
| 0x23,2,0x1F,0x70,//Set Gate Power |
| 0x23,2,0x20,0x2D, |
| 0x23,2,0x21,0x2D, |
| 0x23,2,0x22,0x7E, |
| 0x23,2,0x26,0xF3,//VDDD from IOVCC |
| 0x23,2,0x37,0x09,//SetPanel |
| 0x23,2,0x38,0x04,//SET RGBCYC |
| 0x23,2,0x39,0x00, |
| 0x23,2,0x3A,0x01, |
| 0x23,2,0x3C,0x90, |
| 0x23,2,0x3D,0xFF, |
| 0x23,2,0x3E,0xFF, |
| 0x23,2,0x3F,0xFF, |
| 0x23,2,0x40,0x02,//Set TCON |
| 0x23,2,0x41,0x80, |
| 0x23,2,0x42,0x99, |
| 0x23,2,0x43,0x14, |
| 0x23,2,0x44,0x19, |
| 0x23,2,0x45,0x5A, |
| 0x23,2,0x4B,0x04, |
| 0x23,2,0x55,0x02,//power voltage |
| 0x23,2,0x56,0x01, |
| 0x23,2,0x57,0x69, |
| 0x23,2,0x58,0x0A, |
| 0x23,2,0x59,0x0A, |
| 0x23,2,0x5A,0x2E,//VGH = 16.2V |
| 0x23,2,0x5B,0x19,//VGL = -12V |
| 0x23,2,0x5C,0x15, |
| 0x23,2,0x5D,0x77,//Gamma |
| 0x23,2,0x5E,0x56, |
| 0x23,2,0x5F,0x45, |
| 0x23,2,0x60,0x38, |
| 0x23,2,0x61,0x35, |
| 0x23,2,0x62,0x27, |
| 0x23,2,0x63,0x2D, |
| 0x23,2,0x64,0x18, |
| 0x23,2,0x65,0x33, |
| 0x23,2,0x66,0x34, |
| 0x23,2,0x67,0x35, |
| 0x23,2,0x68,0x56, |
| 0x23,2,0x69,0x45, |
| 0x23,2,0x6A,0x4F, |
| 0x23,2,0x6B,0x42, |
| 0x23,2,0x6C,0x40, |
| 0x23,2,0x6D,0x34, |
| 0x23,2,0x6E,0x25, |
| 0x23,2,0x6F,0x02, |
| 0x23,2,0x70,0x77, |
| 0x23,2,0x71,0x56, |
| 0x23,2,0x72,0x45, |
| 0x23,2,0x73,0x38, |
| 0x23,2,0x74,0x35, |
| 0x23,2,0x75,0x27, |
| 0x23,2,0x76,0x2D, |
| 0x23,2,0x77,0x18, |
| 0x23,2,0x78,0x33, |
| 0x23,2,0x79,0x34, |
| 0x23,2,0x7A,0x35, |
| 0x23,2,0x7B,0x56, |
| 0x23,2,0x7C,0x45, |
| 0x23,2,0x7D,0x4F, |
| 0x23,2,0x7E,0x42, |
| 0x23,2,0x7F,0x40, |
| 0x23,2,0x80,0x34, |
| 0x23,2,0x81,0x25, |
| 0x23,2,0x82,0x02, |
| 0x23,2,0xE0,0x02,//Page2 |
| 0x23,2,0x00,0x53,//GIP_L Pin mapping RESET_EVEN |
| 0x23,2,0x01,0x55,//VSSG_EVEN |
| 0x23,2,0x02,0x55,//VSSA_EVEN |
| 0x23,2,0x03,0x51,//STV2_EVEN |
| 0x23,2,0x04,0x77,//VDD2_EVEN |
| 0x23,2,0x05,0x57,//VDD1_EVEN |
| 0x23,2,0x06,0x1F, |
| 0x23,2,0x07,0x4F, //CK12 |
| 0x23,2,0x08,0x4D, //CK10 |
| 0x23,2,0x09,0x1F, |
| 0x23,2,0x0A,0x4B, //CK8 |
| 0x23,2,0x0B,0x49, //CK6 |
| 0x23,2,0x0C,0x1F, |
| 0x23,2,0x0D,0x47, //CK4 |
| 0x23,2,0x0E,0x45, //CK2 |
| 0x23,2,0x0F,0x41, //STV1_EVEN |
| 0x23,2,0x10,0x1F, |
| 0x23,2,0x11,0x1F, |
| 0x23,2,0x12,0x1F, |
| 0x23,2,0x13,0x55, //VGG |
| 0x23,2,0x14,0x1F, |
| 0x23,2,0x15,0x1F, |
| 0x23,2,0x16,0x52,//GIP_R Pin mapping RESET_ODD |
| 0x23,2,0x17,0x55, //VSSG_ODD |
| 0x23,2,0x18,0x55, //VSSA_ODD |
| 0x23,2,0x19,0x50, //STV2_ODD |
| 0x23,2,0x1A,0x77,//VDD2_ODD |
| 0x23,2,0x1B,0x57,//VDD1_ODD |
| 0x23,2,0x1C,0x1F, |
| 0x23,2,0x1D,0x4E, //CK11 |
| 0x23,2,0x1E,0x4C, //CK9 |
| 0x23,2,0x1F,0x1F, |
| 0x23,2,0x20,0x4A, //CK7 |
| 0x23,2,0x21,0x48, //CK5 |
| 0x23,2,0x22,0x1F, |
| 0x23,2,0x23,0x46, //CK3 |
| 0x23,2,0x24,0x44, //CK1 |
| 0x23,2,0x25,0x40,//STV1_ODD |
| 0x23,2,0x26,0x1F, |
| 0x23,2,0x27,0x1F, |
| 0x23,2,0x28,0x1F, |
| 0x23,2,0x29,0x1F, |
| 0x23,2,0x2A,0x1F, |
| 0x23,2,0x2B,0x55, //VGG |
| 0x23,2,0x2C,0x12,//GIP_L_GS Pin mapping |
| 0x23,2,0x2D,0x15, |
| 0x23,2,0x2E,0x15, |
| 0x23,2,0x2F,0x00, |
| 0x23,2,0x30,0x37, |
| 0x23,2,0x31,0x17, |
| 0x23,2,0x32,0x1F, |
| 0x23,2,0x33,0x08, |
| 0x23,2,0x34,0x0A, |
| 0x23,2,0x35,0x1F, |
| 0x23,2,0x36,0x0C, |
| 0x23,2,0x37,0x0E, |
| 0x23,2,0x38,0x1F, |
| 0x23,2,0x39,0x04, |
| 0x23,2,0x3A,0x06, |
| 0x23,2,0x3B,0x10, |
| 0x23,2,0x3C,0x1F, |
| 0x23,2,0x3D,0x1F, |
| 0x23,2,0x3E,0x1F, |
| 0x23,2,0x3F,0x15, |
| 0x23,2,0x40,0x1F, |
| 0x23,2,0x41,0x1F, |
| 0x23,2,0x42,0x13,//GIP_R_GS Pin mapping |
| 0x23,2,0x43,0x15, |
| 0x23,2,0x44,0x15, |
| 0x23,2,0x45,0x01, |
| 0x23,2,0x46,0x37, |
| 0x23,2,0x47,0x17, |
| 0x23,2,0x48,0x1F, |
| 0x23,2,0x49,0x09, |
| 0x23,2,0x4A,0x0B, |
| 0x23,2,0x4B,0x1F, |
| 0x23,2,0x4C,0x0D, |
| 0x23,2,0x4D,0x0F, |
| 0x23,2,0x4E,0x1F, |
| 0x23,2,0x4F,0x05, |
| 0x23,2,0x50,0x07, |
| 0x23,2,0x51,0x11, |
| 0x23,2,0x52,0x1F, |
| 0x23,2,0x53,0x1F, |
| 0x23,2,0x54,0x1F, |
| 0x23,2,0x55,0x1F, |
| 0x23,2,0x56,0x1F, |
| 0x23,2,0x57,0x15, |
| 0x23,2,0x58,0x40,//GIP Timing |
| 0x23,2,0x59,0x00, |
| 0x23,2,0x5A,0x00, |
| 0x23,2,0x5B,0x10, |
| 0x23,2,0x5C,0x14, |
| 0x23,2,0x5D,0x40, |
| 0x23,2,0x5E,0x01, |
| 0x23,2,0x5F,0x02, |
| 0x23,2,0x60,0x40, |
| 0x23,2,0x61,0x03, |
| 0x23,2,0x62,0x04, |
| 0x23,2,0x63,0x7A, |
| 0x23,2,0x64,0x7A, |
| 0x23,2,0x65,0x74, |
| 0x23,2,0x66,0x16, |
| 0x23,2,0x67,0xB4, |
| 0x23,2,0x68,0x16, |
| 0x23,2,0x69,0x7A, |
| 0x23,2,0x6A,0x7A, |
| 0x23,2,0x6B,0x0C, |
| 0x23,2,0x6C,0x00, |
| 0x23,2,0x6D,0x04, |
| 0x23,2,0x6E,0x04, |
| 0x23,2,0x6F,0x88, |
| 0x23,2,0x70,0x00, |
| 0x23,2,0x71,0x00, |
| 0x23,2,0x72,0x06, |
| 0x23,2,0x73,0x7B, |
| 0x23,2,0x74,0x00, |
| 0x23,2,0x75,0xBC, |
| 0x23,2,0x76,0x00, |
| 0x23,2,0x77,0x04, |
| 0x23,2,0x78,0x2C, |
| 0x23,2,0x79,0x00, |
| 0x23,2,0x7A,0x00, |
| 0x23,2,0x7B,0x00, |
| 0x23,2,0x7C,0x00, |
| 0x23,2,0x7D,0x03, |
| 0x23,2,0x7E,0x7B, |
| 0x23,2,0xE0,0x04,//Page4 |
| 0x23,2,0x09,0x11,//Set RGBCYC2 |
| 0x23,2,0x0E,0x48, |
| 0x23,2,0x2B,0x2B,//ESD Protect |
| 0x23,2,0x2E,0x44, |
| 0x23,2,0xE0,0x00,//Page0 |
| 0x23,2,0xE6,0x02,//Watch dog |
| 0x23,2,0xE7,0x0C, |
| 0x05,1,0x11,//sleep out |
| 0xff,120, |
| 0x05,1,0x29,//display on |
| 0x05,1,0x35, |
| 0xFF, 20, /* delay(ms) */ |
| 0xFF, 0xFF, /* ending flag */ |
| }; |
| |
| static unsigned char mipi_init_off_table[] = { |
| 0XFF, 5, /* delay 5ms */ |
| 0x05, 1, 0x28, /* display off */ |
| 0xFF, 10, /* delay 10ms */ |
| 0x05, 1, 0x10, /* sleep in */ |
| 0xFF, 150, /* delay 150ms */ |
| 0xFF, 0xFF, /* ending flag */ |
| }; |
| |
| static int lcd_extern_driver_update(struct aml_lcd_extern_driver_s *ext_drv) |
| { |
| if (ext_drv == NULL) { |
| EXTERR("%s driver is null\n", LCD_EXTERN_NAME); |
| return -1; |
| } |
| |
| if (ext_drv->config->type == LCD_EXTERN_MAX) { //default for no dt |
| ext_drv->config->index = LCD_EXTERN_INDEX; |
| ext_drv->config->type = LCD_EXTERN_TYPE; |
| strcpy(ext_drv->config->name, LCD_EXTERN_NAME); |
| } |
| ext_drv->config->table_init_on = &mipi_init_on_table[0]; |
| ext_drv->config->table_init_off = &mipi_init_off_table[0]; |
| |
| return 0; |
| } |
| |
| int aml_lcd_extern_mipi_p070acb_ft_get_default_index(void) |
| { |
| return LCD_EXTERN_INDEX; |
| } |
| |
| int aml_lcd_extern_mipi_p070acb_ft_probe(struct aml_lcd_extern_driver_s *ext_drv) |
| { |
| int ret = 0; |
| |
| ret = lcd_extern_driver_update(ext_drv); |
| |
| if (lcd_debug_print_flag) |
| EXTPR("%s: %d\n", __func__, ret); |
| return ret; |
| } |