diff mbox series

[v3,03/17] video: dw_hdmi: Extend the HPD detection

Message ID 20240117075154.58747-4-jagan@amarulasolutions.com
State Accepted
Commit 5eacb920710364d4c9134886725c3879d89972b1
Delegated to: Anatolij Gustschin
Headers show
Series video: dw_hdmi: Support Vendor PHY | expand

Commit Message

Jagan Teki Jan. 17, 2024, 7:51 a.m. UTC
From: Jagan Teki <jagan@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 <jagan@edgeble.ai>
---
Changes for v3, 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(-)

Comments

Neil Armstrong Jan. 17, 2024, 8:59 a.m. UTC | #1
On 17/01/2024 08:51, Jagan Teki wrote:
> From: Jagan Teki <jagan@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 <jagan@edgeble.ai>
> ---
> Changes for v3, 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 4914ba6146..3a3b9b7a21 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 d5b5a529d2..16f6303513 100644
> --- a/drivers/video/rockchip/rk_hdmi.c
> +++ b/drivers/video/rockchip/rk_hdmi.c
> @@ -114,11 +114,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 986e69d66b..a5e8d39e98 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 17bdd2dbf9..ba2ce5ea7f 100644
> --- a/include/dw_hdmi.h
> +++ b/include/dw_hdmi.h
> @@ -562,5 +562,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

Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org>
diff mbox series

Patch

diff --git a/drivers/video/dw_hdmi.c b/drivers/video/dw_hdmi.c
index 4914ba6146..3a3b9b7a21 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 d5b5a529d2..16f6303513 100644
--- a/drivers/video/rockchip/rk_hdmi.c
+++ b/drivers/video/rockchip/rk_hdmi.c
@@ -114,11 +114,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 986e69d66b..a5e8d39e98 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 17bdd2dbf9..ba2ce5ea7f 100644
--- a/include/dw_hdmi.h
+++ b/include/dw_hdmi.h
@@ -562,5 +562,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