Currently we have tc_main_link_setup(), which configures and enabled the
link, but we have no counter-part for disabling the link.

Add tc_main_link_disable, and rename tc_main_link_setup to
tc_main_link_enable.

Signed-off-by: Tomi Valkeinen <tomi.valkei...@ti.com>
---
 drivers/gpu/drm/bridge/tc358767.c | 27 ++++++++++++++++++++++++---
 1 file changed, 24 insertions(+), 3 deletions(-)

diff --git a/drivers/gpu/drm/bridge/tc358767.c 
b/drivers/gpu/drm/bridge/tc358767.c
index f8039149a4e8..fe5fd7db0247 100644
--- a/drivers/gpu/drm/bridge/tc358767.c
+++ b/drivers/gpu/drm/bridge/tc358767.c
@@ -822,7 +822,7 @@ static int tc_link_training(struct tc_data *tc, int pattern)
        return ret;
 }
 
-static int tc_main_link_setup(struct tc_data *tc)
+static int tc_main_link_enable(struct tc_data *tc)
 {
        struct drm_dp_aux *aux = &tc->aux;
        struct device *dev = tc->dev;
@@ -837,6 +837,8 @@ static int tc_main_link_setup(struct tc_data *tc)
        if (!tc->mode)
                return -EINVAL;
 
+       dev_dbg(tc->dev, "link enable\n");
+
        tc_write(DP0_SRCCTRL, tc_srcctrl(tc));
        /* SSCG and BW27 on DP1 must be set to the same as on DP0 */
        tc_write(DP1_SRCCTRL,
@@ -1005,6 +1007,20 @@ static int tc_main_link_setup(struct tc_data *tc)
        return ret;
 }
 
+static int tc_main_link_disable(struct tc_data *tc)
+{
+       int ret;
+
+       dev_dbg(tc->dev, "link disable\n");
+
+       tc_write(DP0_SRCCTRL, 0);
+       tc_write(DP0CTL, 0);
+
+       return 0;
+err:
+       return ret;
+}
+
 static int tc_stream_enable(struct tc_data *tc)
 {
        int ret;
@@ -1083,15 +1099,16 @@ static void tc_bridge_enable(struct drm_bridge *bridge)
        struct tc_data *tc = bridge_to_tc(bridge);
        int ret;
 
-       ret = tc_main_link_setup(tc);
+       ret = tc_main_link_enable(tc);
        if (ret < 0) {
-               dev_err(tc->dev, "main link setup error: %d\n", ret);
+               dev_err(tc->dev, "main link enable error: %d\n", ret);
                return;
        }
 
        ret = tc_stream_enable(tc);
        if (ret < 0) {
                dev_err(tc->dev, "main link stream start error: %d\n", ret);
+               tc_main_link_disable(tc);
                return;
        }
 
@@ -1108,6 +1125,10 @@ static void tc_bridge_disable(struct drm_bridge *bridge)
        ret = tc_stream_disable(tc);
        if (ret < 0)
                dev_err(tc->dev, "main link stream stop error: %d\n", ret);
+
+       ret = tc_main_link_disable(tc);
+       if (ret < 0)
+               dev_err(tc->dev, "main link disable error: %d\n", ret);
 }
 
 static void tc_bridge_post_disable(struct drm_bridge *bridge)
-- 
Texas Instruments Finland Oy, Porkkalankatu 22, 00180 Helsinki.
Y-tunnus/Business ID: 0615521-4. Kotipaikka/Domicile: Helsinki

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to