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 |
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 --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