零、点亮新lcm
1. 修改vendor\mediatek\proprietary\bootable\bootloader\lk\project\len6737m_35_m0.mk
CUSTOM_LK_LCM="rm68200_hd720_dsi_vdo"(该为指定LCM)
2. 修改kernel-3.18\arch\arm\configs\len6737m_35_m0_debug_defconfig、len6737m_35_m0_defconfig
CONFIG_CUSTOM_KERNEL_LCM="rm68200_hd720_dsi_vdo"(该为指定LCM)
CONFIG_LCM_HEIGHT="1280"
CONFIG_LCM_WIDTH="720"
3. 修改Y:\code2\mtk6737_pb5_1_0_cmcc\device\alibaba\b905_lezhou\ProjectConfig.mk
CONFIG_LCM_HEIGHT="1280"
CONFIG_LCM_WIDTH="720"
4. 添加驱动代码,放到kernel-3.18\drivers\misc\mediatek\lcm目录
创建文件夹rm68200_dsi_vdo_common文件夹中包含 rm68200_dsi_vdo_common.c、Makefile
5. 添加驱动代码,放到vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\目录
创建文件夹rm68200_dsi_vdo_common文件夹中包含 rm68200_dsi_vdo_common.c、Makefile
6. 修改kernel-3.18\drivers\misc\mediatek\lcm\mt65xx_lcm_list.h
+ extern LCM_DRIVER rm68200_hd720_dsi_vdo_lcm_drv;
修改kernel-3.18\drivers\misc\mediatek\lcm\mt65xx_lcm_list.c
+ #if defined(RM68200_HD720_DSI_VDO)
+ &rm68200_hd720_dsi_vdo_lcm_drv,
+ #endif
7. 修改vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\mt65xx_lcm_list.c
+ extern LCM_DRIVER rm68200_hd720_dsi_vdo_lcm_drv;
+ #if defined(RM68200_HD720_DSI_VDO)
+ &rm68200_hd720_dsi_vdo_lcm_drv,
+ #endif
8. 修改驱动代码...\lcm\rm68200_dsi_vdo_common\rm68200_dsi_vdo_common.c
通常客户只给一个初始化代码,需要将其修改成数组格式 - 使用Emeditor,正则表达式
8.1 客户给的格式:
GP_COMMAD_PA(3); //下面SPI_WriteData()三次
SPI_WriteData(0xed);SPI_WriteData(0x60);SPI_WriteData(0x10);
8.2 改成我们需要的格式(SPI_WriteData 先写地址再写数据,跟I2C一样):
{0xed, 2,{0x60, 0x10}},
8.3 ---->以下不改
{0x11,1,{0x00}}, // sleep-out
{REGFLAG_DELAY, 120, {}},
{0x29,1,{0x00}}, // display-on
{REGFLAG_DELAY, 10, {}},
{REGFLAG_END_OF_TABLE, 0x00, {}}
8.4 修改mipi通道数
params->dsi.LANE_NUM = LCM_THREE_LANE; // LCM_FOUR_LANE; -- 根据实际模组打样来配置(询问FAE得知)
-- 通常fwvga为2 hd为3/4,fhd为4(分辨率高的mipi通道数多)
-- 同为hd,3路mipi要比4路mipi的时钟高一些
8.5 屏的参数
以下为常修改值--FAE提供--可以由数据手册算出
params->dsi.vertical_sync_active = 3;
params->dsi.vertical_backporch = 12; //后沿
params->dsi.vertical_frontporch = 8; //前沿
params->dsi.vertical_active_line = FRAME_HEIGHT;
params->dsi.horizontal_sync_active = 2;
params->dsi.horizontal_backporch = 28; // 修改前后沿也能影响闪屏效果
params->dsi.horizontal_frontporch = 50;
params->dsi.horizontal_active_pixel = FRAME_WIDTH;
8.6 兼容
-- 系统通过读ID进行兼容,如果只配了一个屏则不读ID
-- 点亮新屏的时候,可以先不兼容,或先把读ID函数写死return 1
#define LCM_ID 0x6820
lcm_compare_id(void){
...
return (LCM_ID == id)?1:0; // 点新屏时可写死 return 1;
}
一、常用调试方法:
1. 查看机器中lcm型号:
adb shell
cat /proc/cmdline // androidN 没有
// 自行添加
alps/vendor/mediatek/proprietary/bootable/bootloader/lk/app/mt_boot/mt_boot.c
- //#define SERIAL_NUM_FROM_BARCODE
+ #define SERIAL_NUM_FROM_BARCODE
int boot_linux_from_storage(void)
+ snprintf(cmdline_tmpbuf, CMDLINE_TMP_CONCAT_SIZE, "lcm=%1d-%s", DISP_IsLcmFound(), mt_disp_get_lcm_id());
+ cmdline_append(cmdline_tmpbuf);
+ snprintf(cmdline_tmpbuf, CMDLINE_TMP_CONCAT_SIZE, "fps=%1d", mt_disp_get_lcd_time());
+ cmdline_append(cmdline_tmpbuf);
+ snprintf(cmdline_tmpbuf, CMDLINE_TMP_CONCAT_SIZE, "vram=%1d", DISP_GetVRamSize());
+ cmdline_append(cmdline_tmpbuf);
2. 查看系统分辨率
cat /system/build.prop | grep lcd_density // 得“240”
3. 修改系统分辨率
device\lentek\len6737t_35g_m0\system.prop
ro.sf.lcd_density=240 // 240就是系统的分辨率--可以通过修改这个值(参考其他工程)
4. 闪屏
修改kernel-3.18\drivers\misc\mediatek\lcm\rm68200_dsi_vdo_common\rm68200_dsi_vdo_common.c
params->dsi.PLL_CLOCK = 200; //200~240;修改这个值
二、屏的分辨率
fwvga -- 856*480
hd/hd720 -- 1280*720
fhd -- 1920*1080
驱动中
#define FRAME_WIDTH (720)
#define FRAME_HEIGHT (1280)
三、相同ic的lcm做兼容 - 不通模组厂的模组可以通过内置电阻不通,而使lcm的ID脚输出电压不同,把ID脚接到PMU上,lcm_compare_id()时通过PMU读取电压值,根据电压值做判断
0 - 0v
470k - 0.2~0.3v
150k - 0.7~0.8v
51k - 1.2~1.3v
1. 查看硬件原理图
2. lcm调试日志
最新推荐文章于 2022-12-15 20:41:11 发布