diff options
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 24 |
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 | |||
| 2798 | static 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 | ||
| 2805 | static void vlv_disable_dp(struct intel_encoder *encoder, | 2795 | static 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 | ||
| 2816 | static void ilk_post_disable_dp(struct intel_encoder *encoder, | 2806 | static 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; |
