MLK-19957-1: ISI: clean isi status before enable interrupt
authorGuoniu.Zhou <guoniu.zhou@nxp.com>
Wed, 17 Oct 2018 02:16:08 +0000 (10:16 +0800)
committerLeonard Crestez <leonard.crestez@nxp.com>
Wed, 17 Apr 2019 23:51:34 +0000 (02:51 +0300)
Because ISI can't restore to default state after software
reset, the status value of exit will be maintained. If not
cleared, ISI will triggle fake interrupt after enableing irq,
but there is not ready for data.

Signed-off-by: Guoniu.Zhou <guoniu.zhou@nxp.com>
(cherry picked from commit 932af3df1745f5afb0b9433d3355b2e24b177f4e)

drivers/media/platform/imx8/mxc-isi-hw.c

index 7e117a9..a1e400c 100644 (file)
@@ -645,6 +645,14 @@ void mxc_isi_channel_config(struct mxc_isi_dev *mxc_isi)
        writel(val, mxc_isi->regs + CHNL_CTRL);
 }
 
+void mxc_isi_clean_registers(struct mxc_isi_dev *mxc_isi)
+{
+       u32 status;
+
+       status = mxc_isi_get_irq_status(mxc_isi);
+       mxc_isi_clean_irq_status(mxc_isi, status);
+}
+
 void mxc_isi_channel_enable(struct mxc_isi_dev *mxc_isi)
 {
        u32 val;
@@ -654,7 +662,7 @@ void mxc_isi_channel_enable(struct mxc_isi_dev *mxc_isi)
        val |= 0xff << CHNL_CTRL_BLANK_PXL_OFFSET;
        writel(val, mxc_isi->regs + CHNL_CTRL);
 
-       mxc_isi_clean_irq_status(mxc_isi, 0);
+       mxc_isi_clean_registers(mxc_isi);
        mxc_isi_enable_irq(mxc_isi);
        msleep(300);
        dump_isi_regs(mxc_isi);
@@ -764,7 +772,7 @@ void mxc_isi_m2m_channel_enable(struct mxc_isi_dev *mxc_isi)
                        CHNL_CTRL_CHNL_EN_ENABLE << CHNL_CTRL_CHNL_EN_OFFSET);
        writel(reg, mxc_isi->regs + CHNL_CTRL);
 
-       mxc_isi_clean_irq_status(mxc_isi, 0);
+       mxc_isi_clean_registers(mxc_isi);
        mxc_isi_enable_irq(mxc_isi);
        mxc_isi_m2m_start_read(mxc_isi);