Blob Blame History Raw
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Date: Fri, 11 Aug 2017 16:49:06 +0300
Subject: drm: omapdrm: hdmi: Configure the PHY from the HDMI core version
Git-commit: 37ea27b97b6a5ef073e71169dbc95d89f4daa288
Patch-mainline: v4.14-rc1
References: FATE#326289 FATE#326079 FATE#326049 FATE#322398 FATE#326166

The OMAP4 and OMAP5 HDMI PHYs have different properties that require
specific handling in the HDMI PHY driver. This needs knowledge of the
PHY version, which is currently inferred from the DSS version. As part
of the effort to remove usage of the DSS version, use the HDMI
controller version instead.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Acked-by: Petr Tesarik <ptesarik@suse.com>
---
 drivers/gpu/drm/omapdrm/dss/hdmi.h     |    3 ++-
 drivers/gpu/drm/omapdrm/dss/hdmi4.c    |    2 +-
 drivers/gpu/drm/omapdrm/dss/hdmi5.c    |    2 +-
 drivers/gpu/drm/omapdrm/dss/hdmi_phy.c |   23 +++++++----------------
 4 files changed, 11 insertions(+), 19 deletions(-)

--- a/drivers/gpu/drm/omapdrm/dss/hdmi.h
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi.h
@@ -327,7 +327,8 @@ void hdmi_pll_uninit(struct hdmi_pll_dat
 int hdmi_phy_configure(struct hdmi_phy_data *phy, unsigned long hfbitclk,
 	unsigned long lfbitclk);
 void hdmi_phy_dump(struct hdmi_phy_data *phy, struct seq_file *s);
-int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy);
+int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy,
+		  unsigned int version);
 int hdmi_phy_parse_lanes(struct hdmi_phy_data *phy, const u32 *lanes);
 
 /* HDMI common funcs */
--- a/drivers/gpu/drm/omapdrm/dss/hdmi4.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi4.c
@@ -707,7 +707,7 @@ static int hdmi4_bind(struct device *dev
 	if (r)
 		return r;
 
-	r = hdmi_phy_init(pdev, &hdmi.phy);
+	r = hdmi_phy_init(pdev, &hdmi.phy, 4);
 	if (r)
 		goto err;
 
--- a/drivers/gpu/drm/omapdrm/dss/hdmi5.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi5.c
@@ -739,7 +739,7 @@ static int hdmi5_bind(struct device *dev
 	if (r)
 		return r;
 
-	r = hdmi_phy_init(pdev, &hdmi.phy);
+	r = hdmi_phy_init(pdev, &hdmi.phy, 5);
 	if (r)
 		goto err;
 
--- a/drivers/gpu/drm/omapdrm/dss/hdmi_phy.c
+++ b/drivers/gpu/drm/omapdrm/dss/hdmi_phy.c
@@ -183,7 +183,8 @@ static const struct hdmi_phy_features om
 };
 
 static int hdmi_phy_init_features(struct platform_device *pdev,
-				  struct hdmi_phy_data *phy)
+				  struct hdmi_phy_data *phy,
+				  unsigned int version)
 {
 	struct hdmi_phy_features *dst;
 	const struct hdmi_phy_features *src;
@@ -194,21 +195,10 @@ static int hdmi_phy_init_features(struct
 		return -ENOMEM;
 	}
 
-	switch (omapdss_get_version()) {
-	case OMAPDSS_VER_OMAP4430_ES1:
-	case OMAPDSS_VER_OMAP4430_ES2:
-	case OMAPDSS_VER_OMAP4:
+	if (version == 4)
 		src = &omap44xx_phy_feats;
-		break;
-
-	case OMAPDSS_VER_OMAP5:
-	case OMAPDSS_VER_DRA7xx:
+	else
 		src = &omap54xx_phy_feats;
-		break;
-
-	default:
-		return -ENODEV;
-	}
 
 	memcpy(dst, src, sizeof(*dst));
 	phy->features = dst;
@@ -216,12 +206,13 @@ static int hdmi_phy_init_features(struct
 	return 0;
 }
 
-int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy)
+int hdmi_phy_init(struct platform_device *pdev, struct hdmi_phy_data *phy,
+		  unsigned int version)
 {
 	int r;
 	struct resource *res;
 
-	r = hdmi_phy_init_features(pdev, phy);
+	r = hdmi_phy_init_features(pdev, phy, version);
 	if (r)
 		return r;