rk3368 lcdc: inter bak register will lead to clear
authorhjc <hjc@rock-chips.com>
Fri, 27 Feb 2015 07:39:30 +0000 (15:39 +0800)
committerhjc <hjc@rock-chips.com>
Fri, 27 Feb 2015 07:43:09 +0000 (15:43 +0800)
    other inter status, so when we clear inter inter
    status we should set clear register to zero.

Signed-off-by: hjc <hjc@rock-chips.com>
drivers/video/rockchip/lcdc/rk3368_lcdc.c [changed mode: 0644->0755]
drivers/video/rockchip/lcdc/rk3368_lcdc.h [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 5815149..69e8744
@@ -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
old mode 100644 (file)
new mode 100755 (executable)
index 2561961..9a14b89
@@ -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)