}
 }
 
-void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder)
+void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp)
 {
-       struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
-       struct intel_dp *intel_dp = &intel_dig_port->dp;
-       struct drm_i915_private *dev_priv = encoder->dev->dev_private;
+       struct intel_digital_port *intel_dig_port = dp_to_dig_port(intel_dp);
+       struct drm_i915_private *dev_priv =
+               to_i915(intel_dig_port->base.base.dev);
        enum port port = intel_dig_port->port;
        uint32_t val;
        bool wait = false;
 
        else
                intel_dp->get_aux_send_ctl = i9xx_get_aux_send_ctl;
 
+       if (HAS_DDI(dev))
+               intel_dp->prepare_link_retrain = intel_ddi_prepare_link_retrain;
+
        /* Preserve the current hw state. */
        intel_dp->DP = I915_READ(intel_dp->output_reg);
        intel_dp->attached_connector = intel_connector;
 
 static void
 intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp)
 {
-       struct drm_encoder *encoder = &dp_to_dig_port(intel_dp)->base.base;
-       struct drm_device *dev = encoder->dev;
        int i;
        uint8_t voltage;
        int voltage_tries, loop_tries;
        uint8_t link_config[2];
        uint8_t link_bw, rate_select;
 
-       if (HAS_DDI(dev))
-               intel_ddi_prepare_link_retrain(encoder);
+       if (intel_dp->prepare_link_retrain)
+               intel_dp->prepare_link_retrain(intel_dp);
 
        intel_dp_compute_rate(intel_dp, intel_dp->link_rate,
                              &link_bw, &rate_select);
 
                                     bool has_aux_irq,
                                     int send_bytes,
                                     uint32_t aux_clock_divider);
+
+       /* This is called before a link training is starterd */
+       void (*prepare_link_retrain)(struct intel_dp *intel_dp);
+
        bool train_set_valid;
 
        /* Displayport compliance testing */
 bool intel_ddi_pll_select(struct intel_crtc *crtc,
                          struct intel_crtc_state *crtc_state);
 void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
-void intel_ddi_prepare_link_retrain(struct drm_encoder *encoder);
+void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
 bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
 void intel_ddi_fdi_disable(struct drm_crtc *crtc);
 void intel_ddi_get_config(struct intel_encoder *encoder,