From: Jagan Teki <ja...@edgeble.ai>

HPD detection on some DW HDMIdesigned SoC's would need to read and
setup the HPD status explicitly.

So, extend the HPD detection code by adding the dw_hdmi_detect_hpd
function and move the default detection code caller there.

The new read and setup hdp will integrate the same function in
later patches.

Signed-off-by: Jagan Teki <ja...@edgeble.ai>
---
Changes for v2:
- none

 drivers/video/dw_hdmi.c             | 13 +++++++++++++
 drivers/video/rockchip/rk_hdmi.c    |  8 +++-----
 drivers/video/sunxi/sunxi_dw_hdmi.c |  8 +++-----
 include/dw_hdmi.h                   |  1 +
 4 files changed, 20 insertions(+), 10 deletions(-)

diff --git a/drivers/video/dw_hdmi.c b/drivers/video/dw_hdmi.c
index ea12a09407..0a597206f0 100644
--- a/drivers/video/dw_hdmi.c
+++ b/drivers/video/dw_hdmi.c
@@ -936,6 +936,19 @@ int dw_hdmi_phy_wait_for_hpd(struct dw_hdmi *hdmi)
        return -1;
 }
 
+int dw_hdmi_detect_hpd(struct dw_hdmi *hdmi)
+{
+       int ret;
+
+       ret = dw_hdmi_phy_wait_for_hpd(hdmi);
+       if (ret < 0) {
+               debug("hdmi can not get hpd signal\n");
+               return -ENODEV;
+       }
+
+       return 0;
+}
+
 void dw_hdmi_phy_init(struct dw_hdmi *hdmi)
 {
        /* enable phy i2cm done irq */
diff --git a/drivers/video/rockchip/rk_hdmi.c b/drivers/video/rockchip/rk_hdmi.c
index e34f532cd6..8a65f2440e 100644
--- a/drivers/video/rockchip/rk_hdmi.c
+++ b/drivers/video/rockchip/rk_hdmi.c
@@ -115,11 +115,9 @@ int rk_hdmi_probe(struct udevice *dev)
        dw_hdmi_init(hdmi);
        dw_hdmi_phy_init(hdmi);
 
-       ret = dw_hdmi_phy_wait_for_hpd(hdmi);
-       if (ret < 0) {
-               debug("hdmi can not get hpd signal\n");
-               return -1;
-       }
+       ret = dw_hdmi_detect_hpd(hdmi);
+       if (ret < 0)
+               return ret;
 
        return 0;
 }
diff --git a/drivers/video/sunxi/sunxi_dw_hdmi.c 
b/drivers/video/sunxi/sunxi_dw_hdmi.c
index 4b67a1614e..513276d812 100644
--- a/drivers/video/sunxi/sunxi_dw_hdmi.c
+++ b/drivers/video/sunxi/sunxi_dw_hdmi.c
@@ -358,11 +358,9 @@ static int sunxi_dw_hdmi_probe(struct udevice *dev)
 
        sunxi_dw_hdmi_phy_init(&priv->hdmi);
 
-       ret = dw_hdmi_phy_wait_for_hpd(&priv->hdmi);
-       if (ret < 0) {
-               debug("hdmi can not get hpd signal\n");
-               return -1;
-       }
+       ret = dw_hdmi_detect_hpd(&priv->hdmi);
+       if (ret < 0)
+               return ret;
 
        dw_hdmi_init(&priv->hdmi);
 
diff --git a/include/dw_hdmi.h b/include/dw_hdmi.h
index 4ad8b39f84..756560e092 100644
--- a/include/dw_hdmi.h
+++ b/include/dw_hdmi.h
@@ -568,5 +568,6 @@ void dw_hdmi_phy_init(struct dw_hdmi *hdmi);
 int dw_hdmi_enable(struct dw_hdmi *hdmi, const struct display_timing *edid);
 int dw_hdmi_read_edid(struct dw_hdmi *hdmi, u8 *buf, int buf_size);
 void dw_hdmi_init(struct dw_hdmi *hdmi);
+int dw_hdmi_detect_hpd(struct dw_hdmi *hdmi);
 
 #endif
-- 
2.25.1

Reply via email to