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

本文介绍了一种解决MT6589 DSI屏在加入ESD机制后出现的每隔2秒闪屏现象的方法。通过分析SSD2075 IC内电压DVDDH与MIPI clock的关系,提出了解决方案,即在读取寄存器时保持MIPI clock处于高速状态。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

[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;
}

 

为了确保液晶显示模块(LCM)在遭遇静电放电(ESD)时能够得到有效的保护,MTK平台采用了系列的防护措施,这些措施主要围绕DSI命令模式和CMD驱动功能来设计。在MTK的解决方案中,DSI负责与处理器之间的高速数据传输,而CMD则执行对LCM的控制命令。具体的ESD保护措施包括以下几点: 参考资源链接:[MTK ESD防护方案:驱动功能与软件流程详解](https://wenku.youkuaiyun.com/doc/7gh2txwymp) 首先,需要了解ESD检测机制MTK平台的LCM控制器(LCDC)会在特定的周期内检测LCM的工作状态,这通常通过lcm_esd_check函数来实现。此函数会读取LCM内部寄存器的值来判断是否存在ESD异常。如果发现异常,系统会通过lcm_esd_recover函数来执行LCM的重新初始化,以确保模块能够从静电放电中恢复。 其次,DSI命令模式是ESD防护中的关键。DSI命令模式允许处理器通过DSI接口向LCM发送特定的控制命令,这些命令不仅包括普通的显示数据传输,还包括在ESD事件发生时能够触发LCM恢复状态的特殊命令。 接着,CMD驱动与DSI命令模式的交互,是通过LCDC来实现的。在LCM初始化过程中,CMD驱动会设置好LCM的初始状态,并监控其运行,确保LCM能持续正常工作。当LCDC检测到ESD事件时,CMD驱动会配合DSI命令模式,调用预设的恢复命令,将LCM引导回安全状态。 最后,软件流程的管理也是不可忽视的。MTK平台的ESD防护方案通常会包含个在系统内核中定时运行的线程,负责周期性地检查LCM状态。旦检测到ESD异常,这个线程会立即启动ESD恢复过程,确保LCM的稳定运行和显示的抗静电性能。 综上所述,MTK平台通过结合DSI命令模式与CMD驱动,配合软件流程的定时检查机制,为LCM提供了套全面的ESD防护解决方案。这些措施确保了在静电放电事件发生时,LCM能迅速反应并恢复正常工作,从而保护整个显示系统的安全。对于想要深入了解MTK ESD解决方案的读者,推荐参考《MTK ESD防护方案:驱动功能与软件流程详解》,此书详细讲解了这些技术的实现细节,并提供了实用的案例和解决方案。 参考资源链接:[MTK ESD防护方案:驱动功能与软件流程详解](https://wenku.youkuaiyun.com/doc/7gh2txwymp)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值