Răsfoiți Sursa

drm/bridge: cdns-mhdp: enable/disable VIF clk/rst

Currently the driver enables VIF stream 0 clk and deasserts reset at
probe time.

Improve the code to enable VIF stream 0 at bridge_enable, and disable it
at bridge disable.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Tomi Valkeinen 6 ani în urmă
părinte
comite
ef885b19f8
1 a modificat fișierele cu 12 adăugiri și 6 ștergeri
  1. 12 6
      drivers/gpu/drm/bridge/cdns-mhdp.c

+ 12 - 6
drivers/gpu/drm/bridge/cdns-mhdp.c

@@ -738,6 +738,7 @@ err:
 static void cdns_mhdp_disable(struct drm_bridge *bridge)
 {
 	struct cdns_mhdp_device *mhdp = bridge_to_mhdp(bridge);
+	u32 resp;
 
 	dev_dbg(mhdp->dev, "bridge disable\n");
 
@@ -748,6 +749,11 @@ static void cdns_mhdp_disable(struct drm_bridge *bridge)
 	if (mhdp->plugged)
 		drm_dp_link_power_down(&mhdp->aux, &mhdp->link);
 
+	/* Disable VIF clock for stream 0 */
+	cdns_mhdp_reg_read(mhdp, CDNS_DPTX_CAR, &resp);
+	cdns_mhdp_reg_write(mhdp, CDNS_DPTX_CAR,
+			    resp & ~(CDNS_VIF_CLK_EN | CDNS_VIF_CLK_RSTN));
+
 	cdns_mhdp_j721e_disable(mhdp);
 }
 
@@ -1093,11 +1099,17 @@ void cdns_mhdp_enable(struct drm_bridge *bridge)
 {
 	struct cdns_mhdp_bridge *mhdp_bridge = to_mhdp_bridge(bridge);
 	struct cdns_mhdp_device *mhdp = mhdp_bridge->mhdp;
+	u32 resp;
 
 	dev_dbg(mhdp->dev, "bridge enable\n");
 
 	cdns_mhdp_j721e_enable(mhdp);
 
+	/* Enable VIF clock for stream 0 */
+	cdns_mhdp_reg_read(mhdp, CDNS_DPTX_CAR, &resp);
+	cdns_mhdp_reg_write(mhdp, CDNS_DPTX_CAR,
+			    resp | CDNS_VIF_CLK_EN | CDNS_VIF_CLK_RSTN);
+
 	if (!mhdp->link_up)
 		cdns_mhdp_link_up(mhdp);
 
@@ -1209,7 +1221,6 @@ static int mhdp_probe(struct platform_device *pdev)
 	int ret;
 	unsigned int reg;
 	unsigned long rate;
-	u32 resp;
 	int irq;
 	u32 lanes_prop;
 
@@ -1364,11 +1375,6 @@ static int mhdp_probe(struct platform_device *pdev)
 		return ret;
 	}
 
-	/* Enable VIF clock for stream 0 */
-	cdns_mhdp_reg_read(mhdp, CDNS_DPTX_CAR, &resp);
-	cdns_mhdp_reg_write(mhdp, CDNS_DPTX_CAR,
-			    resp | CDNS_VIF_CLK_EN | CDNS_VIF_CLK_RSTN);
-
 	mhdp->bridge.connector = &mhdp->connector;
 	mhdp->connector.bridge = &mhdp->bridge;
 	mhdp->bridge.mhdp = mhdp;