aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c24
1 files changed, 8 insertions, 16 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 2bdfe4b2d6dc..16faea30114a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2790,16 +2790,6 @@ static void g4x_disable_dp(struct intel_encoder *encoder,
2790 const struct drm_connector_state *old_conn_state) 2790 const struct drm_connector_state *old_conn_state)
2791{ 2791{
2792 intel_disable_dp(encoder, old_crtc_state, old_conn_state); 2792 intel_disable_dp(encoder, old_crtc_state, old_conn_state);
2793
2794 /* disable the port before the pipe on g4x */
2795 intel_dp_link_down(encoder, old_crtc_state);
2796}
2797
2798static void ilk_disable_dp(struct intel_encoder *encoder,
2799 const struct intel_crtc_state *old_crtc_state,
2800 const struct drm_connector_state *old_conn_state)
2801{
2802 intel_disable_dp(encoder, old_crtc_state, old_conn_state);
2803} 2793}
2804 2794
2805static void vlv_disable_dp(struct intel_encoder *encoder, 2795static void vlv_disable_dp(struct intel_encoder *encoder,
@@ -2813,13 +2803,19 @@ static void vlv_disable_dp(struct intel_encoder *encoder,
2813 intel_disable_dp(encoder, old_crtc_state, old_conn_state); 2803 intel_disable_dp(encoder, old_crtc_state, old_conn_state);
2814} 2804}
2815 2805
2816static void ilk_post_disable_dp(struct intel_encoder *encoder, 2806static void g4x_post_disable_dp(struct intel_encoder *encoder,
2817 const struct intel_crtc_state *old_crtc_state, 2807 const struct intel_crtc_state *old_crtc_state,
2818 const struct drm_connector_state *old_conn_state) 2808 const struct drm_connector_state *old_conn_state)
2819{ 2809{
2820 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base); 2810 struct intel_dp *intel_dp = enc_to_intel_dp(&encoder->base);
2821 enum port port = encoder->port; 2811 enum port port = encoder->port;
2822 2812
2813 /*
2814 * Bspec does not list a specific disable sequence for g4x DP.
2815 * Follow the ilk+ sequence (disable pipe before the port) for
2816 * g4x DP as it does not suffer from underruns like the normal
2817 * g4x modeset sequence (disable pipe after the port).
2818 */
2823 intel_dp_link_down(encoder, old_crtc_state); 2819 intel_dp_link_down(encoder, old_crtc_state);
2824 2820
2825 /* Only ilk+ has port A */ 2821 /* Only ilk+ has port A */
@@ -6442,15 +6438,11 @@ bool intel_dp_init(struct drm_i915_private *dev_priv,
6442 intel_encoder->enable = vlv_enable_dp; 6438 intel_encoder->enable = vlv_enable_dp;
6443 intel_encoder->disable = vlv_disable_dp; 6439 intel_encoder->disable = vlv_disable_dp;
6444 intel_encoder->post_disable = vlv_post_disable_dp; 6440 intel_encoder->post_disable = vlv_post_disable_dp;
6445 } else if (INTEL_GEN(dev_priv) >= 5) {
6446 intel_encoder->pre_enable = g4x_pre_enable_dp;
6447 intel_encoder->enable = g4x_enable_dp;
6448 intel_encoder->disable = ilk_disable_dp;
6449 intel_encoder->post_disable = ilk_post_disable_dp;
6450 } else { 6441 } else {
6451 intel_encoder->pre_enable = g4x_pre_enable_dp; 6442 intel_encoder->pre_enable = g4x_pre_enable_dp;
6452 intel_encoder->enable = g4x_enable_dp; 6443 intel_encoder->enable = g4x_enable_dp;
6453 intel_encoder->disable = g4x_disable_dp; 6444 intel_encoder->disable = g4x_disable_dp;
6445 intel_encoder->post_disable = g4x_post_disable_dp;
6454 } 6446 }
6455 6447
6456 intel_dig_port->dp.output_reg = output_reg; 6448 intel_dig_port->dp.output_reg = output_reg;