From a20f2b7e59c60285e04bcb01797c53b852eebd94 Mon Sep 17 00:00:00 2001 From: hjc Date: Fri, 27 Feb 2015 15:39:30 +0800 Subject: [PATCH] rk3368 lcdc: inter bak register will lead to clear other inter status, so when we clear inter inter status we should set clear register to zero. Signed-off-by: hjc --- drivers/video/rockchip/lcdc/rk3368_lcdc.c | 15 +++++++++------ drivers/video/rockchip/lcdc/rk3368_lcdc.h | 2 ++ 2 files changed, 11 insertions(+), 6 deletions(-) mode change 100644 => 100755 drivers/video/rockchip/lcdc/rk3368_lcdc.c mode change 100644 => 100755 drivers/video/rockchip/lcdc/rk3368_lcdc.h diff --git a/drivers/video/rockchip/lcdc/rk3368_lcdc.c b/drivers/video/rockchip/lcdc/rk3368_lcdc.c old mode 100644 new mode 100755 index 58151492177f..69e87441035a --- a/drivers/video/rockchip/lcdc/rk3368_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3368_lcdc.c @@ -1568,9 +1568,10 @@ static int rk3368_config_timing(struct rk_lcdc_driver *dev_drv) val = v_HWC_INTERLACE_READ(1); lcdc_msk_reg(lcdc_dev, HWC_CTRL0, mask, val); - mask = m_DSP_LINE_FLAG0_NUM; + mask = m_DSP_LINE_FLAG0_NUM | m_DSP_LINE_FLAG1_NUM; val = - v_DSP_LINE_FLAG0_NUM(vsync_len + upper_margin + y_res / 2); + v_DSP_LINE_FLAG0_NUM(vsync_len + upper_margin + y_res / 2) | + v_DSP_LINE_FLAG1_NUM(vsync_len + upper_margin + y_res / 2); lcdc_msk_reg(lcdc_dev, LINE_FLAG, mask, val); } else { mask = m_DSP_VS_PW | m_DSP_VTOTAL; @@ -1614,8 +1615,9 @@ static int rk3368_config_timing(struct rk_lcdc_driver *dev_drv) val = v_HWC_INTERLACE_READ(0); lcdc_msk_reg(lcdc_dev, HWC_CTRL0, mask, val); - mask = m_DSP_LINE_FLAG0_NUM; - val = v_DSP_LINE_FLAG0_NUM(vsync_len + upper_margin + y_res); + mask = m_DSP_LINE_FLAG0_NUM | m_DSP_LINE_FLAG1_NUM; + val = v_DSP_LINE_FLAG0_NUM(vsync_len + upper_margin + y_res) | + v_DSP_LINE_FLAG1_NUM(vsync_len + upper_margin + y_res); lcdc_msk_reg(lcdc_dev, LINE_FLAG, mask, val); } rk3368_lcdc_post_cfg(dev_drv); @@ -1977,9 +1979,10 @@ static int rk3368_lcdc_enable_irq(struct rk_lcdc_driver *dev_drv) v_LINE_FLAG0_INTR_CLR(1) | v_LINE_FLAG1_INTR_CLR(1); lcdc_msk_reg(lcdc_dev, INTR_CLEAR, mask, val); - mask = m_FS_INTR_EN | m_LINE_FLAG0_INTR_EN | m_BUS_ERROR_INTR_EN; + mask = m_FS_INTR_EN | m_LINE_FLAG0_INTR_EN | + m_BUS_ERROR_INTR_EN | m_LINE_FLAG1_INTR_EN; val = v_FS_INTR_EN(1) | v_LINE_FLAG0_INTR_EN(1) | - v_BUS_ERROR_INTR_EN(1); + v_BUS_ERROR_INTR_EN(1) | v_LINE_FLAG1_INTR_EN(0); lcdc_msk_reg(lcdc_dev, INTR_EN, mask, val); #ifdef LCDC_IRQ_EMPTY_DEBUG diff --git a/drivers/video/rockchip/lcdc/rk3368_lcdc.h b/drivers/video/rockchip/lcdc/rk3368_lcdc.h old mode 100644 new mode 100755 index 2561961c40c1..9a14b893c542 --- a/drivers/video/rockchip/lcdc/rk3368_lcdc.h +++ b/drivers/video/rockchip/lcdc/rk3368_lcdc.h @@ -1863,6 +1863,8 @@ static inline void lcdc_msk_reg(struct lcdc_device *lcdc_dev, (*_pv) &= (~msk); (*_pv) |= v; writel_relaxed(*_pv, lcdc_dev->regs + offset); + if (offset == INTR_CLEAR) + (*_pv) &= 0; } static inline void lcdc_cfg_done(struct lcdc_device *lcdc_dev) -- 2.34.1