aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c17
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c2
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h1
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 */
1467static bool intel_dpd_is_edp(struct drm_device *dev) 1467bool 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
180intel_dp_set_m_n(struct drm_crtc *crtc, struct drm_display_mode *mode, 180intel_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);
182extern bool intel_pch_has_edp(struct drm_crtc *crtc); 182extern bool intel_pch_has_edp(struct drm_crtc *crtc);
183extern bool intel_dpd_is_edp(struct drm_device *dev);
183extern void intel_edp_link_config (struct intel_encoder *, int *, int *); 184extern void intel_edp_link_config (struct intel_encoder *, int *, int *);
184 185
185 186