aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2012-05-31 08:08:53 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-05-31 08:50:31 -0400
commit9e612a008fa7fe493a473454def56aa321479495 (patch)
tree12682ebbbb738f59935957be8932ec11a985dfbc
parentc3b20037926e607b6cdaecbf9d3103e2ca63bc31 (diff)
drm/i915/crt: Do not rely upon the HPD presence pin
Whilst most monitors do wire up the HPD presence pin, it seems quite a few KVM do not. Therefore if we simply rely on the HPD pin being asserted to indicate a connected monitor we fail miserable, so fall back to performing a DCC query for the EDID. Reported-and-tested-by: Matthieu LAVIE <boiteamadmax@hotmail.com> Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=50501 Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/intel_crt.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
index 75a70c46ef1b..844e93e1e395 100644
--- a/drivers/gpu/drm/i915/intel_crt.c
+++ b/drivers/gpu/drm/i915/intel_crt.c
@@ -453,13 +453,15 @@ intel_crt_detect(struct drm_connector *connector, bool force)
453 struct intel_load_detect_pipe tmp; 453 struct intel_load_detect_pipe tmp;
454 454
455 if (I915_HAS_HOTPLUG(dev)) { 455 if (I915_HAS_HOTPLUG(dev)) {
456 /* We can not rely on the HPD pin always being correctly wired
457 * up, for example many KVM do not pass it through, and so
458 * only trust an assertion that the monitor is connected.
459 */
456 if (intel_crt_detect_hotplug(connector)) { 460 if (intel_crt_detect_hotplug(connector)) {
457 DRM_DEBUG_KMS("CRT detected via hotplug\n"); 461 DRM_DEBUG_KMS("CRT detected via hotplug\n");
458 return connector_status_connected; 462 return connector_status_connected;
459 } else { 463 } else
460 DRM_DEBUG_KMS("CRT not detected via hotplug\n"); 464 DRM_DEBUG_KMS("CRT not detected via hotplug\n");
461 return connector_status_disconnected;
462 }
463 } 465 }
464 466
465 if (intel_crt_detect_ddc(connector)) 467 if (intel_crt_detect_ddc(connector))