[MTK] MT6589 DSI Video Mode的屏,加入ESD机制后每隔2S会闪一下屏(情形一)

来源:互联网 发布:小猪cms最新源码下载 编辑:程序博客网 时间:2024/05/22 15:09

 

[DESCRIPTION]
         MT6589 DSI Video Mode的屏,加入ESD机制后每隔2S会闪一下屏,但是把MIPI clock改为
   continuous clock则不会闪屏。 则属于这种情况,可以按照以下方法进行修改。
 
        以SSD2075为例:
  Root cause:  SSD2075 IC内的电压DVDDH由MIPI clock generate形成。
   MIPI clock一旦停掉,DVDDH就会drop,理论上就会有闪屏。 但是如果MIPI clock停掉的时间较短
   的话,这个闪屏是不会被人眼所察觉到。
 
  

[SOLUTION]
 解决思路:当读寄存器的时候,让MIPI clock保持HS 状态。
读完之后再把MIPI clock切到LP的bit 位置位 

具体修改方法如下:
  在alps/mediatek/kernel/drivers/video/disp_drv.c中
 (1) 添加下面一行定义
   static PDSI_REGS const DSI_REG = (PDSI_REGS)(DSI_BASE); //add by mtk

 (2) 在DISP_ESDCheck()函数中添加几行,红色标记
  BOOL DISP_EsdCheck(void)
{
    BOOL result = FALSE;
         
    DSI_TXRX_CTRL_REG tmp_reg;               //add by mtk
    tmp_reg=DSI_REG->DSI_TXRX_CTRL;         //add by mtk
     tmp_reg.HSTX_CKLP_EN = 0;                //add by mtk
     DSI_clk_HS_mode(1);                      //add by mtk
         
    disp_drv_init_context();
    MMProfileLogEx(MTKFB_MMP_Events.EsdCheck, MMProfileFlagPulse, 0x10, 0);
    if(lcm_drv->esd_check == NULL && disp_drv->esd_check == NULL)
    {
        return FALSE;
    }
    if (down_interruptible(&sem_update_screen)) {
        printk("ERROR: Can't get sem_update_screen in DISP_EsdCheck()\n");
        return FALSE;
    }
    MMProfileLogEx(MTKFB_MMP_Events.EsdCheck, MMProfileFlagPulse, 0x11, 0);
    if(is_lcm_in_suspend_mode)
    {
        up(&sem_update_screen);
        return FALSE;
    }
         if(disp_drv->esd_check)
                   result |= disp_drv->esd_check();
         
         
    MMProfileLogEx(MTKFB_MMP_Events.EsdCheck, MMProfileFlagPulse, 0x12, 0);
#ifndef MT65XX_NEW_DISP
    LCD_CHECK_RET(LCD_WaitForNotBusy());
    if(lcm_params->type==LCM_TYPE_DSI)
        DSI_CHECK_RET(DSI_WaitForNotBusy());
         if(lcm_drv->esd_check)
    {
        mutex_lock(&LcmCmdMutex);
                   result |= lcm_drv->esd_check();
        mutex_unlock(&LcmCmdMutex);
    }
#endif
    up(&sem_update_screen);
      tmp_reg.HSTX_CKLP_EN = 1;            //add by mtk
    return result;
}

 

原创粉丝点击