aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_lvds.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_lvds.c')
-rw-r--r--drivers/gpu/drm/i915/intel_lvds.c25
1 files changed, 20 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
index 089f18c66ddb..05598ae10c4b 100644
--- a/drivers/gpu/drm/i915/intel_lvds.c
+++ b/drivers/gpu/drm/i915/intel_lvds.c
@@ -664,6 +664,15 @@ static int intel_lvds_get_modes(struct drm_connector *connector)
664 return 0; 664 return 0;
665} 665}
666 666
667/*
668 * Lid events. Note the use of 'modeset_on_lid':
669 * - we set it on lid close, and reset it on open
670 * - we use it as a "only once" bit (ie we ignore
671 * duplicate events where it was already properly
672 * set/reset)
673 * - the suspend/resume paths will also set it to
674 * zero, since they restore the mode ("lid open").
675 */
667static int intel_lid_notify(struct notifier_block *nb, unsigned long val, 676static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
668 void *unused) 677 void *unused)
669{ 678{
@@ -671,13 +680,19 @@ static int intel_lid_notify(struct notifier_block *nb, unsigned long val,
671 container_of(nb, struct drm_i915_private, lid_notifier); 680 container_of(nb, struct drm_i915_private, lid_notifier);
672 struct drm_device *dev = dev_priv->dev; 681 struct drm_device *dev = dev_priv->dev;
673 682
674 if (acpi_lid_open() && !dev_priv->suspended) { 683 if (!acpi_lid_open()) {
675 mutex_lock(&dev->mode_config.mutex); 684 dev_priv->modeset_on_lid = 1;
676 drm_helper_resume_force_mode(dev); 685 return NOTIFY_OK;
677 mutex_unlock(&dev->mode_config.mutex);
678 } 686 }
679 687
680 drm_sysfs_hotplug_event(dev_priv->dev); 688 if (!dev_priv->modeset_on_lid)
689 return NOTIFY_OK;
690
691 dev_priv->modeset_on_lid = 0;
692
693 mutex_lock(&dev->mode_config.mutex);
694 drm_helper_resume_force_mode(dev);
695 mutex_unlock(&dev->mode_config.mutex);
681 696
682 return NOTIFY_OK; 697 return NOTIFY_OK;
683} 698}