blob: 6b2c93fa5ea95a3a39e04c38a304eabcb810f504 [file] [log] [blame]
/*
* 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;
}