【MTK】LCM移植

  • 软件要求
  1. compare_id 必须保证可以正确读取,通过resume 打印信息查看id 读取是否成功与正确,确认OK后需要删除resume compare_id代码,避免由于频繁resume 读取id导致系统可能发生重启;
  2.  LCD 刷新率 控制在50fps-65fps,须通过fps工具(com.edburnette.fps2d-1.apk) 查看实际刷新率数据,特殊情况再行处理,帧率的高低会影响:GPS、闪屏、功耗、射频等,提高或降低LCD帧率, 修改PLL: params->dsi.PLL_CLOCK=202;
  3.  整机静电不通过的情况下,软件必须增加esd_check&esd_recover(通用版本IC驱动必须实现, 若不同供应商若无法达到esd,由其自行解决);
  • 常见效果确认
  1. Fliker (闪屏) 是否存在——整屏幕背光闪、边角及灰色界面下闪烁(通过查看主界面、计算器界面等验证)
  2. Moire(波纹) 是否存在
  3. 色调差异(冷、暖色温)
  4. 亮度数据(Lux单位)、对比度数据、色彩数(65K、16K等)

 

  • 配置LCM
  1. 配置LCM时先要把logo 分辨率指定正确,如: HD分辨率配置为hd720
  2. LCM 移植完成后务必确认刷新率即帧率FPS: 要求50fps-65fps, 除非FAE 特别要求,否则不允许超出此范围
  3. LCM 代码分布 在lk和kernel

LK: alps/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/

Kernel: alps/kernel-3.18/drivers/misc/mediatek/lcm/

 

  • 范例

以晶尚10寸屏为例,首先,确认模组打样和硬件原理图管脚是否能够对应上,正确后。依据如下步骤:

  1. 保证当前工程全编译过的前提下(userdebug版本),更改如下内容:

alps/vendor/mediatek/proprietary/bootable/bootloader/lk/project/sm6737t_66_n.mk–> CUSTOM_LK_LCM=" jd9364_dsi_vdo_js"(先把之前兼容的屏全部去掉。)

 

alps/kernel-3.18/arch/arm64/configs/ sm6735_66_n_debug_defconfig &&sm6735_66_n_defconfig两个文件更改内容:CONFIG_CUSTOM_KERNEL_LCM="jd9364_dsi_vdo_js" (先把之前兼容的屏全部去掉。)

并核对以下内容:                             

*CONFIG_LCM_HEIGHT="1280"                        

*CONFIG_LCM_WIDTH="800"                             

CONFIG_MTK_LCM=y

//在内核配置文件里直接修改会直接定死屏分辨率,不适配多种屏的方案

  1. alps/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm在此目录下面单独创建一个jd9364_dsi_vdo_js文件夹,内容可以先参考相类似的屏驱动

alps/vendor/mediatek/proprietary/bootable/bootloader/lk/dev/lcm/ mt65xx_lcm_list.c增加jd9364_dsi_vdo_js定义,参考别的屏。注意定义要大写。

alps/kernel-3.18/drivers/misc/mediatek/lcm在此目录下面单独创建一个jd9364_dsi_vdo_js文件夹,内容可以先参考相类似的屏驱动,lk和kernel两个驱动文件一样

alps/kernel-3.18/drivers/misc/mediatek/lcm/mt65xx_lcm_list.增加定义,参考相类似的屏驱动。注意定义要大写

 

  1. 修改驱动文件

a.将模组厂给过来的初始化代码合入lcm_initialization_setting[] = 此函数中,要按照MTK的格式,参考其他屏的配置

 

b.修改lcm_get_params(LCM_PARAMS *params)

{

........

          params->dsi.LANE_NUM = LCM_FOUR_LANE;   //4通道

          params->dsi.vertical_sync_active                = 10;//2    竖直同步信号

            params->dsi.vertical_backporch                    = 20;//30

            params->dsi.vertical_frontporch                    = 16;//20

      

            params->dsi.horizontal_sync_active                = 10;//12  水平同步信号

            params->dsi.horizontal_backporch                = 40;//60

            params->dsi.horizontal_frontporch                = 30;//60

            params->dsi.PLL_CLOCK=200;       //clock频率

//esd check配置,晶尚的不支持

 //   params->dsi.esd_check_enable = 1;

  //  params->dsi.customization_esd_check_enable = 1;

 // params->dsi.lcm_esd_check_table[0].cmd = 0x0A;//9503v做esd-check 分别0A:9C,0B:00,0C:70

 //   params->dsi.lcm_esd_check_table[0].count = 1;

 //   params->dsi.lcm_esd_check_table[0].para_list[0] = 0x9c;

}

对应屏驱动文件中

lcm_compare_id(void){

return 1; //强制返回成功,先不管读ID

……………..

}

c.单独编译lk 和bootimages模块。以上内容保证更改正确,模组厂给的初始化是对应的,一般情况下是可以正常亮的。

如果能正常显示。进入adb shell

 

输入 # su

# cat  /proc/cmdline

能看到加载的是对应的屏驱动。

屏正常显示后如果出现有时屏会闪动。降低时序:lcm_get_params(LCM_PARAMS * params) {

……

params->dsi.PLL_CLOCK=220;  //230  改动此内容

以上如果一开机就一直花屏,屏驱动也是跑的对应的驱动,而且此板子之前有兼容其它屏,而且其它屏能够正常显示的。那么这个时候可以考虑找项目换一块屏试试,此情况模组本身的问题概率比较大。

 

d.正常显示之后,修改读ID部分

对应函数:lcm_compare_id(void)

{

    array[0] = 0x00033700;// read id return two byte,version and id

    dsi_set_cmdq(array, 1, 1);

    read_reg_v2(0xDB, &buffer[0], 1);

    read_reg_v2(0xDC, &buffer[1], 1);

    device_id = buffer[0]<<8|buffer[1];

    return (0x9504 == device_id)  ? 1 : 0;

}

 

此部分可以找屏厂提供。为了方便看打印。将读ID函数重新在lcm_resume(void){

//最前面再次读ID

lcm_compare_id();

……..

}     

 

如果相同IC不同玻璃做兼容:硬件上专门有一个GPIO脚控制,两块屏接在板子上开机 对应的这个脚的电压会不一样,这样才能兼容。

如下图AUX_IN1_LCD_ID这个管脚:

软件上修改参考如下:

static unsigned int lcm_compare_id(void)

{    res = IMM_GetOneChannelValue(AUXADC_LCM_VOLTAGE_CHANNEL,data,&rawdata);

 

    lcm_vol = data[0]*1000+data[1]*10;

........

return ((0x9504 == device_id) && (lcm_vol>200 && lcm_vol<400)) ? 1 : 0;   

}

ID电阻对应的电压值:

LCD_ID: 

if (lcm_vol > 200 && lcm_vol < 500)     //470k

if (lcm_vol > 500 && lcm_vol < 800)     //150k

if (lcm_vol > 800 && lcm_vol < 1000)    //100k

if (lcm_vol > 1000 && lcm_vol < 1300)   //51k

if (lcm_vol < 200))   //NULL

 

e.屏需要在休眠RST脚置低,唤醒时置高(避免可能的电源不稳的问题)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值