aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAdam Jackson <ajax@redhat.com>2010-07-16 14:46:29 -0400
committerEric Anholt <eric@anholt.net>2010-08-01 22:38:00 -0400
commitcb0953d734348e8862d6d7edc666cfb3bf6d8fae (patch)
tree0ebd8ff4d12cb9d62b72daf361226397000d61b5
parentb329530ca7cdf6bf014f2124efd983e01265d623 (diff)
drm/i915: Initialize LVDS and eDP outputs before anything else
This makes them sort to the front in X, which makes them likely to be the primary outputs if you haven't specified a preference in your DE, which is likely to be what you want. Signed-off-by: Adam Jackson <ajax@redhat.com> Signed-off-by: Eric Anholt <eric@anholt.net>
-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