MT6580 Android N LCM移植

1. LCM 硬件连接

硬件线路的连接:看原理图,主要看
MIPI 接口(3lane:3 组数据差分线 1组时钟差分线),
背光电路(VLED_P & VLED_N)&背光电路控制方式(脉宽调制),
GPIO 引脚的配置:LCM_RST,DSI_TE,DISP_PWM0,EINT3_LCD_ID(中断引脚),
当然还有电源引脚:VIO28_PMU & VIO18_PMU ,LCD_BIAS_EN(电源控制引脚,
低电平有效)
如下图所示,
硬件连接图

2.平台配置

vim device/zechin/zechin6580_we_n/ProjectConfig.mk ----------确保平台 LCM 参数设置
BOOT_LOGO = hd720
LCM_HEIGHT = 1280
LCM_WIDTH = 720

3.kernel配置

3.1config配置

vim kernel-3.10/arch/arm/configs/zechin6580_weg_l_debug_defconfig
vim kernel-3.10/arch/arm/configs/zechin6580_weg_l_defconfig
---------- 确 保LCM 参与编译 & lcm 规格参数设置
CONFIG_CUSTOM_KERNEL_LCM="ili9881c_dsi_vdo_hd_yikuailai_hancai "
CONFIG_LCM_WIDTH=“720”
CONFIG_LCM_HEIGHT=“1280”

3.2driver code 添加

alps/kernel-3.10/drivers/misc/mediatek/lcm/ -------- driver ic 的驱动代码
jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo/
alps/kernel-3.10/drivers/misc/mediatek/lcm$ vim mt65xx_lcm_list.c --------- 确保要使用
的驱动已经被添加到kernel中
extern LCM_DRIVER jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo_lcm_drv;

#if defined(JD9161BA_DSI_VDO_fwvga_ZHONGGUANGDIAN_IVO)
&jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo_lcm_drv,
#endif

4.LK配置

由于从 Android m开始 mtk平台的lk层没有映射kernel的driver code,因此在lk里面也要配置对应的driver code。

4.1平台配置

alps/bootable/bootloader/lk/project$ vim zechin6580_weg_l.mk
--------- 确保要使用的驱动已经被添加到 LK 项目中
CUSTOM_LK_LCM = " jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo"
BOOT_LOGO := Fwvga

4.2driver code 添加

alps/bootable/bootloader/lk/dev/lcm$ -------- driver ic 的驱动代码
jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo/
alps/bootable/bootloader/lk/dev/lcm$ vim mt65xx_lcm_list.c
--------- 确保要使用的驱动已经被添加到 LK 中
extern LCM_DRIVER jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo_lcm_drv

#if defined(JD9161BA_DSI_VDO_fwvga_ZHONGGUANGDIAN_IVO)
&jd9161ba_dsi_vdo_fwvga_zhongguangdian_ivo_lcm_drv,
#endif

5.BUG归纳

5.1背光亮度调节

alps/vendor/mediatek/proprietary/custom/zechin6580_we_n/hal/aal$ vim cust_aal.cpp
int BrightnessLevel[] = { 128 };
int BrighteningSpeedLevel = 128;//范围 0-255,数值越大调节的速度越快
int DarkeningSpeedLevel = 13;//范围 0-255,数值越大调节的速度

5.2帧率的计算

ClkLean_num/(vsa+vbp+vfp+val)(hsa+hbp+hfp+hal)
Data Rate = ((height + vsa + vbp + vfp) * (width + hsa + hbp + hfp) * bits_per_pixel *
frames_per_second) / data_lanes 2*PLL_CLOCK = Data Rate --> PLL_CLOCK = Data Rate/2

5.3在屏亮和背光之间延迟 50MS 使开机瞬 间水波纹看不到

+++ b/alps/vendor/mediatek/proprietary/bootable/bootloader/lk/platform/mt6580/platform.c @@ -900,6 +900,7 @@ void platform_init(void)
#ifdef MTK_BATLOWV_NO_PANEL_ON_EARLY
if (!is_low_battery(0)) {
#endif

  • mdelay(50); mt65xx_backlight_on();
    #ifndef MACH_FPGA_NO_DISPLAY
    //pwm need display sof

5.4LCM180 度翻转方案

vim device/zechin/zechin6580_we_n/ProjectConfig.mk
MTK_LCM_PHYSICAL_ROTATION = 1

5.5 ESD

video mode 的 ESD 实现有三种模式,分别是:ext TE(外部 TE 信号检
测)、int TE(内部 TE 信号检 测)、non cout clk.

a) int TE 和 ext TE 的检测,都不需要实现 lcm_esd_check 函数,而需
要实现 lcm_esd_recover 函数。
non cont clk 则不需要实现 lcm_esd_check 函数和 lcm_esd_recover 函
数,而只需要在上面 params 中配置为 TRUE 即可
b) ext TE 的实现,需要 LCM 外接 TE pin 到 BB 端,同时在 inital code
中配置寄存器打开 TE 信号的输出 (一般是写 0x35 寄存器,具体需要和 LCM IC FAE
确认)
c) 通 过 读 寄 存 器 方 式 做 ESD , 只 需 要 在 lcm driver 里 面 的
lcm_get_params 函数中按照如下的方式进行客制化配置就能够正常的 run 了。(寄存器的读取可向FAE索要)
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;
params->dsi.lcm_esd_check_table[1].cmd = 0x09;//0x0A;
params->dsi.lcm_esd_check_table[1].count = 3;
params->dsi.lcm_esd_check_table[1].para_list[0] = 0x80;//0x9C;
params->dsi.lcm_esd_check_table[1].para_list[1] = 0x03;
params->dsi.lcm_esd_check_table[1].para_list[2] = 0x06;

ESD CHECK 的文件基本上都在这个文件
alps/kernel-3.18/drivers/misc/mediatek/video/mt6580/primary_display.c
int primary_display_esd_check(void)

可以添加如下 log,由于平台的差异,代码略有不同,但是整体架构
和思路都是相同的

/kernel-3.18/drivers/misc/mediatek/video/mt6735/dispsys/ddp_dsi.c
int ddp_dsi_build_cmdq(DISP_MODULE_ENUM module, void *cmdq_trigger_handle,CMDQ_STATE state){

} else if (state == CMDQ_ESD_CHECK_CMP) {

DISPDBG("[DSI]enter cmp read_data0 byte0=0x%x byte1=0x%x byte2=0x%x byte3=0x%x\n",
read_data0.byte0,
read_data0.byte1,
read_data0.byte2,
read_data0.byte3);
DISPDBG("[DSI]cmp check_table cmd=0x%x,count=0x%x,para_list[0]=0x%x,para_list[1]=0x%x\n",
dsi_params->lcm_esd_check_table[i].cmd,
dsi_params->lcm_esd_check_table[i].count,
dsi_params->lcm_esd_check_table[i].para_list[0],
dsi_params->lcm_esd_check_table[i].para_list[1]);

/* DISPDBG("[DSI]enter cmp DSI+0x200=0x%x\n", AS_UINT32(DDP_REG_BASE_DSI0 + 0x200));
DISPDBG("[DSI]enter cmp DSI+0x204=0x%x\n", AS_UINT32(DDP_REG_BASE_DSI0 + 0x204));
DISPDBG("[DSI]enter cmp DSI+0x60=0x%x\n", AS_UINT32(DDP_REG_BASE_DSI0 + 0x60));
DISPDBG("[DSI]enter cmp DSI+0x74=0x%x\n", AS_UINT32(DDP_REG_BASE_DSI0 + 0x74));
DISPDBG("[DSI]enter cmp DSI+0x88=0x%x\n", AS_UINT32(DDP_REG_BASE_DSI0 + 0x88));
DISPDBG("[DSI]enter cmp DSI+0x0c=0x%x\n", AS_UINT32(DDP_REG_BASE_DSI0 + 0x0c)); */

printk("[DSI]enter cmp i=%d\n", i);
printk("[DSI]enter cmp check_table cmd=0x%x\n",dsi_params->lcm_esd_check_table[i].cmd);
printk(“count=0x%x\n”,dsi_params->lcm_esd_check_table[i].count);
printk(“para_list[0]=0x%x\n”,dsi_params->lcm_esd_check_table[i].para_list[0]);

5.6 LCD 点不亮(不正常点亮)

  1. LCD 点不亮问题的原因有很多,但出现这个问题后,首先应该判断 LCD
    是否正确完成初始化。最简单的判断方法就是测量 LCM 的 FPC 上的电容两端
    流程:上电->初始化。上电这个步骤一般不会有问题,如果没有遵循
    正确的上电时序和 RESET 的流程的话也比较好排查…

  2. LCD 图像错位,LCD 显示在水平方向发生位移,或者在上面或底部有一条
    几个像素的彩色、白色或黑色条纹。一般来说,出现这种情况,都是因为初始化参数设置不对,和行同步或者场同步信号有关。显示位置有位移或者错位,就检查 LCD 模组和 CPU 上的 LCD 控制器的行同步与场同步信号的宽度、前后延时、极性的匹配。最可能的就是回扫的前后延时时间不匹配。

  3. 开机 LCD 亮的瞬间有花屏。出现这种问题,一般都是由于 LCD 在初始化完成后刷新第一副图像
    未完全准备好的时候背光已经亮了。解决的办法就是在 UBOOT 时候背光亮之前的延时相应
    的加长一点。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

人在路上……

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值