2. lcm调试日志

来源:互联网 发布:金星和方俊谁厉害知乎 编辑:程序博客网 时间:2024/04/29 21:59
零、点亮新camera1. 修改vendor\mediatek\proprietary\bootable\bootloader\lk\project\len6737m_35_m0.mkCUSTOM_LK_LCM="rm68200_hd720_dsi_vdo"(该为指定LCM)2. 修改kernel-3.18\arch\arm\configs\len6737m_35_m0_debug_defconfig、len6737m_35_m0_defconfigCONFIG_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.mkCONFIG_LCM_HEIGHT="1280"CONFIG_LCM_WIDTH="720"4. 添加驱动代码,放到kernel-3.18\drivers\misc\mediatek\lcm目录创建文件夹rm68200_dsi_vdo_common文件夹中包含 rm68200_dsi_vdo_common.c、Makefile5. 添加驱动代码,放到vendor\mediatek\proprietary\bootable\bootloader\lk\dev\lcm\目录创建文件夹rm68200_dsi_vdo_common文件夹中包含 rm68200_dsi_vdo_common.c、Makefile6. 修改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,+  #endif7. 修改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,+  #endif8. 修改驱动代码...\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 0x6820lcm_compare_id(void){...return (LCM_ID == id)?1:0;// 点新屏时可写死 return 1;}一、常用调试方法:1. 查看机器中lcm型号:adb shellcat /proc/cmdline// androidN 没有 2. 查看系统分辨率cat /system/build.prop | grep lcd_density // 得“240”3. 修改系统分辨率device\lentek\len6737t_35g_m0\system.propro.sf.lcd_density=240// 240就是系统的分辨率--可以通过修改这个值(参考其他工程)4. 闪屏修改kernel-3.18\drivers\misc\mediatek\lcm\rm68200_dsi_vdo_common\rm68200_dsi_vdo_common.cparams->dsi.PLL_CLOCK = 200;   //200~240;修改这个值二、屏的分辨率fwvga--  856*480hd/hd720-- 1280*720fhd-- 1920*1080驱动中#define FRAME_WIDTH  (720)#define FRAME_HEIGHT (1280)三、相同ic的lcm做兼容 - 不通模组厂的模组可以通过内置电阻不通,而使lcm的ID脚输出电压不同,把ID脚接到PMU上,lcm_compare_id()时通过PMU读取电压值,根据电压值做判断0 - 0v470k- 0.2~0.3v150k- 0.7~0.8v51k- 1.2~1.3v1. 查看硬件原理图,可知lcm的ID脚“AUX_IN1_LCD_ID” 连接在pmu的“AUX_IN1”脚2. 修改驱动, 主要是lcm_compare_id():+#define AUXADC_LCM_VOLTAGE_CHANNEL     1// 根据原理图,lcm的ID脚接在pmu的“AUX_IN1”脚,所以是1/* 根据mtk-online 不只屏,accdet也会用到AUX_IN0 -- channel 0AUX_IN1 -- channel 1AUX_IN2 -- channel 12AUX_IN3 -- channel 13AUX_IN4 -- channel 14*/+extern int IMM_GetOneChannelValue(int dwChannel, int data[4], int* rawdata);static unsigned int lcm_compare_id(void){+int data[4] = {0,0,0,0};+int rawdata = 0;+int lcm_vol = 0;+int res = 0;unsigned int id = 0;unsigned char buffer[3];unsigned int array[16];SET_RESET_PIN(1);  //NOTE:should reset LCM firstlyMDELAY(6);SET_RESET_PIN(0);MDELAY(6);SET_RESET_PIN(1);MDELAY(50);+#ifdef AUXADC_LCM_VOLTAGE_CHANNEL+res = IMM_GetOneChannelValue(AUXADC_LCM_VOLTAGE_CHANNEL,data,&rawdata);// 通过PMU读取电压值,根据电压值做判断+if(res < 0)+{+#ifdef BUILD_LK+printf("[adc_uboot]: get data error\n");+#endif+return 0;+}+#endif+lcm_vol = data[0]*1000+data[1]*10;array[0] = 0x00043902;// read id return two byte,version and idarray[1] = 0xf36192df;dsi_set_cmdq(array, 2, 1);MDELAY(10);array[0] = 0x00023700;dsi_set_cmdq(array, 1, 1);read_reg_v2(0xDF, buffer, 2);id = buffer[0]<<8 | buffer[1]; //we only need ID#if defined (BUILD_LK)printf("jd9261_hsd_qhd_dsi_vdo, id = 0x%08x\n", id);#elseprintk("jd9261_hsd_qhd_dsi_vdo, id = 0x%08x\n", id);#endif-    return (id == 0x9261)?1:0;+    return ((id == 0x9261) && (lcm_vol < 1000)) ? 1 : 0; // lcm模组1 读出来是:880mv或者return ((id == 0x9261) && (lcm_vol > 1000)) ? 1 : 0; // lcm模组2 读出来是:1170mv}四、打开ESD - 打静电的时候出现花屏(按电源键休眠再唤醒才会恢复正常)1. 在lcm的驱动中的添加 -  【验证为无效】static void lcm_get_params(LCM_PARAMS * params){...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].paralist[0] = 0x9c;五、如何计算帧率(刷新频率)1.2.六、如何调整上下颠倒1. 若支持反扫,修改驱动初始化数组通用寄存器: {0x37, 1, {0x09}}, // 正扫{0x37, 1, {0x05}}, // 反扫9369:【k27】{0xC1,2,{0x00,0x12}}, // 0x12->0x0A rotation 180;(D4;D3)2. 若不支持,翻转系统:(开机logo的第一张会是倒的,需要把图片翻转)lk:vendor/mediatek/proprietary/bootable/bootloader/lk/project/magc6737m_65_n.mkMTK_LCM_PHYSICAL_ROTATION=180kernel:kernel-3.18/arch/arm64/configs/magc6737m_65_n_debug_defconfigCONFIG_MTK_LCM_PHYSICAL_ROTATION="180"system:device/magcomm/magc6737m_65_n/ProjectConfig.mkMTK_LCM_PHYSICAL_ROTATION=180案例一: 机器温升超标 - 修改lcm亮度为70%平台: androidM,MTK6580步骤: 1. 修改alps\kernel-3.18\drivers\misc\mediatek\leds\mt6580\leds.cmt_mt65xx_led_set()中level = level*70/100;// 改为70%mt_mt65xx_led_set_cust(level) // 在此之前案例二: led三色灯(接在PMIC)亮度改为70%平台: androidL,MTK6580步骤: 1. 修改alps\kernel-3.10\drivers\misc\mediatek\leds\mt6580\leds.cmt_brightness_set_pmic()中// 将原本的16ma 改为 12ma,大概降为70%if (pmic_type == MT65XX_LED_PMIC_LCD_ISINK)else if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK0)else if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK1)// 查看原理图: R、G、B分别接在PMIC的ISINK1、ISINK2、ISINK3-pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_2);//12mA+pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_3);//16mAelse if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK2)-pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_2);//12mA+pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_3);//16mAelse if(pmic_type == MT65XX_LED_PMIC_NLED_ISINK3)-pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_2);//12mA+pmic_set_register_value(PMIC_ISINK_CH1_STEP,ISINK_3);//16mA注:根据原理图,6737的R、G、B分别接在ISINK0、ISINK1、GPIO63(AD27)【说明B无法在软件上控制亮度】6737的R、G通过PMIC控制亮灭即亮度, B经dts通过GPIO控制亮灭案例三: 现象: 平台: androidM,MTK6580排查过程: 1.   2.     3. 处理方案: 总结: 案例四: 现象: 平台: androidM,MTK6580排查过程: 1.   2.     3. 处理方案: 总结: 案例五: 现象: 平台: androidM,MTK6580排查过程: 1.   2.     3. 处理方案: 总结: