MTK车载平台实现MIPI转LVDS驱动移植

摘要:
该文档主要是基于MTK提供的BSP基础上针对sn65dsi83 LVDS转MIPI芯片的驱动移植,在移植LCM驱动的时候,需要配置LOGO,本文中将有体现。涉及到修改的文件:
LCM:
device/atc/evb3561sv_w_no2/ProjectConfig.mk
device/atc/evb3561sv_w_no2/system.prop
kernel-3.18/arch/arm64/configs/evb3561sv_w_no2_debug_defconfig
kernel-3.18/arch/arm64/configs/evb3561sv_w_no2_defconfig
kernel-3.18/drivers/misc/mediatek/lcm/cpt_clap070wp03xg_sn65dsi83/cpt_clap070wp03xg_sn65dsi83.c
kernel-3.18/drivers/misc/mediatek/lcm/cpt_clap070wp03xg_sn65dsi83/cpt_clap070wp03xg_sn65dsi83.h
kernel-3.18/drivers/misc/mediatek/lcm/cpt_clap070wp03xg_sn65dsi83/lcm_drv_cpt_clap070wp03xg_sn65dsi83.c
kernel-3.18/drivers/misc/mediatek/mach/mt3561/evb3561sv_w_no2/dct/dct/codegen-atc.dws
vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/cpt_clap070wp03xg_sn65dsi83/cpt_clap070wp03xg_sn65dsi83.c
vendor/mediatek/proprietary/bootable/bootloader/lk/project/evb3561sv_w_no2.mk
vendor/mediatek/proprietary/bootable/bootloader/lk/target/evb3561sv_w_no2/dct/dct/codegen.dws
vendor/mediatek/proprietary/bootable/bootloader/lk/dev/logo/cmcc_1024x600/cmcc_1024x600_uboot.bmp
frameworks/base/core/res/assets/images/android-logo-mask.png
需要准备的资料:
电路原理图
GPIO配置列表
LCD(LVDS屏)屏幕规格书
sn65dsi83芯片应用手册
LCD(MIPI屏)屏幕规格书和MIPI屏SensorIC芯片应用手册
LCD屏的上下电时序、SensorID和Sensor的I2C设备地址

1 电路设计

根据电源原理图,从ARM引出的涉及,sn65dsi83的MIPI IN LEN0-LEN3四组、DVDD、AVDD使能管脚、LCM_RST复位管脚、LCD_TE管脚,根据硬件给出的GPIO列表,对应的管脚如下:

GPIO43

LCD_EN

GPIO47

SDA0

GPIO48

SCL0

GPIO82

AVDD_ON_EN

GPIO83

DVDD_ON_EN

GPIO147

SN65DSI83_INT(DSI_TE)

GPIO150

TDP0

GPIO151

TDN0

GPIO152

TDP1

GPIO153

TDN1

GPIO154

TCP

GPIO155

TCN

GPIO156

TDP2

GPIO157

TDN2

GPIO158

TDP3

GPIO155

TDN3

2 GPIO DCT的配置
根据1中描述,使用dct工具配置GPIO的相应功能,注意其中DSI_TE管脚为LCD中断输入管脚,其它I2C0和MIPI配置对应功能即可,其它管脚为输出GPIO模式。具体请参考LK和内核中的dct配置,涉及的文件如下:
Lk:
vendor\mediatek\proprietary\bootable\bootloader\lk\scripts\dct\DrvGen.exe
vendor/mediatek/proprietary/bootable/bootloader/lk/target/evb3561sv_w_no2/dct/dct/codegen.dws
Kernel:
kernel-3.18\tools\dct\DrvGen.exe
kernel-3.18\drivers\misc\mediatek\mach\mt3561\evb3561sv_w_no2\dct\dct\codegen.dws

3 LK和kernel部分LCM代码架构
   请参考Driver_All_in_One_V1.0_MT6735_6753.pdf文档中的LCM部分,在这里只说明具体的移植过。
4项目全局配置
device\atc\evb3561sv_w_no2\ProjectConfig.mk
因为我们的LCD屏使用1024x600的分辨率,在项目全局部分将屏幕分辨率修改成1024x600
LCM_HEIGHT = 600
LCM_WIDTH = 1024
5 LK部分的配置
添加LK部分的项目配置:
vendor\mediatek\proprietary\bootable\bootloader\lk\project\evb3561sv_w_no2.mk
CUSTOM_LK_LCM="cpt_clap070wp03xg_sn65dsi83"
如果有多个屏兼容,在CUSTOM_LK_LCM=""中添加即可,用空格隔开,如下:
CUSTOM_LK_LCM="cpt_clap070wp03xg_sn65dsi83  xxxx_xxxx_xxx_xxx"

5.1 LK中添加LCD驱动
5.1.1 lk中添加LCD驱动的全局配置
在vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm目录中添加
cpt_clap070wp03xg_sn65dsi83文件夹,如下:
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83
注意:cpt_clap070wp03xg_sn65dsi83文件夹名称必须跟
CUSTOM_LK_LCM="cpt_clap070wp03xg_sn65dsi83"
配置的名称一致,否则将不会生效。
在vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83文件夹中添加相应的驱动文件,如下:
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83\cpt_clap070wp03xg_sn65dsi83.c
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83\Makefile
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83\sn65dsi83_i2c.c
5.1.2 将配置的驱动加入的LCD驱动列表中
将上面添加的驱动添加到上一层驱动文件中
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\mt65xx_lcm_list.c
LCD驱动是通过mt65xx_lcm_list.c回调到LCD具体驱动结构体指针,再由LCD具体驱动结构体指针调用到对应的接口函数的。如果是多屏兼容的时候,mt65xx_lcm_list.c是通过具体驱动的ID号毁调到不同的子功能函数中的,具体请参考
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\mt65xx_lcm_list.c
的注册流程。
将lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83驱动添加到mt65xx_lcm_list.c中需要修改如下:

.........................................................................................................
extern LCM_DRIVER hx8394d_hd720_dsi_vdo_tianma_lcm_drv;
extern LCM_DRIVER cpt_clap070wp03xg_sn65dsi83_lcm_drv;
extern LCM_DRIVER nt35520_hd720_tm_lcm_drv;
...........................................................................................
LCM_DRIVER *lcm_driver_list[] = {
.........................................................
#if defined(CPT_CLAP070WP03XG_SN65DSI83)
    &cpt_clap070wp03xg_sn65dsi83_lcm_drv,
#endif
.............................................................
}

5.1.3 sn65dsi83针对1024x600鑫源屏的具体配置
sn65dsi83是TI的MIPI转LVDS芯片,ti提供相应的工具来设置sn65dsi83芯片的寄存器参数,在使用TI的DSI Tuner 2.0.exe(这个工具在TI网站上可以自己去下载)工具配置之前,首先先看鑫源屏的具体参数,注意我们硬件链接使用DE的Video模式(请参考电路原理图)。鑫源屏参数使用如下参数:

这个表格的理解:
HD+VD(可显示的有效像素)=1024x600
Vbp+vfP+vsync=320
Hbp+hfp+hsync=35
总的分辨率:HP+VP=(Vbp+vfP+vsync)+(VD+HD)=1344x635
如下图:

有该数据列表可知(其后所述均采用标称值),该屏幕分辨率为1024x600,时钟频率为51.2MHz,由此可知像素时钟周期(单位皮秒)为14065。但是其他数据就和结构体里的元素对应不上了,有以上数据手册可以得知,其一行1344个像素点,空白点是320个,即其扫描一行在行首会有320个无效像素点。根据手册又可知,其扫描一场即扫描一屏有35个空白行
即:
right_margin + hsync_len + left_margin = 一行总的空白数,在该款屏幕中这个和的值为320
upper_margin + lower_margin + hsync_len = 一场总空白行,在该款屏幕中,这个和的值为35

那么我们就可以根据这个原理,只要满足上面的要求,原则都是OK的。

5.1.3.1 sn65dsi83 寄存器配置
  sn65dsi83我们使用TI提供的DSI Tuner 2.0.exe工具进行配置,打开DSI Tuner 2.0.exe工具,安装后打开,按照上面的配置信息填入DSI Tuner 2.0.exe工具,如下:

点击箭头执行下一步:

点击上图中圆圈,选择Generate CSR List, 生成如下图:

 点击上图中标注红色按钮,生成CSR.txt文件,将文件保存,然后打开CSR.txt文件,将生成的寄存器数组合并到LCD驱动中,如下:

vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83\cpt_clap070wp03xg_sn65dsi83.c
static sn65dsi8x_setting_table sn65dis83_1024x600_init_table[] = {
        {0x09 , 0x00},
        {0x0A , 0x03},//0x05},
        {0x0B , 0x10},
        {0x0D , 0x00},
        {0x10 , 0x26},//0x26},
        {0x11 , 0x00},
        {0x12 , 0x1f},//0x26},
        {0x13 , 0x00},
        {0x18 , 0x78},
        {0x19 , 0x00},
        {0x1A , 0x03},
        {0x1B , 0x00},
        {0x20 , 0x00},
        {0x21 , 0x04},//0x05},
        {0x22 , 0x00},
        {0x23 , 0x00},
        {0x24 , 0x00},
        {0x25 , 0x00},
        {0x26 , 0x00},
        {0x27 , 0x00},
        {0x28 , 0x21},
        {0x29 , 0x00},
        {0x2A , 0x00},
        {0x2B , 0x00},
        {0x2C , 0x14},//0x28},//0x0a},
        {0x2D , 0x00},
        {0x2E , 0x00},
        {0x2F , 0x00},
        {0x30 , 0x03},//0x08},//0x0a},
        {0x31 , 0x00},
        {0x32 , 0x00},
        {0x33 , 0x00},
        {0x34 , 0xa0},//0x78},//0x14},
        {0x35 , 0x00},
        {0x36 , 0x00},
        {0x37 , 0x00},
        {0x38 , 0x00},
        {0x39 , 0x00},
        {0x3A , 0x00},
        {0x3B , 0x00},
        {0x3C , 0x00},
        {0x3D , 0x00},
        {0x3E , 0x00},
        {0x0D, 0x01},
        {REGFLAG_DELAY, 0x0a},
        {0x09, 0x01},
        {0xFF, 0x00},
};


5.1.3.2 sn65dsi83和LCD模组的上下电时序
根据第1章节中描述,硬件给出的GPIO列表针对上下电时序部分有:

GPIO43

LCD_EN

GPIO82

AVDD_ON_EN

GPIO83

DVDD_ON_EN

按照LCM电路描述AVDD和DVDD主要是给LVDS屏使用,而LCD_EN(原理图上为LVDS_RST PIN)给sn65dsi83用,所以上电时序需要分别查看对应器件的使用手册,如下:
LVDS的DVDD和AVDD上电时序:

sn65dsi83的RST管脚时序(请参开sn65dsi83.pdf 11页):

按照以上的上电时序部分的描述,代码修改如下:

vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83\cpt_clap070wp03xg_sn65dsi83.c
#define GPIO_LCD_AVDD_EN   GPIO82
#define GPIO_LCD_DVDD_EN   GPIO83
#define GPIO_LCD_BRIDGE_EN  GPIO43 
static void lcm_init(void)
{
...............................................................
#ifdef BUILD_LK
	printf("[LK/LCM]lcm_init \n");

	/* step1: sn65dsi8x enbable and init */
	/* GPIO42       VDD18_LVDS for SN65DSI83 power */
	mt_set_gpio_mode(GPIO_LCD_DVDD_EN, GPIO_MODE_00); //IO口模式设置
	mt_set_gpio_dir(GPIO_LCD_DVDD_EN, GPIO_DIR_OUT);
	MDELAY(5);
    mt_set_gpio_mode(GPIO_LCD_AVDD_EN, GPIO_MODE_00);
	mt_set_gpio_dir(GPIO_LCD_AVDD_EN, GPIO_DIR_OUT);
	MDELAY(5);
	mt_set_gpio_out(GPIO_LCD_DVDD_EN, GPIO_OUT_ONE);
	MDELAY(20);
	
	mt_set_gpio_out(GPIO_LCD_AVDD_EN, GPIO_OUT_ONE);
	MDELAY(20);
	
	/* GPIO127       LVDS_EN_R for SN65DSI83 */
	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ONE);
	MDELAY(5);

	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ZERO);
	MDELAY(20);

	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ONE);
	MDELAY(50);

	DSI_clk_HS_mode(0, NULL, 1);
	MDELAY(5);

	init_sn65dsi8x();
	MDELAY(10);
.....................................
}
static void lcm_suspend(void)
{
  .......................................................
	unsigned char temp;
	printk("[Kernel/LCM]lcm_suspend enter \n");
	lcm_set_gpio_output(GPIO_LCD_BL_EN, GPIO_OUT_ZERO); //先将拉sn65dsi83 RST管脚,在拉AVDD和DVDD使能管脚
	MDELAY(20);
	/* step 1 power down lvds lcd */
	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ZERO);
	MDELAY(10);
	//power down by zhaojr
	lcm_set_gpio_output(GPIO_LCD_AVDD_EN, GPIO_OUT_ZERO);
	MDELAY(20);
	lcm_set_gpio_output(GPIO_LCD_DVDD_EN, GPIO_OUT_ZERO);
	MDELAY(20);
.................................................
}
static void lcm_resume(void)
{
..................................................................
	printk("[Kernel/LCM]lcm_resume enter \n");
	DSI_clk_HS_mode(0, NULL, 1);
	MDELAY(50);
	/* step 1 resume sn65dsi8x */
	//power ON  by zhaojr
	lcm_set_gpio_output(GPIO_LCD_DVDD_EN, GPIO_OUT_ONE);//先上电,再复位
	MDELAY(20);	
	lcm_set_gpio_output(GPIO_LCD_AVDD_EN, GPIO_OUT_ONE);
	MDELAY(20);
	//end power on  by zhaojr
	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ONE);
	MDELAY(5);
	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ZERO);
	MDELAY(20);
	lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ONE);
	MDELAY(10);
	init_sn65dsi8x();
	MDELAY(10);
.......................................................................................
}

5.1.3.3 LCD在BB端调用设备端打开的时候参数的设置
  按照LVDS屏和sn65dsi83 IC链接到主机端的DSI接口的链接方式设置lcm_get_params()函数,如下:
#define FRAME_WIDTH  (1024)
#define FRAME_HEIGHT (600)

static void lcm_get_params(LCM_PARAMS *params)
{
   ............................................
    memset(params, 0, sizeof(LCM_PARAMS));
    if (NO_USE_LCD_ID_GPIO80_PIN) {
        printf("lcm_get_params::[yzq][LK]...1024x600 lcm_get_params...\n");
        params->type = LCM_TYPE_DSI;  //使用DSI接口
        params->width = FRAME_WIDTH;  //LCD显示宽度
        params->height = FRAME_HEIGHT; //LCD显示高度
        params->dsi.mode = SYNC_EVENT_VDO_MODE; //DSI Video模式
        /* DSI */
        /* Command mode setting */
        params->dsi.LANE_NUM = LCM_FOUR_LANE; //DSI接口使用4  Lens
        /* The following defined the fomat for data coming from LCD engine. */
        params->dsi.data_format.format = LCM_DSI_FORMAT_RGB888; //24位显示
        params->dsi.word_count = FRAME_WIDTH * 3;  
        params->dsi.vertical_sync_active =3;// 8;//10;//2 //vsync
        params->dsi.vertical_backporch =12;// 15;//30;//2;//vbp
        params->dsi.vertical_frontporch = 20;//32;//4; //vfp
        params->dsi.vertical_active_line = FRAME_HEIGHT;

        params->dsi.horizontal_sync_active =20;//40;//10; //hsync
        params->dsi.horizontal_backporch = 160;//120;//20;//24;//hbp
        params->dsi.horizontal_frontporch = 140;//30;//hfp
        params->dsi.horizontal_active_pixel = FRAME_WIDTH;
        params->dsi.PS = LCM_PACKED_PS_24BIT_RGB888;  //24位显示
        params->dsi.pll_select = 0;    /* 0: MIPI_PLL; 1: LVDS_PLL */
        params->dsi.PLL_CLOCK = 156;//52MHZ=(1424x645x24x60)/4(lanes)/2

        params->dsi.cont_clock = 1;
    }

5.1.3.4 链接到BB端的LCM SensorsIC使用同一个的情况
即SensorID号项目,LVDS的LCD不同分辨率的屏进行兼容
  驱动将根据硬件设计的LCD ID管脚进行判断是链接到哪块屏幕,根据不同的ID管脚的值下不同屏幕的sn65dsi83寄存器配置参数和LVDS屏幕的显示参数,主要是修改初始化和屏幕参数,我们的项目目前没有做同一Sensor ID,不同LVDS屏的兼容,所以需要去掉这个功能,但保留接口,具体代码修改如下:
#define NO_USE_LCD_ID_GPIO80_PIN  1
void init_sn65dsi8x(void)
{
 ..........................................
//if (lcm_get_gpio_value(GPIO80)) {/*GPIO80 == 1*/
    if (NO_USE_LCD_ID_GPIO80_PIN) { //1024x600的屏初始化

        printf("init_sn65dsi8x::[yzq][LK]...1024x600 panel path...\n");
        push_table(sn65dis83_1024x600_init_table,
            sizeof(sn65dis83_1024x600_init_table) / sizeof(sn65dsi8x_setting_table));

    }else {
        printf("init_sn65dsi8x::[yzq][LK]...1280x800 panel path...\n"); //1280x800屏的初始化
        push_table(sn65dis83_1280x800_table,
                    sizeof(sn65dis83_1280x800_table) / sizeof(sn65dsi8x_setting_table));

    }
.......................................................................
}
static void lcm_get_params(LCM_PARAMS *params)
{
    memset(params, 0, sizeof(LCM_PARAMS));
    //if (lcm_get_gpio_value(GPIO80)) {
    if (NO_USE_LCD_ID_GPIO80_PIN) { //1024x600屏的参数配置

        printf("lcm_get_params::[yzq][LK]...1024x600 lcm_get_params...\n");
        params->type = LCM_TYPE_DSI;
 .................................
}esle{  //另外分辨率屏的参数设置
.............................

}
lk部分最后请参考
vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\cpt_clap070wp03xg_sn65dsi83\
目录下的源码修改。

6 LCD内核部分的移植
6.1 内核配置
kernel-3.18\arch\arm64\configs\evb3561sv_w_no2_defconfig
CONFIG_MTK_LCM=y
CONFIG_CUSTOM_KERNEL_LCM="cpt_clap070wp03xg_sn65dsi83"
#CONFIG_MTK_LCM_DEVICE_TREE_SUPPORT=y
CONFIG_MTK_FB=y
CONFIG_MTK_LCM_PHYSICAL_ROTATION="0"
CONFIG_LCM_HEIGHT="600"
CONFIG_LCM_WIDTH="1024"

6.2 添加驱动
按照LK部分的代码说明,内核的LCM驱动架构其实跟LK基本是一样的,稍微有一定的差别。
kernel-3.18\drivers\misc\mediatek\lcm\mt65xx_lcm_list.h
添加一行:
extern LCM_DRIVER cpt_clap070wp03xg_sn65dsi83_lcm_drv;

kernel-3.18\drivers\misc\mediatek\lcm\mt65xx_lcm_list.c
添加以下内容:
LCM_DRIVER *lcm_driver_list[] = {
...........................................................
#if defined(CPT_CLAP070WP03XG_SN65DSI83)
    &cpt_clap070wp03xg_sn65dsi83_lcm_drv,
#endif

.............................................................
}

配置sn65dsi83的I2C号地址
kernel-3.18\drivers\misc\mediatek\lcm\cpt_clap070wp03xg_sn65dsi83\sn65dsi83_i2c.c
#define sn65dsi83_SLAVE_ADDR_WRITE    (0x5a >> 1)
#define sn65dsi83_in_i2c0 0

配置LCD模块电源控制管脚在内核中的访问方式:
kernel-3.18\drivers\misc\mediatek\lcm\cpt_clap070wp03xg_sn65dsi83\lcm_drv_cpt_clap070wp03xg_sn65dsi83.c
void lcm_request_gpio_control(struct device *dev)
{
.....................................
GPIO_LCD_BRIDGE_EN = 43;// of_get_named_gpio(dev->of_node, "gpio_lcm_bridge_en", 0);
GPIO_LCD_DVDD_EN = 83;
GPIO_LCD_AVDD_EN = 82;

............................................
    gpio_request(GPIO_LCD_BRIDGE_EN, "GPIO_LCD_BRIDGE_EN");
    //printk("[KE/LCM] GPIO_LCD_BRIDGE_EN = 0x%x\n", GPIO_LCD_BRIDGE_EN);
    gpio_request(GPIO_LCD_DVDD_EN, "GPIO_LCD_DVDD_EN");
    gpio_request(GPIO_LCD_AVDD_EN, "GPIO_LCD_AVDD_EN");

kernel-3.18\drivers\misc\mediatek\lcm\cpt_clap070wp03xg_sn65dsi83\cpt_clap070wp03xg_sn65dsi83.h
extern unsigned int GPIO_LCD_BRIDGE_EN;
extern unsigned int GPIO_LCD_DVDD_EN;
extern unsigned int GPIO_LCD_AVDD_EN;

具体驱动的实现,这个文件可以直接拷贝LK中的驱动,稍加修改即可实现:
kernel-3.18\drivers\misc\mediatek\lcm\cpt_clap070wp03xg_sn65dsi83\cpt_clap070wp03xg_sn65dsi83.c
   内核中实现LCM模组具体的驱动是需要注意,LCD驱动在加载的时候,初始化我们将其设置成空并保持时钟输出即可,原因是保证LK阶段和内核阶段logo的连续性,因为在lk阶段已经正确初始化LCM模组,内核阶段不需要再次初始化,否则会导致LCD闪屏。具体情况如下:
static void lcm_init(void)
{
    pr_info("[Kernel/LCM]lcm_init\n");
    DSI_clk_HS_mode(0, NULL, 1);

}
而必须实现休眠唤醒函数,否则系统休眠之后无法唤醒:

以下注意:上电时先上DVDD,后上AVDD。下电时:先下AVDD,后下DVDD
static void lcm_suspend(void)
{
    pr_info("[Kernel/LCM]lcm_suspend enter \n");
    // step 1 sn65dsi83 RST no enable
    gpio_request(GPIO_LCD_BRIDGE_EN, "sn65dsi83");
    lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ZERO);
    gpio_free(GPIO_LCD_BRIDGE_EN);
    MDELAY(10);
    //AVDD power down /DVDD power down  by zhaojr
    gpio_request(GPIO_LCD_AVDD_EN, "sn65dsi83_avdd_en");
    lcm_set_gpio_output(GPIO_LCD_AVDD_EN, GPIO_OUT_ZERO);
    gpio_free(GPIO_LCD_AVDD_EN);
    MDELAY(20);
    gpio_request(GPIO_LCD_DVDD_EN, "sn65dsi83_dvdd_en");
    lcm_set_gpio_output(GPIO_LCD_DVDD_EN, GPIO_OUT_ZERO);
    gpio_free(GPIO_LCD_DVDD_EN);
    MDELAY(20);
     //end power down  by zhaojr
    /* step 3 set dsi LP mode */
    DSI_clk_HS_mode(0, NULL, 0);}

static void lcm_resume(void)
{
    pr_info("[Kernel/LCM]lcm_resume enter\n");
    /* step 1 resume sn65dsi8x */
    DVDD power on /AVDD power on  by zhaojr
    gpio_request(GPIO_LCD_DVDD_EN, "sn65dsi83_dvdd_en");
    lcm_set_gpio_output(GPIO_LCD_DVDD_EN, GPIO_OUT_ONE);
    gpio_free(GPIO_LCD_DVDD_EN);
    MDELAY(20);

    gpio_request(GPIO_LCD_AVDD_EN, "sn65dsi83_avdd_en");
    lcm_set_gpio_output(GPIO_LCD_AVDD_EN, GPIO_OUT_ONE);
    gpio_free(GPIO_LCD_AVDD_EN);
    MDELAY(20);
    //end power on  by zhaojr
    //sn65dsi83 enable RST
    gpio_request(GPIO_LCD_BRIDGE_EN, "sn65dsi83");
    lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ONE);
    MDELAY(5);

    lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ZERO);
    MDELAY(20);

    lcm_set_gpio_output(GPIO_LCD_BRIDGE_EN, GPIO_OUT_ONE);
    MDELAY(50);
    gpio_free(GPIO_LCD_BRIDGE_EN);

    DSI_clk_HS_mode(0, NULL, 1);
    MDELAY(5);
    //Re initialization of LCD
    init_sn65dsi8x();
    MDELAY(10);
}
7 Android OS系统部分
Android系统启动之后主界面显示超大或图标偏小,主要原因是Android的LCD分辨率density设置得不正确引起的,一般使用的比率为160、240、320等,尝试修改一下即可。
我们的屏的分辨率是1024x600使用的标准值density值是240。在Android全部配置文件中将density值修改成240即可
device\atc\evb3561sv_w_no2\system.prop
#ro.sf.lcd_density=320
ro.sf.lcd_density=240

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值