|
本帖最后由 wenhaounique 于 2015-9-15 16:07 编辑
完整版的在附件
驱动技术报告
(2015届)
题 目 LCM的各种闪烁问题
部 门 研发一部
分 部 软件一部
组 别 驱动组
作者姓名 周文豪
小组主管 曾阳
完成日期 2015-08-18~2015-08-19
摘 要
随着pad的种类越来越多,功能越来越强大,其所能使用的LCM的屏的种类也越来越多,导致现在一套代码无法完全驾驭所有的屏,尽管屏自身的兼容性和使用范围也越来越大,但同样一个大类里面的屏的适用规格还是有些差别的。本文档讲述的在硬件调试可行的前提下,讲述笔者总结下所驱动方面遇到的关于屏的各种闪烁部分的内容,希望可以起让大家在调试这方面问题时能有些思路。
关于闪屏的调试,笔者提醒一定要自己复现一遍,因为客户可能无法把出现的现象表述地很清楚,而且同样的机子要多试几台。解决办法其实并不难,找出问题的真相和关键特征才是难点。笔者写这文档主要是为如笔者一样的经验不足者提供些帮助,如果实在找不出问题的关键,读者可以按照笔者所罗列的常规问题依次做一些修改,类似于虽然不知道自己生了什么病,但把能吃的药都吃一边,应该还是有可能吃对药的 ( > _ <)
关键词:闪屏;复现;
ABSTRACT
With the growing number of pad, more and more powerful functions, the use of the LCM's type of screen is also increasing, resulting in a set of code can not fully control all the screen, even though the screen's compatibility and use of the range is growing, but also a large class of the applicable specifications of the screen is still somewhat different. This document describes the hardware debugging feasible premise, the author summed up the driver encountered on the screen of various flashing parts of the content, I hope that we can make some of the problems in debugging and some ideas.
A splash screen debugging, I remind must reappear again, because customers may not be able to appear the phenomenon of to express very clearly, and the same machine to try a few. Solution is not difficult to find out the truth and key features of the problem is difficult. The author writes this document is mainly provide some help, if really can not find a problem, readers can in accordance with the list of conventional problem in order to do some modifications, similar to although do not know what their own disease, but the drugs can eat while eating, it is possible to eat the medicine, like the author's lack of experience
Keywords: Splash Screen;Reproduction;
目 录
1.引言 1
2.常见的流程 2
2.1 2
2.2 排除ESD 3
2.3 其他情况 4
3.实际问题解决办法 5
3.1 屏抖 5
3.2 屏泛白,雪花点 5
3.3 解决唤醒时概率性黑屏 7
3.4 换屏后条纹闪屏 7
4.其他闪屏问题 9
4.1概率性出现唤醒/重启时闪屏的现象 9
4.2 DSI Video Mode的屏,在Sleep Out时发现屏概率性闪烁 10
5. 结论 13
[ ]
1.引言
鉴于屏的闪烁,画面字迹,重影等问题随着客户对屏客制化要求的越来越多出现的次数越来越多,不得不让笔者承认这类问题解决方法就成了即使是对刚从事驱动工作的人也必须要掌握的基础技能。
在该文档里,笔者主要以MT6582平台、HV7_719的工程项目为例,将一个笔者碰到的问题最多的屏所执行的解决的思路和方法进行完整的陈述,遇到的其他的本例以外的问题,笔者也会在后面提供一些解决办法。
2.常见的流程
经常有客户遇到闪屏问题,直接就提issue到MTK来解,其实这样做效率并不高。因为造成闪屏的原因多种多样,客户提供过来的往往是一个现象,有时候连现象都描述的不够清楚,导致定位问题的时候难以找到正确的方向。其实在遇到闪屏问题时,可以做第一手分析,找到一个正确的切入点。
2.1
a、 排除背光把背光接固定背光,如果仍然闪屏,说明不是背光的问题;
如果屏不闪,说明是背光问题。
b、 如果是背光问题,继续分析是否有开AAL功能,如果有开AAL功能,请将AAL功能关闭。如果关闭AAL功能后,屏不闪,说明是AAL导致的屏闪,请提issue给MTK。如果关闭AAL功能后,屏仍然闪,请内部确认贵司是否有在framework层做改动,很多情况是由于改动Framework,绕过LightService直接控制背光结点导致的问题。
------AAL:外界环境光自适应。
该功能关闭可在如图2.1_1所示的相应的工程目录文件路径如ALPS/mediatek/config/hv7_ak_at776gs/ProjectConfig.mk文件处关闭
图2.1_1
此处,写“no”即关闭AAL,写“yes”即打开AAL。
————附:关于AAL兼容性, 如果有多个屏,要将多个LCM的校准/Tuning参
数写入到一个cust_aal.cpp文件中
打开AAL(外界环境光自适应)功能后,不同lcm的兼容如下图2.1_2修改 alps/mediatek/custom/[project_name]/hal/aal /cust_aal.cpp:
图2.1_2
方法如下:
I. Int lcmCnt = 1
II.添加新的LCM的校准数据和AAL调谐参数为alcmcaldata [ ],aAAlparam [ ],这里需要注意在aLCMCalData[] and aAALParam[]两个数组里面的参数的顺序需要和mt65xx_lcm_list.c文件里面的lcm driver摆放的顺序一致,否则不同的参数和lcm driver对应的顺序就会错位。所以,因为宏定义的原因,上图所对应的lcm driver的:sl007dc_wsvga_ti.c驱动文件,如图2.1_3.
图2.1_3
c、 其实当定位到是背光的问题了,这个时候就可以提问题给
MTK了,抓取Mobile log给MTK。
2.2 排除ESD
如果通过第一步排除说不是背光闪,第二步可以检查是否由于ESD check导致的闪屏。可以先关闭ESD功能,看显示是否仍然会闪。如果关闭ESD功能后,lcm不再闪动,说明是ESD check导致的闪屏。这个时候就可以提把Mobile log抓过来给MTK看了。如果关闭ESD功能后,lcm仍然闪动,说明和ESD check无关。
-------ESD:静电放电机制
ESD关闭:可在如图2.2_1所示的相应的工程目录文件路径如ALPS/mediatek/config/hv7_ak_at776gs/ProjectConfig.mk文件处关闭
图2.2_1
将“yes”改为“no”就可关闭esd;
附:笔者如果花多点心思就不难发现DPI接口的屏的驱动文件是没有esd相关的函数的,即没有esd机制,DSI接口的屏的驱动函数有esd相关的函数。
2.3、其他情况
如果背光和ESD都给排除了,这时候就是跟客制化的因素关系比较大,这也是最容易出现,也是改动会比较多的地方,笔者所要一下所要讲的这个实际例子也是跟这个有关。
3.实际问题解决办法
此例子是深圳的客户反映HV7_719项目776版本的机子佑清朗的屏进入设置2分钟以上后再返回桌面,屏抖,然后笔者再解决此问题后,客户测试反映屏抖没有了,但是每次重新开机后有屏泛白、雪花点,需要锁屏一次后画面和文字才恢复清楚,唤醒时概率性黑屏。在彻底解决了之后,同样的机子,还是HV7_719项目776版本,只是屏的客户换成了IPS的爱坤的屏,出现了条纹闪屏--------在以上背景下,笔者详细讲下各个解决办法。
3.1 屏抖
进入设置界面2分钟后返回桌面后屏有抖动,对于这种比较特殊的抖动问题,在排除以上的背光和ESD以后,就有必要联系屏厂的fae,果不其然,屏厂那边也遇到过此问题,他们给我司的解决办法是关闭软件dither功能关闭。
Dither-图像处理中的Dithering是一个使用有限调色板在图像中创建色深错觉的技术。
在alps/mediatek/platform/mt6582/kernel/drivers/dispsys/ddp_bls.c文件处,将
图3.1_1
如图3.1_1所示:将DISP_REG_SET(DISP_REG_BLS_DITHER(6)对应的原0x00003004参数改为0x00002004。这样就将关闭了dither功能,屏幕没有出现闪屏。
3.2 屏泛白,雪花点
对于Fae说陈述的这个情况,在pad机子还是在笔者身边时复现所看到的是开机时画面有蓝色雪花点闪烁现象,并没有泛白,但开机一段时间后画面恢复正常。为了不盲目修改参数,笔者向原厂反映这一情况,原厂回馈说可能是电流信号干扰。但是笔者按原厂说的改电流大小并没有其什么作用,因此笔者便参考原厂所给的PDF上的PDF资料,修改了脉冲宽度和前后沿,具体做了如下参数修改:
图3.2_1
图3.2_2
图3.2_3
然后蓝色雪花点就没了,虽然只改驱动电流并没有有效地解决雪花点问题,但对于驱动电流选择问题,笔者只是察觉电流改小后,板子发热现象减小了,因此就改了下屏的驱动电流,该到了最小2MA
图3.2_4
3.3 解决唤醒时概率性黑屏
对于这个情况,笔者的复现现象是这样的,每次按锁屏键唤醒时,需要等稍微长一点才会有显示,若较快的重复按锁屏键的话,时而会出现现象不同步于操作的情况。因此对于唤醒操作进行一定延时:
图3.3_1
3.4 换屏后条纹闪屏
如遇到这问题很需要读者好好观察下复现的现象,笔者观察到是时不时会有竖行的白线闪出来,根据以上的几次调试经验,反复分析,判断出是跟刷屏的帧率有关,帧率偏高导致刷屏时上一时刻与下一时刻出现撞帧现象。因此将如下图所示的时钟在已修改的基础上再次改小即可,改小到合适为止。
图3.3_1
4.其他闪屏问题
4.1概率性出现唤醒/重启时闪屏的现象
率性出现唤醒/重启时闪屏的现象,有可能是因为液晶极化引起
请按如下方法进行就该尝试
1. mediatek/kernel/drivers/video/mtkfb.c中,修改下接口mtkfb_shutdown尝试下
static void mtkfb_shutdown(struct device *pdev) {
    MTKFB_LOG("[FB Driver] mtkfb_shutdown()\n");
    mt65xx_leds_brightness_set(MT65XX_LED_TYPE_LCD, LED_OFF);
    if (!lcd_fps)
        msleep(30);
    else
        msleep(2*100000/lcd_fps); // Delay 2 frames.
   
      if(is_early_suspended){
            MTKFB_LOG("mtkfb has been power off\n");
            return;
      }
 
    if (down_interruptible(&sem_early_suspend)) {
        printk("[FB Driver] can't get semaphore in mtkfb_shutdown()\n");
        return;
    }
      sem_early_suspend_cnt--;
 
      is_early_suspended = TRUE;
/*=================add============================*/
    DISP_PrepareSuspend();
    // Wait for disp finished.
    if (wait_event_interruptible_timeout(disp_done_wq, !disp_running, HZ/10) == 0)
    {
        printk("[FB Driver] Wait disp finished timeout in early_suspend\n");
    }
/*=================add============================*/
      DISP_CHECK_RET(DISP_PanelEnable(FALSE));
     DISP_CHECK_RET(DISP_PowerEnable(FALSE));
     
      DISP_CHECK_RET(DISP_PauseVsync(TRUE));
      sem_early_suspend_cnt++;
    up(&sem_early_suspend);
 
    MTKFB_LOG("[FB Driver] leave mtkfb_shutdown\n"); }
 
2. path: allps\mediatek\platform\mt6582\kernel\drivers\video\disp_hal.c
interface: disphal_panel\enable
 
else分支中有如下代码
if (lcm_parms->type == LCM_TYPE_DSI && lcm_params->dsi.mode == CMD_MODE)
    DSI_CHECK_RET(DSI_WaitForNotBusy());
if(cm_parms->type == LCM_TYPE_DSI && lcm_params->dsi.mode != CMD_MOD) {
    DPI_CHECK_RET(DPI_DisableClk());
 
    DSI_Reset();//please add this function call
    DSI_clk_HS_mode(0);
   DSI_SetMode(CMD_MODE);
 
}
......
4.2、DSI Video Mode的屏,在Sleep Out时发现屏概率性闪烁
具体修改如下:
A、disp_drv.c 增加函数定义, disp_drv.h 中增加声明 (kernel 文件 )
原有的DISP_UpdateScreen函数由于在suspend前不满足条件,无法执行到disp_drv->update_screen,因此无法真正update一帧数据。
图4.2_1
图4.2_2
图4.2_3
B、mtkfb.c 增加如下函数定义,用于实现刷白屏和黑屏
图4.2_4
C、修改mtkfb_early_suspend函数,suspend时刷白屏
图4.2_5
图4.2_6
D、修改mtkfb_late_resume,唤醒时先刷黑屏
图4.2_7
5.结论
从以上论述不难总结出,关于屏幕显示方面的各种闪烁问题所涉及的方面比较多,除了基本地掌握通用的技巧意外,更多的是要掌握如何查找和修改一些客制化的参数和代码。
至此,笔者建议刚从事驱动工作的读者,不仅要读得懂代码的信息还要懂得如何找得到自己所需要查看的代码,甚至有时需要去查看上层软件的代码。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?注册
×
|