From a703420f9ee1d4d9dcd92a7fe6d7d66ea408349d Mon Sep 17 00:00:00 2001 From: Chris Wilson Date: Mon, 14 May 2012 13:53:38 +0100 Subject: [PATCH] drm/i915: Only enable drm_kms_helper.poll if we have outputs requiring polling On a modern system, we can drive output polling entirely through hotplug events (and user requests). Under such circumstances, the regular 10s automatic probe is just a nuisance. Signed-off-by: Chris Wilson --- drivers/gpu/drm/i915/i915_dma.c | 3 ++- drivers/gpu/drm/i915/intel_display.c | 12 ++++++++++++ drivers/gpu/drm/i915/intel_drv.h | 2 ++ 3 files changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c index 194791b..90c6eb1 100644 --- a/drivers/gpu/drm/i915/i915_dma.c +++ b/drivers/gpu/drm/i915/i915_dma.c @@ -1334,7 +1334,8 @@ static int i915_load_modeset_init(struct drm_device *dev) if (ret) goto cleanup_irq; - drm_kms_helper_poll_init(dev); + if (intel_mode_needs_polling(dev)) + drm_kms_helper_poll_init(dev); /* We're off and running w/KMS */ dev_priv->mm.suspended = 0; diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index 761ec8b..ebbd097 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c @@ -7227,6 +7227,18 @@ int intel_modeset_vga_set_state(struct drm_device *dev, bool state) return 0; } +bool intel_mode_needs_polling(struct drm_device *dev) +{ + struct drm_connector *connector; + + list_for_each_entry(connector, &dev->mode_config.connector_list, head) { + if (connector->polled & ~DRM_CONNECTOR_POLL_HPD) + return true; + } + + return false; +} + #ifdef CONFIG_DEBUG_FS #include diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 50e7bfd..9afe3b4 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h @@ -517,4 +517,6 @@ extern void intel_ddi_mode_set(struct drm_encoder *encoder, struct drm_display_mode *mode, struct drm_display_mode *adjusted_mode); +extern bool intel_mode_needs_polling(struct drm_device *dev); + #endif /* __INTEL_DRV_H__ */ -- 1.7.10