Now that we have a generic helper to fill the scrambling status, let's
use it.

Signed-off-by: Maxime Ripard <max...@cerno.tech>
---
 drivers/gpu/drm/vc4/vc4_hdmi.c | 32 ++++++++++----------------------
 drivers/gpu/drm/vc4/vc4_hdmi.h |  6 ++++++
 2 files changed, 16 insertions(+), 22 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.c b/drivers/gpu/drm/vc4/vc4_hdmi.c
index 82878718e5fc..aa6700622797 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.c
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.c
@@ -297,6 +297,14 @@ static int vc4_hdmi_connector_atomic_check(struct 
drm_connector *connector,
        struct drm_connector_state *new_state =
                drm_atomic_get_new_connector_state(state, connector);
        struct drm_crtc *crtc = new_state->crtc;
+       int ret;
+
+       ret = drm_atomic_helper_connector_hdmi_check(connector, state);
+       if (ret)
+               return ret;
+
+       if (new_state->hdmi_needs_scrambling != 
new_state->hdmi_needs_high_tmds_ratio)
+               return -EINVAL;
 
        if (!crtc)
                return 0;
@@ -586,37 +594,16 @@ static void vc4_hdmi_set_infoframes(struct drm_encoder 
*encoder)
        vc4_hdmi_set_hdr_infoframe(encoder);
 }
 
-static bool vc4_hdmi_supports_scrambling(struct drm_encoder *encoder)
-{
-       struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
-       struct drm_display_info *display = &vc4_hdmi->connector.display_info;
-
-       lockdep_assert_held(&vc4_hdmi->mutex);
-
-       if (!display->is_hdmi)
-               return false;
-
-       if (!display->hdmi.scdc.supported ||
-           !display->hdmi.scdc.scrambling.supported)
-               return false;
-
-       return true;
-}
-
 #define SCRAMBLING_POLLING_DELAY_MS    1000
 
 static void vc4_hdmi_enable_scrambling(struct drm_encoder *encoder)
 {
        struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
-       const struct drm_display_mode *mode = &vc4_hdmi->saved_adjusted_mode;
        unsigned long flags;
 
        lockdep_assert_held(&vc4_hdmi->mutex);
 
-       if (!vc4_hdmi_supports_scrambling(encoder))
-               return;
-
-       if (!drm_mode_hdmi_requires_scrambling(mode))
+       if (!vc4_hdmi->scdc_needed)
                return;
 
        drm_scdc_set_high_tmds_clock_ratio(vc4_hdmi->ddc, true);
@@ -1228,6 +1215,7 @@ static void vc4_hdmi_encoder_atomic_mode_set(struct 
drm_encoder *encoder,
        struct vc4_hdmi *vc4_hdmi = encoder_to_vc4_hdmi(encoder);
 
        mutex_lock(&vc4_hdmi->mutex);
+       vc4_hdmi->scdc_needed = conn_state->hdmi_needs_scrambling;
        memcpy(&vc4_hdmi->saved_adjusted_mode,
               &crtc_state->adjusted_mode,
               sizeof(vc4_hdmi->saved_adjusted_mode));
diff --git a/drivers/gpu/drm/vc4/vc4_hdmi.h b/drivers/gpu/drm/vc4/vc4_hdmi.h
index 460112d68948..1aabc51ede03 100644
--- a/drivers/gpu/drm/vc4/vc4_hdmi.h
+++ b/drivers/gpu/drm/vc4/vc4_hdmi.h
@@ -206,6 +206,12 @@ struct vc4_hdmi {
         * the scrambler on? Protected by @mutex.
         */
        bool scdc_enabled;
+
+       /**
+        * @scdc_needed: Is the HDMI controller needs to have the
+        * scrambling on? Protected by @mutex.
+        */
+       bool scdc_needed;
 };
 
 static inline struct vc4_hdmi *
-- 
2.32.0

Reply via email to