aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_display.c
diff options
context:
space:
mode:
authorJesse Barnes <jbarnes@virtuousgeek.org>2009-12-11 14:07:17 -0500
committerEric Anholt <eric@anholt.net>2009-12-16 17:00:05 -0500
commitb01f2c3a4a37d09a47ad73ccbb46d554d21cfeb0 (patch)
tree66624c9810c8175e403a047113f35aef61e925b6 /drivers/gpu/drm/i915/intel_display.c
parentb295d1b6e3e3f240d27cbe556d33ff5eb54721a7 (diff)
drm/i915: only enable hotplug for detected outputs
This patch changes around our hotplug enable code a bit to only enable it for ports we actually detect and initialize. This prevents problems with stuck or spurious interrupts on outputs that aren't actually wired up, and is generally more correct. Fixes FDO bug #23183. Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org> Signed-off-by: Eric Anholt <eric@anholt.net>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_display.c')
-rw-r--r--drivers/gpu/drm/i915/intel_display.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index ef9c6139ee31..c21dede6461c 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -4400,29 +4400,43 @@ static void intel_setup_outputs(struct drm_device *dev)
4400 bool found = false; 4400 bool found = false;
4401 4401
4402 if (I915_READ(SDVOB) & SDVO_DETECTED) { 4402 if (I915_READ(SDVOB) & SDVO_DETECTED) {
4403 DRM_DEBUG_KMS("probing SDVOB\n");
4403 found = intel_sdvo_init(dev, SDVOB); 4404 found = intel_sdvo_init(dev, SDVOB);
4404 if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) 4405 if (!found && SUPPORTS_INTEGRATED_HDMI(dev)) {
4406 DRM_DEBUG_KMS("probing HDMI on SDVOB\n");
4405 intel_hdmi_init(dev, SDVOB); 4407 intel_hdmi_init(dev, SDVOB);
4408 }
4406 4409
4407 if (!found && SUPPORTS_INTEGRATED_DP(dev)) 4410 if (!found && SUPPORTS_INTEGRATED_DP(dev)) {
4411 DRM_DEBUG_KMS("probing DP_B\n");
4408 intel_dp_init(dev, DP_B); 4412 intel_dp_init(dev, DP_B);
4413 }
4409 } 4414 }
4410 4415
4411 /* Before G4X SDVOC doesn't have its own detect register */ 4416 /* Before G4X SDVOC doesn't have its own detect register */
4412 4417
4413 if (I915_READ(SDVOB) & SDVO_DETECTED) 4418 if (I915_READ(SDVOB) & SDVO_DETECTED) {
4419 DRM_DEBUG_KMS("probing SDVOC\n");
4414 found = intel_sdvo_init(dev, SDVOC); 4420 found = intel_sdvo_init(dev, SDVOC);
4421 }
4415 4422
4416 if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) { 4423 if (!found && (I915_READ(SDVOC) & SDVO_DETECTED)) {
4417 4424
4418 if (SUPPORTS_INTEGRATED_HDMI(dev)) 4425 if (SUPPORTS_INTEGRATED_HDMI(dev)) {
4426 DRM_DEBUG_KMS("probing HDMI on SDVOC\n");
4419 intel_hdmi_init(dev, SDVOC); 4427 intel_hdmi_init(dev, SDVOC);
4420 if (SUPPORTS_INTEGRATED_DP(dev)) 4428 }
4429 if (SUPPORTS_INTEGRATED_DP(dev)) {
4430 DRM_DEBUG_KMS("probing DP_C\n");
4421 intel_dp_init(dev, DP_C); 4431 intel_dp_init(dev, DP_C);
4432 }
4422 } 4433 }
4423 4434
4424 if (SUPPORTS_INTEGRATED_DP(dev) && (I915_READ(DP_D) & DP_DETECTED)) 4435 if (SUPPORTS_INTEGRATED_DP(dev) &&
4436 (I915_READ(DP_D) & DP_DETECTED)) {
4437 DRM_DEBUG_KMS("probing DP_D\n");
4425 intel_dp_init(dev, DP_D); 4438 intel_dp_init(dev, DP_D);
4439 }
4426 } else if (IS_I8XX(dev)) 4440 } else if (IS_I8XX(dev))
4427 intel_dvo_init(dev); 4441 intel_dvo_init(dev);
4428 4442