Add function to reset the SCDC FRL configuration and
Transcoder FRL configuration registers.

Signed-off-by: Ankit Nautiyal <[email protected]>
---
 drivers/gpu/drm/i915/display/intel_hdmi.c | 28 +++++++++++++++++++++++
 drivers/gpu/drm/i915/display/intel_hdmi.h |  2 ++
 2 files changed, 30 insertions(+)

diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c 
b/drivers/gpu/drm/i915/display/intel_hdmi.c
index ff200d662a3f..fe4923c82463 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.c
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.c
@@ -3781,3 +3781,31 @@ int intel_hdmi_start_frl(struct intel_encoder *encoder,
 
        return -EINVAL;
 }
+
+static void intel_hdmi_frl_ltsl(struct intel_encoder *encoder,
+                               const struct intel_crtc_state *crtc_state)
+{
+       struct intel_display *display = to_intel_display(encoder);
+       struct i2c_adapter *adapter =
+               intel_gmbus_get_adapter(display, intel_hdmi_ddc_pin(encoder));
+
+       drm_scdc_disable_frl(adapter);
+       drm_scdc_clear_update_flags(adapter, SCDC_FLT_UPDATE);
+}
+
+void intel_hdmi_disable_frl(struct intel_encoder *encoder,
+                           const struct intel_crtc_state *crtc_state)
+{
+       struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);
+       struct intel_display *display = to_intel_display(encoder);
+       enum transcoder trans = crtc_state->cpu_transcoder;
+
+       if (!crtc_state->frl.enable)
+               return;
+
+       intel_hdmi_frl_ltsl(encoder, crtc_state);
+       intel_de_rmw(display, TRANS_HDMI_FRL_CFG(display, trans),
+                    TRANS_HDMI_FRL_ENABLE | TRANS_HDMI_FRL_TRAINING_COMPLETE, 
0);
+
+       intel_hdmi_reset_frl_config(intel_hdmi);
+}
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.h 
b/drivers/gpu/drm/i915/display/intel_hdmi.h
index 1724e6075a9b..59a561ad28e0 100644
--- a/drivers/gpu/drm/i915/display/intel_hdmi.h
+++ b/drivers/gpu/drm/i915/display/intel_hdmi.h
@@ -66,6 +66,8 @@ bool intel_hdmi_is_frl(u32 clock);
 void intel_hdmi_prepare_for_frl_mode(const struct intel_crtc_state 
*crtc_state);
 int intel_hdmi_start_frl(struct intel_encoder *encoder,
                         const struct intel_crtc_state *crtc_state);
+void intel_hdmi_disable_frl(struct intel_encoder *encoder,
+                           const struct intel_crtc_state *crtc_state);
 void hsw_write_infoframe(struct intel_encoder *encoder,
                         const struct intel_crtc_state *crtc_state,
                         unsigned int type,
-- 
2.50.1

Reply via email to