From: hjc Date: Fri, 27 Feb 2015 07:39:30 +0000 (+0800) Subject: rk3368 lcdc: inter bak register will lead to clear X-Git-Tag: firefly_0821_release~4158^2~439 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a20f2b7e59c60285e04bcb01797c53b852eebd94;p=firefly-linux-kernel-4.4.55.git 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 --- 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)