diff options
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 17 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 1 |
3 files changed, 14 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 30d89111f559..82d1b91bdfa6 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -5111,19 +5111,26 @@ static void intel_setup_outputs(struct drm_device *dev) | |||
5111 | { | 5111 | { |
5112 | struct drm_i915_private *dev_priv = dev->dev_private; | 5112 | struct drm_i915_private *dev_priv = dev->dev_private; |
5113 | struct drm_encoder *encoder; | 5113 | struct drm_encoder *encoder; |
5114 | bool dpd_is_edp = false; | ||
5114 | 5115 | ||
5115 | intel_crt_init(dev); | ||
5116 | |||
5117 | /* Set up integrated LVDS */ | ||
5118 | if (IS_MOBILE(dev) && !IS_I830(dev)) | 5116 | if (IS_MOBILE(dev) && !IS_I830(dev)) |
5119 | intel_lvds_init(dev); | 5117 | intel_lvds_init(dev); |
5120 | 5118 | ||
5121 | if (HAS_PCH_SPLIT(dev)) { | 5119 | if (HAS_PCH_SPLIT(dev)) { |
5122 | int found; | 5120 | dpd_is_edp = intel_dpd_is_edp(dev); |
5123 | 5121 | ||
5124 | if (IS_MOBILE(dev) && (I915_READ(DP_A) & DP_DETECTED)) | 5122 | if (IS_MOBILE(dev) && (I915_READ(DP_A) & DP_DETECTED)) |
5125 | intel_dp_init(dev, DP_A); | 5123 | intel_dp_init(dev, DP_A); |
5126 | 5124 | ||
5125 | if (dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED)) | ||
5126 | intel_dp_init(dev, PCH_DP_D); | ||
5127 | } | ||
5128 | |||
5129 | intel_crt_init(dev); | ||
5130 | |||
5131 | if (HAS_PCH_SPLIT(dev)) { | ||
5132 | int found; | ||
5133 | |||
5127 | if (I915_READ(HDMIB) & PORT_DETECTED) { | 5134 | if (I915_READ(HDMIB) & PORT_DETECTED) { |
5128 | /* PCH SDVOB multiplex with HDMIB */ | 5135 | /* PCH SDVOB multiplex with HDMIB */ |
5129 | found = intel_sdvo_init(dev, PCH_SDVOB); | 5136 | found = intel_sdvo_init(dev, PCH_SDVOB); |
@@ -5142,7 +5149,7 @@ static void intel_setup_outputs(struct drm_device *dev) | |||
5142 | if (I915_READ(PCH_DP_C) & DP_DETECTED) | 5149 | if (I915_READ(PCH_DP_C) & DP_DETECTED) |
5143 | intel_dp_init(dev, PCH_DP_C); | 5150 | intel_dp_init(dev, PCH_DP_C); |
5144 | 5151 | ||
5145 | if (I915_READ(PCH_DP_D) & DP_DETECTED) | 5152 | if (!dpd_is_edp && (I915_READ(PCH_DP_D) & DP_DETECTED)) |
5146 | intel_dp_init(dev, PCH_DP_D); | 5153 | intel_dp_init(dev, PCH_DP_D); |
5147 | 5154 | ||
5148 | } else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) { | 5155 | } else if (SUPPORTS_DIGITAL_OUTPUTS(dev)) { |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 016a9237a020..f7410cffa8c9 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -1464,7 +1464,7 @@ intel_trans_dp_port_sel (struct drm_crtc *crtc) | |||
1464 | } | 1464 | } |
1465 | 1465 | ||
1466 | /* check the VBT to see whether the eDP is on DP-D port */ | 1466 | /* check the VBT to see whether the eDP is on DP-D port */ |
1467 | static bool intel_dpd_is_edp(struct drm_device *dev) | 1467 | bool intel_dpd_is_edp(struct drm_device *dev) |
1468 | { | 1468 | { |
1469 | struct drm_i915_private *dev_priv = dev->dev_private; | 1469 | struct drm_i915_private *dev_priv = dev->dev_private; |
1470 | struct child_device_config *p_child; | 1470 | struct child_device_config *p_child; |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 8c941da8ca38..296933a8d395 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -180,6 +180,7 @@ void | |||
180 | intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode, | 180 | intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode, |
181 | struct drm_display_mode *adjusted_mode); | 181 | struct drm_display_mode *adjusted_mode); |
182 | extern bool intel_pch_has_edp(struct drm_crtc *crtc); | 182 | extern bool intel_pch_has_edp(struct drm_crtc *crtc); |
183 | extern bool intel_dpd_is_edp(struct drm_device *dev); | ||
183 | extern void intel_edp_link_config (struct intel_encoder *, int *, int *); | 184 | extern void intel_edp_link_config (struct intel_encoder *, int *, int *); |
184 | 185 | ||
185 | 186 | ||