6.mtk 带升压ic的insell屏点亮

原理:insell屏因需要至少+-5v的电压输入才能正常显示,所以在硬件上加了正负压ic,在r1342出贴0R电阻,只需操作VP_EN即可,L1303处电感调试是发现贴小了,也会影响正负5v出不来,如下为lcm源码,可供参考,dws的部分也需配置

6.mtk 带升压ic的insell屏点亮



#ifdef BUILD_LK
#include "platform/mt_gpio.h"
#else
    #include <linux/string.h>
    #if defined(BUILD_UBOOT)
        #include <asm/arch/mt_gpio.h>
    #else
        //#include <mach/mt_gpio.h>
    #endif
#endif
#ifndef BUILD_LK //#ifdef CONFIG_OF
#include <linux/of.h>
#include <linux/of_irq.h>
#include <linux/of_platform.h>
#endif
#include "lcm_drv.h"


// ---------------------------------------------------------------------------
//  Local Constants
// ---------------------------------------------------------------------------


#define FRAME_WIDTH                     (720)
#define FRAME_HEIGHT                    (1440)




#define LCM_SCL0_GPIO (GPIO50 | 0x80000000)
#define LCM_SDA0_GPIO (GPIO49 | 0x80000000)
#define LCM_TP_INT_GPIO (GPIO62 | 0x80000000)


#ifndef TRUE
    #define TRUE 1
#endif


#ifndef FALSE
    #define FALSE 0
#endif


// ---------------------------------------------------------------------------
//  Local Variables
// ---------------------------------------------------------------------------
#define REGFLAG_DELAY             (0XFFFE)
#define REGFLAG_END_OF_TABLE       (0xFff0)


#define LCM_FT8006M_ID (0x38)


static LCM_UTIL_FUNCS lcm_util = {0};


#define SET_RESET_PIN(v)    (lcm_util.set_reset_pin((v)))


#define UDELAY(n) (lcm_util.udelay(n))
#define MDELAY(n) (lcm_util.mdelay(n))


#ifndef BUILD_LK
extern int sysfile_gesture_enable;
int esd_test = 0;
#endif
// ---------------------------------------------------------------------------
//  Local Functions
// ---------------------------------------------------------------------------
#define dsi_set_cmdq_V2(cmd, count, ppara, force_update)        lcm_util.dsi_set_cmdq_V2(cmd, count, ppara, force_update)
#define dsi_set_cmdq(pdata, queue_size, force_update) lcm_util.dsi_set_cmdq(pdata, queue_size, force_update)
#define wrtie_cmd(cmd) lcm_util.dsi_write_cmd(cmd)
#define write_regs(addr, pdata, byte_nums) lcm_util.dsi_write_regs(addr, pdata, byte_nums)
#define read_reg(cmd) lcm_util.dsi_dcs_read_lcm_reg(cmd)
#define read_reg_v2(cmd, buffer, buffer_size)   lcm_util.dsi_dcs_read_lcm_reg_v2(cmd, buffer, buffer_size)   


 struct LCM_setting_table {
    unsigned cmd;
    unsigned char count;
    unsigned char para_list[64];
};


#define   LCM_DSI_CMD_MODE 0


static struct LCM_setting_table lcm_initialization_setting[] = {
////AU5.99 FT8006
{REGFLAG_DELAY, 40, {}},
{0x11,1,{0x00}},
{REGFLAG_DELAY, 150, {}},
////auo5.46/2.3+rm68200 
//Stop reload


        {0x50,1,{0x5A}},
 
//INT CANCEL
        {0x54,1,{0x03}},
 
//VCOM
        {0x50,2,{0x5A,0x03}},
        {0x80,1,{0xD2}},//c7 Ca C3 D0-ok


//Blank 8
        {0x50,2,{0x5A,0x08}},
        {0x80,2,{0xAF,0x00}},
//Blank 9
        {0x50,2,{0x5A,0x09}},
        {0x80,16,{0x5A,0x51,0xB5,0x2A,0x6C,0xC5,0x4A,0x01,0x40,0xE1,0x0E,0x82,0x20,0x08,0x30,0x4B}},
        {0x90,16,{0x00,0x00,0x42,0x0A,0xE3,0x55,0x9B,0xF0,0xAE,0xC3,0x66,0x20,0x19,0xA1,0x26,0x00}},
        {0xA0,6,{0xA1,0x80,0x08,0x20,0x06,0x00}},
//Blank 10
        {0x50,2,{0x5A,0x0A}},
        {0x80,16,{0x73,0xE7,0x02,0x17,0x35,0x40,0x50,0x64,0x73,0x73,0xA1,0x8E,0xC0,0x7E,0x4D,0x84}},
        {0x90,16,{0x58,0x51,0x46,0x35,0x1A,0x10,0x23,0x0D,0x35,0x40,0x50,0x64,0x73,0x73,0xA1,0x8E}},
        {0xA0,12,{0xC0,0x7E,0x4D,0x84,0x58,0x51,0x46,0x35,0x1A,0x10,0x07,0x00}},
//Blank 11
        {0x50,2,{0x5A,0x0B}},
        {0x80,16,{0x00,0x00,0x20,0x44,0x08,0x00,0x60,0x47,0x00,0x00,0x10,0x22,0x04,0x00,0xB0,0x23}},
        {0x90,2,{0x15,0x00}},
//Blank 12
        {0x50,2,{0x5A,0x0C}},
        {0x80,16,{0xFA,0x68,0x68,0x01,0x2D,0x6E,0x10,0x04,0x00,0x60,0x15,0x00,0x50,0x15,0x56,0x51}},
        {0x90,16,{0x15,0x55,0x61,0x15,0x00,0x60,0x15,0x00,0x50,0x15,0x56,0x51,0x15,0x55,0x61,0x95}},
        {0xA0,16,{0xAB,0x18,0x80,0x00,0x80,0x00,0x80,0x00,0x80,0x4C,0x29,0x84,0x52,0x01,0x09,0x00}},
//Blank 13
        {0x50,2,{0x5A,0x0D}},
        {0x80,14,{0xF0,0xB1,0x71,0x6F,0x48,0xC0,0x80,0x1A,0x00,0x00,0x00,0x00,0x00,0x00}},
//Blank 14
        {0x50,2,{0x5A,0x0E}},
        {0x80,12,{0xFF,0x81,0x68,0xEC,0xB6,0x6D,0x1B,0x00,0x00,0x00,0x00,0x00}},
//Blank 15
        {0x50,2,{0x5A,0x0F}},
        {0x80,16,{0x49,0x0D,0x44,0x20,0x1C,0x58,0x64,0x10,0x51,0x21,0xC8,0x50,0x01,0x32,0x8C,0x8C}},
        {0x90,7,{0xFC,0xFF,0xFF,0xFF,0xFF,0x7F,0x14}},
//Blank 16
        {0x50,2,{0x5A,0x10}},
        {0x80,16,{0x00,0xE0,0x03,0xC7,0x1F,0x17,0x20,0x48,0x00,0x52,0xCD,0x18,0x69,0x90,0x12,0xC4}},
        {0x90,15,{0x54,0x8B,0xAB,0xC5,0x9A,0x7B,0x50,0x55,0x55,0x55,0x55,0x55,0x35,0x10,0x00}},
//Blank 17
        {0x50,2,{0x5A,0x11}},
        {0x80,16,{0x48,0x77,0x03,0x40,0xCA,0xF3,0xFF,0xE3,0x00,0x08,0xC4,0x06,0xA1,0xD8,0x24,0x18}},
        {0x90,16,{0x30,0xC6,0x66,0xC1,0x80,0x71,0x15,0xCB,0xE5,0xD2,0x68,0x6C,0x36,0x1D,0x04,0xC8}},
        {0xA0,16,{0xB0,0xD9,0x88,0x60,0xB0,0x81,0x40,0x1A,0x1B,0x48,0x63,0x03,0xB9,0x00,0x24,0x80}},
        {0xB0,16,{0x50,0x30,0x00,0xE0,0xE1,0x01,0x00,0x28,0x0E,0x06,0xC3,0x5D,0xD5,0xDD,0xDD,0xDD}},
        {0xC0,16,{0x9D,0x88,0x88,0x88,0x88,0x88,0xC8,0x08,0x84,0xC6,0xE3,0x81,0x00,0x20,0x00,0x21}},
        {0xD0,16,{0x42,0x88,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x29,0x04,0x41,0x06,0x00,0x00,0x00}},
        {0xE0,16,{0x00,0x92,0x24,0x49,0x92,0x04,0x00,0x00,0x00,0x00,0x92,0x04,0x00,0x85,0x11,0x0C}},
        {0xF0,9,{0x00,0x00,0x40,0x00,0x00,0x00,0x00,0x5E,0x00}},
//Blank 18
        {0x50,2,{0x5A,0x12}},
        {0x80,16,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
        {0x90,9,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
//Blank 19
        {0x50,2,{0x5A,0x13}},
        {0x80,16,{0x01,0x00,0x00,0x0C,0x00,0x00,0x00,0x00,0x01,0x14,0x01,0x1C,0x44,0x0C,0xCE,0xE7}},
        {0x90,3,{0x62,0x0E,0x00}},
//Blank 20
        {0x50,2,{0x5A,0x14}},
        {0x80,16,{0x51,0x01,0x00,0xB8,0xE8,0xEF,0xF7,0xFB,0xFD,0x7E,0x01,0x00,0x00,0x68,0xC5,0x84}},
        {0x90,16,{0x07,0x2F,0x20,0x16,0x3C,0x78,0x01,0x33,0xE0,0xC1,0x0B,0x98,0x02,0x0F,0x5E,0xC0}},
        {0xA0,16,{0x0D,0xFC,0x7E,0x11,0x2E,0xE0,0xF7,0x1B,0x00,0x18,0x01,0x00,0x00,0x00,0x00,0x00}},
        {0xB0,16,{0x00,0x00,0x00,0x00,0x00,0x00,0x10,0x00,0x00,0x04,0x2D,0xD0,0x2A,0x00,0x40,0xA1}},
        {0xC0,16,{0x50,0x78,0x03,0x86,0xBF,0x80,0x31,0x00,0xAF,0xC0,0xF0,0x17,0x30,0x06,0xE0,0x35}},
        {0xD0,16,{0x18,0xFE,0x02,0xC6,0x00,0xBC,0x0A,0xC3,0x5F,0xC0,0x18,0x80,0x77,0xE1,0xB6,0x10}},
        {0xE0,16,{0x00,0x00,0xF8,0x1E,0xDC,0x16,0x02,0x00,0x00,0xDF,0x81,0xDB,0x42,0x00,0x00,0xE0}},
        {0xF0,16,{0x0B,0x70,0x5B,0x08,0x00,0x00,0x1C,0x00,0xBF,0x5F,0x18,0x00,0x00,0x00,0x00,0x00}},
//Blank 21
        {0x50,2,{0x5A,0x15}},
        {0x80,16,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x04,0xC0,0xE0,0xF7}},
        {0x90,16,{0x23,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
        {0xA0,16,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
        {0xB0,16,{0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x13,0x00,0xF0,0x00,0x14,0x8E,0xA3,0x2C}},
        {0xC0,16,{0x84,0x51,0x1C,0x00,0x20,0x08,0x41,0x30,0x0C,0x48,0xE2,0x38,0x8E,0xE3,0xB8,0x29}},
        {0xD0,16,{0x5A,0x9E,0xA4,0x39,0x8E,0x61,0x28,0x8A,0x20,0xB8,0x2A,0x8E,0xE3,0x38,0x8E,0xAB}},
        {0xE0,16,{0xAE,0xA4,0x59,0x9E,0x20,0x28,0x8A,0x61,0x38,0x8E,0x68,0xE2,0x38,0x8E,0xE3,0x38}},
        {0xF0,16,{0x09,0x52,0x1C,0x84,0x31,0x0C,0x41,0x20,0x08,0x00,0xB0,0x28,0x8E,0xE3,0x38,0x42}},
//Blank 22
        {0x50,2,{0x5A,0x16}},
        {0x80,16,{0x41,0x01,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
        {0x90,6,{0x00,0x00,0x00,0x00,0xD0,0x40}},
//Blank 24
        {0x50,2,{0x5A,0x18}},
        {0x80,16,{0xEF,0xBD,0xF7,0xDE,0x7B,0xEF,0xBD,0x07,0x08,0x08,0x0A,0x0C,0x0C,0x0C,0x0C,0x0C}},
        {0x90,16,{0x0C,0x0C,0x0C,0x5C,0x09,0xA8,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0xAA,0x5A}},
        {0xA0,16,{0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x59,0x09,0x04,0xFF,0x05,0x80}},
        {0xB0,14,{0x80,0x00,0x04,0x20,0x00,0x01,0x08,0x40,0x00,0x02,0x10,0x80,0x00,0x04,0x0F}},
//Blank 25
        {0x50,2,{0x5A,0x19}},
        {0x80,16,{0xF0,0xD9,0xC8,0xBA,0xAF,0xA6,0x9E,0x98,0x92,0x8D,0x88,0x84,0x00,0xF0,0x6F,0xF6}},
        {0x90,16,{0xCF,0xFC,0x6F,0xF6,0xFE,0xFC,0x0A,0xFF,0xAF,0xB5,0x71,0x0E,0x6C,0x4A,0x69,0x08}},
        {0xA0,7,{0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
//Blank 26
        {0x50,2,{0x5A,0x1A}},
        {0x80,16,{0x00,0x04,0x08,0x0C,0x00,0x10,0x14,0x18,0x1C,0x00,0x20,0x28,0x30,0x38,0x00,0x40}},
        {0x90,16,{0x48,0x50,0x58,0x00,0x60,0x68,0x70,0x78,0x00,0x80,0x88,0x90,0x98,0x00,0xA0,0xA8}},
        {0xA0,16,{0xB0,0xB8,0x00,0xC0,0xC8,0xD0,0xD8,0x00,0xE0,0xE8,0xF0,0xF8,0x00,0xFC,0xFE,0xFF}},
        {0xB0,16,{0x00,0x00,0x04,0x08,0x0C,0x00,0x10,0x14,0x18,0x1C,0x00,0x20,0x28,0x30,0x38,0x00}},
        {0xC0,16,{0x40,0x48,0x50,0x58,0x00,0x60,0x68,0x70,0x78,0x00,0x80,0x88,0x90,0x98,0x00,0xA0}},
        {0xD0,16,{0xA8,0xB0,0xB8,0x00,0xC0,0xC8,0xD0,0xD8,0x00,0xE0,0xE8,0xF0,0xF8,0x00,0xFC,0xFE}},
        {0xE0,16,{0xFF,0x00,0x00,0x04,0x08,0x0C,0x00,0x10,0x14,0x18,0x1C,0x00,0x20,0x28,0x30,0x38}},
        {0xF0,16,{0x00,0x40,0x48,0x50,0x58,0x00,0x60,0x68,0x70,0x78,0x00,0x80,0x88,0x90,0x98,0x00}},
//Blank 27
        {0x50,2,{0x5A,0x1B}},
        {0x80,16,{0xA0,0xA8,0xB0,0xB8,0x00,0xC0,0xC8,0xD0,0xD8,0x00,0xE0,0xE8,0xF0,0xF8,0x00,0xFC}},
        {0x90,4,{0xFE,0xFF,0x00,0x00}},
//Blank 32
        {0x50,2,{0x5A,0x20}},
        {0x80,7,{0x8B,0x00,0x00,0x00,0x00,0x00,0x00}},
//Blank 34
        {0x50,2,{0x5A,0x22}},
        {0x80,13,{0x2D,0xD3,0x00,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x55,0x1F,0x00}},
//Blank 35
        {0x50,2,{0x5A,0x23}},
        {0x80,16,{0x01,0x05,0x00,0x05,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00}},
        {0x90,9,{0xFF,0x0F,0x00,0x00,0x24,0x00,0x00,0x00,0x00}},
//Blank 36
        {0x50,2,{0x5A,0x24}},
        {0x80,16,{0x00,0x03,0x00,0x9D,0xBF,0x10,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x78,0x86}},
//SPI not FINISH
        {0x90,1,{0x5A}},
//SPI FINISH
        {0x90,1,{0xA5}},
//Blank select 2F 
        {0x50,2,{0x5A,0x2F}},


{0x09,1,{0x00}},
 
//{0x02,1,{0x5a}},


{0x29,1,{0x00}},


{REGFLAG_DELAY, 50, {}},


{REGFLAG_END_OF_TABLE, 0x00, {}}
};


#ifndef BUILD_LK //#ifdef CONFIG_OF
struct platform_device *lcm_ldo_dev;
struct pinctrl *lcm_ldo_pinctrl;
struct device_node *lcm_ldo_node;
struct pinctrl_state *pinctrl_lcm_1_8v_en_low;
struct pinctrl_state *pinctrl_lcm_1_8v_en_high;
struct pinctrl_state *pinctrl_lcm_2_5v_en_low;
struct pinctrl_state *pinctrl_lcm_2_5v_en_high;
struct pinctrl_state *pinctrl_lcm_3_3v_en_low;
struct pinctrl_state *pinctrl_lcm_3_3v_en_high;




void nlcm_ldo_get_gpio_pinctrl(void)
{
int ret = 0;

lcm_ldo_node = of_find_compatible_node(NULL, NULL, "mediatek,mtkfb1");
if (lcm_ldo_node == NULL) {
pr_err("LCM_LDO- get LCM_LDO node failed\n");
}

lcm_ldo_dev = of_find_device_by_node(lcm_ldo_node);
if(lcm_ldo_dev == NULL) 
return ;

lcm_ldo_pinctrl = devm_pinctrl_get(&lcm_ldo_dev->dev);
if (IS_ERR(lcm_ldo_pinctrl)) {
dev_err(&lcm_ldo_dev->dev, "Cannot find usb lcm_ldo_pinctrl!\n");
}

pr_debug("****%s:%d nlcm_ldo_get_gpio_pinctrl !!!!!\n", __func__, __LINE__);

pinctrl_lcm_1_8v_en_low = pinctrl_lookup_state(lcm_ldo_pinctrl, "lcm_1_8v_en_out0_gpio");
if (IS_ERR(pinctrl_lcm_1_8v_en_low)) {
ret = PTR_ERR(pinctrl_lcm_1_8v_en_low);
printk("Cannot find  lcm_1_8v_en_out0_gpio\n");
}

pinctrl_lcm_1_8v_en_high = pinctrl_lookup_state(lcm_ldo_pinctrl, "lcm_1_8v_en_out1_gpio");
if (IS_ERR(pinctrl_lcm_1_8v_en_high)) {
ret = PTR_ERR(pinctrl_lcm_1_8v_en_high);
printk("Cannot find  lcm_1_8v_en_out1_gpio\n");
}

pinctrl_lcm_2_5v_en_low = pinctrl_lookup_state(lcm_ldo_pinctrl, "lcm_2_5v_en_out0_gpio");
if (IS_ERR(pinctrl_lcm_2_5v_en_low)) {
ret = PTR_ERR(pinctrl_lcm_2_5v_en_low);
printk("Cannot find  lcm_2_5v_en_out0_gpio\n");
}

pinctrl_lcm_2_5v_en_high = pinctrl_lookup_state(lcm_ldo_pinctrl, "lcm_2_5v_en_out1_gpio");
if (IS_ERR(pinctrl_lcm_2_5v_en_high)) {
ret = PTR_ERR(pinctrl_lcm_2_5v_en_high);
printk("Cannot find  lcm_2_5v_en_out1_gpio\n");
}

pinctrl_lcm_3_3v_en_low = pinctrl_lookup_state(lcm_ldo_pinctrl, "lcm_3_3v_en_out0_gpio");
if (IS_ERR(pinctrl_lcm_3_3v_en_low)) {
ret = PTR_ERR(pinctrl_lcm_3_3v_en_low);
printk("Cannot find  lcm_3_3v_en_out0_gpio\n");
}

pinctrl_lcm_3_3v_en_high = pinctrl_lookup_state(lcm_ldo_pinctrl, "lcm_3_3v_en_out1_gpio");
if (IS_ERR(pinctrl_lcm_3_3v_en_high)) {
ret = PTR_ERR(pinctrl_lcm_3_3v_en_high);
printk("Cannot find  lcm_3_3v_en_out1_gpio\n");
}

pr_debug("****%s:%d end Init Drive NLEDS KS!!!!!\n", __func__, __LINE__);
}




int mt_lcm_ldo_set_gpio( unsigned int  level)
{
nlcm_ldo_get_gpio_pinctrl();

if (level == 0)
{
pinctrl_select_state(lcm_ldo_pinctrl, pinctrl_lcm_1_8v_en_low);
}
else 
{
pinctrl_select_state(lcm_ldo_pinctrl, pinctrl_lcm_1_8v_en_high);
}
return 0;
}
#endif


static void lcd_power_en(unsigned char enabled)
{
    if (enabled)
    {
#ifdef BUILD_LK
MDELAY(10);  
mt_set_gpio_mode(GPIO_LCM_BL_EN, GPIO_MODE_00);
mt_set_gpio_dir(GPIO_LCM_BL_EN, GPIO_DIR_OUT);
mt_set_gpio_out(GPIO_LCM_BL_EN, GPIO_OUT_ONE);
#else
mt_lcm_ldo_set_gpio(1);
#endif
    }
    else
    {
#ifdef BUILD_LK
     mt_set_gpio_mode(GPIO_LCM_BL_EN, GPIO_MODE_00);
     mt_set_gpio_dir(GPIO_LCM_BL_EN, GPIO_DIR_OUT);
     mt_set_gpio_out(GPIO_LCM_BL_EN, GPIO_OUT_ZERO);
#else
mt_lcm_ldo_set_gpio(0);
#endif
    }
}


// ---------------------------------------------------------------------------
//  LCM Driver Implementations
// ---------------------------------------------------------------------------
static void lcm_set_util_funcs(const LCM_UTIL_FUNCS *util)
{
    memcpy(&lcm_util, util, sizeof(LCM_UTIL_FUNCS));
}




static void lcm_get_params(LCM_PARAMS *params)
{
memset(params, 0, sizeof(LCM_PARAMS));


params->type   = LCM_TYPE_DSI;


params->width  = FRAME_WIDTH;
params->height = FRAME_HEIGHT;


// enable tearing-free
params->dbi.te_mode = LCM_DBI_TE_MODE_VSYNC_ONLY;
params->dbi.te_edge_polarity = LCM_POLARITY_RISING;
        #if (LCM_DSI_CMD_MODE)
params->dsi.mode   = CMD_MODE;
    params->dsi.switch_mode = SYNC_PULSE_VDO_MODE;
        #else
params->dsi.mode   = SYNC_PULSE_VDO_MODE;//SYNC_EVENT_VDO_MODE;//BURST_VDO_MODE;////
        #endif

// DSI
/* Command mode setting */
//1 Three lane or Four lane
params->dsi.LANE_NUM = LCM_FOUR_LANE;
//The following defined the fomat for data coming from LCD engine.
params->dsi.data_format.color_order = LCM_COLOR_ORDER_RGB;
params->dsi.data_format.trans_seq   = LCM_DSI_TRANS_SEQ_MSB_FIRST;
params->dsi.data_format.padding     = LCM_DSI_PADDING_ON_LSB;
params->dsi.data_format.format      = LCM_DSI_FORMAT_RGB888;


params->dsi.PS=LCM_PACKED_PS_24BIT_RGB888;

#if (LCM_DSI_CMD_MODE)
params->dsi.intermediat_buffer_num = 0;//because DSI/DPI HW design change, this parameters should be 0 when video mode in MT658X; or memory leakage
params->dsi.word_count=FRAME_WIDTH*3; //DSI CMD mode need set these two bellow params, different to 6577
#else
params->dsi.intermediat_buffer_num = 0; //because DSI/DPI HW design change, this parameters should be 0 when video mode in MT658X; or memory leakage
#endif


// Video mode setting
params->dsi.packet_size=256;


    params->dsi.vertical_sync_active                =  8;


    params->dsi.vertical_backporch                    = 37;//16 25 30 35 12 8


    params->dsi.vertical_frontporch                    = 190;


    params->dsi.vertical_active_line                = FRAME_HEIGHT; 


params->dsi.horizontal_sync_active = 14;
params->dsi.horizontal_backporch = 36;//32
params->dsi.horizontal_frontporch = 45;//78
params->dsi.horizontal_active_pixel = FRAME_WIDTH;
/* params->dsi.ssc_disable                                                       = 1; */


params->dsi.PLL_CLOCK = 265;


params->dsi.cont_clock = 1;
params->dsi.clk_lp_per_line_enable = 1;
params->dsi.ssc_disable = 1;
/*params->dsi.esd_check_enable = 1;
params->dsi.customization_esd_check_enable = 1;
params->dsi.lcm_esd_check_table[0].cmd   = 0x0a;
params->dsi.lcm_esd_check_table[0].count   = 1;
params->dsi.lcm_esd_check_table[0].para_list[0] = 0x9c;*/


}


static void push_table(struct LCM_setting_table *table, unsigned int count, unsigned char force_update)
{
unsigned int i;


    for(i = 0; i < count; i++) {

        unsigned cmd;
        cmd = table[i].cmd;

        switch (cmd) {

            case REGFLAG_DELAY :
                MDELAY(table[i].count);
                break;

            default:
dsi_set_cmdq_V2(cmd, table[i].count, table[i].para_list, force_update);
        }
    }

}


static void lcm_init(void)
{
#if 1
lcd_power_en(1);
MDELAY(100);
SET_RESET_PIN(1);
MDELAY(10);
SET_RESET_PIN(0);
MDELAY(10);
SET_RESET_PIN(1);  
MDELAY(200);
#endif
push_table(lcm_initialization_setting, sizeof(lcm_initialization_setting) / sizeof(struct LCM_setting_table), 1);
}


static void lcm_suspend(void)
{
unsigned int array[5];


array[0] = 0x00280500;
dsi_set_cmdq(array, 1, 1);
MDELAY(100);
  array[0] = 0x00100500;// read id return two byte,version and id
dsi_set_cmdq(array, 1, 1);
MDELAY(120);


array[0] = (0x00022902);
array[1] = (0x00005A04);
dsi_set_cmdq(array, 2, 1);
    MDELAY(10);
array[0] = (0x00022902);
array[1] = (0x00005A05);
dsi_set_cmdq(array, 2, 1);
    MDELAY(10);


lcd_power_en(0);
}


static void lcm_resume(void)
{
lcm_init();
}




static unsigned int lcm_compare_id(void)
{
unsigned int array[4];
char buffer[5];
char id_high=0;
int id2=0;


lcd_power_en(1);
SET_RESET_PIN(1);
MDELAY(5);
SET_RESET_PIN(0);
MDELAY(20);
SET_RESET_PIN(1);
MDELAY(120);
 
array[0] = 0x00013700;


dsi_set_cmdq(array, 1, 1);
read_reg_v2(0x04, buffer, 1);


id_high = buffer[0];
/*
 read_reg_v2(0xdf, buffer, 1);
 id_low = buffer[0];
 id1 = (id_high<<8) | id_low;
*/
#if defined(BUILD_LK)
printf("ft8006m %s id_high = 0x%04x, id2 = 0x%04x\n", __func__, id_high,id2);
#else
printk("ft8006m %s id_high = 0x%04x, id2 = 0x%04x\n", __func__, id_high,id2);
#endif
 
return (LCM_FT8006M_ID == id_high)?1:0;
}


#if 0
static unsigned int lcm_esd_check(void)
{
#ifndef BUILD_LK
char  buffer[3];
int   array[4];


array[0]=0x00DE0500;
dsi_set_cmdq(array, 1, 1);


array[0]=0x32B41500; 
dsi_set_cmdq(array, 1, 1);


array[0]=0x00DF0500;
dsi_set_cmdq(array, 1, 1);


array[0] = 0x00013700;// read id return two byte,version and id
dsi_set_cmdq(array, 1, 1);


read_reg_v2(0x0a, buffer, 1);
esd_test++;
if(buffer[0]==0x9c)
{ printk("%s, buffer[0] = 0x%08x\n", __func__, buffer[0]);
  if((esd_test%15) == 0) return TRUE; //every 30S ESD fail a time
return FALSE;
}
else
{ printk("%s, buffer[0] = 0x%08x\n", __func__, buffer[0]);  
return TRUE;
}
#endif
}


static unsigned int lcm_esd_recover(void)
{
lcd_power_en(0);
MDELAY(2000);
lcm_init();
return TRUE;
}
#endif


LCM_DRIVER ft8006m_dsi_vdo_common_lcm_drv = 
{
    .name = "ft8006m_dsi_vdo_common",
.set_util_funcs = lcm_set_util_funcs,
.get_params     = lcm_get_params,
.init           = lcm_init,
.suspend        = lcm_suspend,
.resume         = lcm_resume,
.compare_id    = lcm_compare_id,
//.esd_check = lcm_esd_check,
//.esd_recover = lcm_esd_recover,
    #if (LCM_DSI_CMD_MODE)
    //.update         = lcm_update,
    #endif
};