我是靠谱客的博主 整齐小土豆,最近开发中收集的这篇文章主要介绍[MTK] MT6589 DSI Video Mode的屏,加入ESD机制后每隔2S会闪一下屏(情形一),觉得挺不错的,现在分享给大家,希望可以做个参考。
概述
[DESCRIPTION]
MT6589 DSI Video Mode的屏,加入ESD机制后每隔2S会闪一下屏,但是把MIPI clock改为
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/m
ediat
ek/k
ern
el/driv
ers/vid
eo/disp_drv.c中
(1) 添加下面一行定义
static PDSI_R EGS const DSI_R EG = (PDSI_R EGS)(DSI_BAS E); //add by mtk
(1) 添加下面一行定义
static PDSI_R EGS const DSI_R EG = (PDSI_R EGS)(DSI_BAS E); //add by mtk
(2) 在DISP_ ESDCh eck()函数中添加几行,红色标记
BOOL DISP_
EsdCh
eck(void)
{
BOOL r esult = FALS E;
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_cont ext();
MMProfil eLog Ex(MTKFB_MMP_ Ev ents. EsdCh eck, MMProfil eFlagPuls e, 0x10, 0);
if(lcm_drv-> esd_ch eck == NULL && disp_drv-> esd_ch eck == NULL)
{
r eturn FALS E;
}
if (down_int erruptibl e(&s em_updat e_scr e en)) {
printk(" ERROR: Can't g et s em_updat e_scr e en in DISP_ EsdCh eck()n");
r eturn FALS E;
}
MMProfil eLog Ex(MTKFB_MMP_ Ev ents. EsdCh eck, MMProfil eFlagPuls e, 0x11, 0);
if(is_lcm_in_susp end_mod e)
{
up(&s em_updat e_scr e en);
r eturn FALS E;
}
if(disp_drv-> esd_ch eck)
r esult |= disp_drv-> esd_ch eck();
MMProfil eLog Ex(MTKFB_MMP_ Ev ents. EsdCh eck, MMProfil eFlagPuls e, 0x12, 0);
#ifnd ef MT65XX_N EW_DISP
LCD_CH ECK_R ET(LCD_WaitForNotBusy());
if(lcm_params->typ e==LCM_TYP E_DSI)
DSI_CH ECK_R ET(DSI_WaitForNotBusy());
if(lcm_drv-> esd_ch eck)
{
mut ex_lock(&LcmCmdMut ex);
r esult |= lcm_drv-> esd_ch eck();
mut ex_unlock(&LcmCmdMut ex);
}
# endif
up(&s em_updat e_scr e en);
tmp_reg.HSTX_CKLP_EN = 1; //add by mtk
r eturn r esult;
}
{
BOOL r esult = FALS E;
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_cont ext();
MMProfil eLog Ex(MTKFB_MMP_ Ev ents. EsdCh eck, MMProfil eFlagPuls e, 0x10, 0);
if(lcm_drv-> esd_ch eck == NULL && disp_drv-> esd_ch eck == NULL)
{
r eturn FALS E;
}
if (down_int erruptibl e(&s em_updat e_scr e en)) {
printk(" ERROR: Can't g et s em_updat e_scr e en in DISP_ EsdCh eck()n");
r eturn FALS E;
}
MMProfil eLog Ex(MTKFB_MMP_ Ev ents. EsdCh eck, MMProfil eFlagPuls e, 0x11, 0);
if(is_lcm_in_susp end_mod e)
{
up(&s em_updat e_scr e en);
r eturn FALS E;
}
if(disp_drv-> esd_ch eck)
r esult |= disp_drv-> esd_ch eck();
MMProfil eLog Ex(MTKFB_MMP_ Ev ents. EsdCh eck, MMProfil eFlagPuls e, 0x12, 0);
#ifnd ef MT65XX_N EW_DISP
LCD_CH ECK_R ET(LCD_WaitForNotBusy());
if(lcm_params->typ e==LCM_TYP E_DSI)
DSI_CH ECK_R ET(DSI_WaitForNotBusy());
if(lcm_drv-> esd_ch eck)
{
mut ex_lock(&LcmCmdMut ex);
r esult |= lcm_drv-> esd_ch eck();
mut ex_unlock(&LcmCmdMut ex);
}
# endif
up(&s em_updat e_scr e en);
tmp_reg.HSTX_CKLP_EN = 1; //add by mtk
r eturn r esult;
}
最后
以上就是整齐小土豆为你收集整理的[MTK] MT6589 DSI Video Mode的屏,加入ESD机制后每隔2S会闪一下屏(情形一)的全部内容,希望文章能够帮你解决[MTK] MT6589 DSI Video Mode的屏,加入ESD机制后每隔2S会闪一下屏(情形一)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复