摘要:
该文档主要是基于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列表,对应的管脚如下:
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.cstatic 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列表针对上下电时序部分有:
按照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_LKprintf("[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 zhaojrlcm_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 zhaojrlcm_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 zhaojrlcm_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