summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to '2700_drm-i915-resurrect-panel-lid-handling.patch')
-rw-r--r--2700_drm-i915-resurrect-panel-lid-handling.patch117
1 files changed, 117 insertions, 0 deletions
diff --git a/2700_drm-i915-resurrect-panel-lid-handling.patch b/2700_drm-i915-resurrect-panel-lid-handling.patch
new file mode 100644
index 00000000..49f3e8d8
--- /dev/null
+++ b/2700_drm-i915-resurrect-panel-lid-handling.patch
@@ -0,0 +1,117 @@
+From a726915cef1daab57aad4c5b5e4773822f0a4bf8 Mon Sep 17 00:00:00 2001
+From: Daniel Vetter <daniel.vetter@ffwll.ch>
+Date: Tue, 20 Nov 2012 14:50:08 +0100
+Subject: [PATCH] drm/i915: resurrect panel lid handling
+
+But disabled by default. This essentially reverts
+
+commit bcd5023c961a44c7149936553b6929b2b233dd27
+Author: Dave Airlie <airlied@redhat.com>
+Date: Mon Mar 14 14:17:55 2011 +1000
+
+ drm/i915: disable opregion lid detection for now
+
+but leaves the autodetect mode disabled. There's also the explicit lid
+status option added in
+
+commit fca874092597ef946b8f07031d8c31c58b212144
+Author: Chris Wilson <chris@chris-wilson.co.uk>
+Date: Thu Feb 17 13:44:48 2011 +0000
+
+ drm/i915: Add a module parameter to ignore lid status
+
+Which overloaded the meaning for the panel_ignore_lid parameter even
+more. To fix up this mess, give the non-negative numbers 0,1 the
+original meaning back and use negative numbers to force a given state.
+So now we have
+
+1 - disable autodetect, return unknown
+0 - enable autodetect
+-1 - force to disconnected/lid closed
+-2 - force to connected/lid open
+
+v2: My C programmer license has been revoked ...
+
+v3: Beautify the code a bit, as suggested by Chris Wilson.
+
+Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=27622
+Tested-by: Andreas Sturmlechner <andreas.sturmlechner@gmail.com>
+Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
+Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
+---
+ drivers/gpu/drm/i915/i915_drv.c | 6 +++---
+ drivers/gpu/drm/i915/intel_panel.c | 25 +++++++++++--------------
+ 2 files changed, 14 insertions(+), 17 deletions(-)
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index a3d754d..f5b505a 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -47,11 +47,11 @@ MODULE_PARM_DESC(modeset,
+ unsigned int i915_fbpercrtc __always_unused = 0;
+ module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
+
+-int i915_panel_ignore_lid __read_mostly = 0;
++int i915_panel_ignore_lid __read_mostly = 1;
+ module_param_named(panel_ignore_lid, i915_panel_ignore_lid, int, 0600);
+ MODULE_PARM_DESC(panel_ignore_lid,
+- "Override lid status (0=autodetect [default], 1=lid open, "
+- "-1=lid closed)");
++ "Override lid status (0=autodetect, 1=autodetect disabled [default], "
++ "-1=force lid closed, -2=force lid open)");
+
+ unsigned int i915_powersave __read_mostly = 1;
+ module_param_named(powersave, i915_powersave, int, 0600);
+diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
+index 41d4635..c758ad2 100644
+--- a/drivers/gpu/drm/i915/intel_panel.c
++++ b/drivers/gpu/drm/i915/intel_panel.c
+@@ -275,7 +275,7 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
+ }
+
+ tmp = I915_READ(BLC_PWM_CTL);
+- if (INTEL_INFO(dev)->gen < 4)
++ if (INTEL_INFO(dev)->gen < 4)
+ level <<= 1;
+ tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
+ I915_WRITE(BLC_PWM_CTL, tmp | level);
+@@ -374,26 +374,23 @@ static void intel_panel_init_backlight(struct drm_device *dev)
+ enum drm_connector_status
+ intel_panel_detect(struct drm_device *dev)
+ {
+-#if 0
+ struct drm_i915_private *dev_priv = dev->dev_private;
+-#endif
+-
+- if (i915_panel_ignore_lid)
+- return i915_panel_ignore_lid > 0 ?
+- connector_status_connected :
+- connector_status_disconnected;
+
+- /* opregion lid state on HP 2540p is wrong at boot up,
+- * appears to be either the BIOS or Linux ACPI fault */
+-#if 0
+ /* Assume that the BIOS does not lie through the OpRegion... */
+- if (dev_priv->opregion.lid_state)
++ if (!i915_panel_ignore_lid && dev_priv->opregion.lid_state) {
+ return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
+ connector_status_connected :
+ connector_status_disconnected;
+-#endif
++ }
+
+- return connector_status_unknown;
++ switch (i915_panel_ignore_lid) {
++ case -2:
++ return connector_status_connected;
++ case -1:
++ return connector_status_disconnected;
++ default:
++ return connector_status_unknown;
++ }
+ }
+
+ #ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
+--
+1.8.3.2
+