summaryrefslogtreecommitdiff
path: root/drivers/media/platform
diff options
context:
space:
mode:
authorGuoniu.Zhou <guoniu.zhou@nxp.com>2018-10-17 10:16:08 +0800
committerGuoniu.Zhou <guoniu.zhou@nxp.com>2018-11-02 19:02:18 +0800
commitd1cec5b38cc1991836c5000f7987b3ce2ffe7975 (patch)
tree1a620bbced416a0aeb55c7a93edc4254adf1241f /drivers/media/platform
parent3b41f3a86a130082ee7799353c03c21aa09ec11d (diff)
MLK-19957-1: ISI: clean isi status before enable interrupt
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)
Diffstat (limited to 'drivers/media/platform')
-rw-r--r--drivers/media/platform/imx8/mxc-isi-core.c7
-rw-r--r--drivers/media/platform/imx8/mxc-isi-hw.c12
-rw-r--r--drivers/media/platform/imx8/mxc-isi-hw.h1
3 files changed, 11 insertions, 9 deletions
diff --git a/drivers/media/platform/imx8/mxc-isi-core.c b/drivers/media/platform/imx8/mxc-isi-core.c
index e492ad51b125..9eee13c9554a 100644
--- a/drivers/media/platform/imx8/mxc-isi-core.c
+++ b/drivers/media/platform/imx8/mxc-isi-core.c
@@ -113,13 +113,6 @@ static int mxc_isi_parse_dt(struct mxc_isi_dev *mxc_isi)
return 0;
}
-static 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);
-}
static int mxc_isi_probe(struct platform_device *pdev)
{
diff --git a/drivers/media/platform/imx8/mxc-isi-hw.c b/drivers/media/platform/imx8/mxc-isi-hw.c
index f773141234fe..0c592a64d5a9 100644
--- a/drivers/media/platform/imx8/mxc-isi-hw.c
+++ b/drivers/media/platform/imx8/mxc-isi-hw.c
@@ -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);
diff --git a/drivers/media/platform/imx8/mxc-isi-hw.h b/drivers/media/platform/imx8/mxc-isi-hw.h
index 4c2d0135df11..30010cbc5345 100644
--- a/drivers/media/platform/imx8/mxc-isi-hw.h
+++ b/drivers/media/platform/imx8/mxc-isi-hw.h
@@ -495,6 +495,7 @@ void mxc_isi_m2m_start_read(struct mxc_isi_dev *mxc_isi);
void mxc_isi_clean_irq_status(struct mxc_isi_dev *mxc_isi, u32 val);
u32 mxc_isi_get_irq_status(struct mxc_isi_dev *mxc_isi);
+void mxc_isi_clean_registers(struct mxc_isi_dev *mxc_isi);
void mxc_isi_enable_irq(struct mxc_isi_dev *mxc_isi);
void mxc_isi_disable_irq(struct mxc_isi_dev *mxc_isi);
void mxc_isi_channel_set_m2m_out_addr(struct mxc_isi_dev *mxc_isi,