From: Thierry Reding <tred...@nvidia.com>

If the sink is eDP and supports the alternate scrambler reset, enable
it.

Signed-off-by: Thierry Reding <treding at nvidia.com>
---
 drivers/gpu/drm/drm_dp_helper.c | 11 +++++++++++
 include/drm/drm_dp_helper.h     |  1 +
 2 files changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c
index e3a289793c73..76ac68bc1042 100644
--- a/drivers/gpu/drm/drm_dp_helper.c
+++ b/drivers/gpu/drm/drm_dp_helper.c
@@ -316,6 +316,7 @@ static void drm_dp_link_caps_reset(struct drm_dp_link_caps 
*caps)
        caps->tps3_supported = false;
        caps->fast_training = false;
        caps->channel_coding = false;
+       caps->alternate_scrambler_reset = false;
 }

 void drm_dp_link_caps_copy(struct drm_dp_link_caps *dest,
@@ -325,6 +326,7 @@ void drm_dp_link_caps_copy(struct drm_dp_link_caps *dest,
        dest->tps3_supported = src->tps3_supported;
        dest->fast_training = src->fast_training;
        dest->channel_coding = src->channel_coding;
+       dest->alternate_scrambler_reset = src->alternate_scrambler_reset;
 }

 static void drm_dp_link_reset(struct drm_dp_link *link)
@@ -378,6 +380,8 @@ int drm_dp_link_probe(struct drm_dp_aux *aux, struct 
drm_dp_link *link)
                static const u8 edp_revs[] = { 0x11, 0x12, 0x13, 0x14 };
                u8 value;

+               link->caps.alternate_scrambler_reset = true;
+
                err = drm_dp_dpcd_readb(aux, DP_EDP_DPCD_REV, &value);
                if (err < 0)
                        return err;
@@ -493,6 +497,13 @@ int drm_dp_link_configure(struct drm_dp_aux *aux, struct 
drm_dp_link *link)
        if (err < 0)
                return err;

+       if (link->caps.alternate_scrambler_reset) {
+               err = drm_dp_dpcd_writeb(aux, DP_EDP_CONFIGURATION_SET,
+                                        DP_ALTERNATE_SCRAMBLER_RESET_ENABLE);
+               if (err < 0)
+                       return err;
+       }
+
        return 0;
 }
 EXPORT_SYMBOL(drm_dp_link_configure);
diff --git a/include/drm/drm_dp_helper.h b/include/drm/drm_dp_helper.h
index 2efa6539c783..825aaf4e8c71 100644
--- a/include/drm/drm_dp_helper.h
+++ b/include/drm/drm_dp_helper.h
@@ -793,6 +793,7 @@ struct drm_dp_link_caps {
        bool tps3_supported;
        bool fast_training;
        bool channel_coding;
+       bool alternate_scrambler_reset;
 };

 void drm_dp_link_caps_copy(struct drm_dp_link_caps *dest,
-- 
2.5.0

Reply via email to