From 110ecf64e7178a40891f035b148c0acdbc2ca6e9 Mon Sep 17 00:00:00 2001 From: hjc Date: Wed, 8 Oct 2014 14:20:35 +0800 Subject: [PATCH] rk3036 hdmi: fix edid read faile lead to error --- .../rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c b/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c index df65daa3c4cb..4940df820284 100755 --- a/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c +++ b/drivers/video/rockchip/hdmi/chips/rk3036/rk3036_hdmi_hw.c @@ -202,10 +202,6 @@ int rk3036_hdmi_read_edid(struct hdmi *hdmi_drv, int block, u8 *buf) #endif } - /* clear EDID interrupt reg */ - hdmi_writel(hdmi_dev, INTERRUPT_STATUS1, - m_INT_EDID_READY); - if ((checksum & 0xff) == 0) { ret = 0; hdmi_dbg(hdmi_drv->dev, @@ -216,6 +212,10 @@ int rk3036_hdmi_read_edid(struct hdmi *hdmi_drv, int block, u8 *buf) } /*close edid irq*/ hdmi_writel(hdmi_dev, INTERRUPT_MASK1, 0); + /* clear EDID interrupt reg */ + hdmi_writel(hdmi_dev, INTERRUPT_STATUS1, + m_INT_EDID_READY); + enable_irq(hdmi_drv->irq); return ret; @@ -763,6 +763,12 @@ void rk3036_hdmi_irq(struct hdmi *hdmi_drv) struct rk_hdmi_device *hdmi_dev = container_of(hdmi_drv, struct rk_hdmi_device, driver); + hdmi_readl(hdmi_dev, INTERRUPT_STATUS1, &interrupt); + if(interrupt) { + hdmi_writel(hdmi_dev, INTERRUPT_STATUS1, interrupt); + dev_info(hdmi_drv->dev, "Clear edid irq.\n"); + } + hdmi_readl(hdmi_dev, HDMI_STATUS, &interrupt); if(interrupt) { hdmi_writel(hdmi_dev, HDMI_STATUS, interrupt); -- 2.34.1