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
