mirror of
https://github.com/torvalds/linux.git
synced 2024-11-14 16:12:02 +00:00
drm/i915: resurrect panel lid handling
But disabled by default. This essentially reverts commitbcd5023c96
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 commitfca8740925
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>
This commit is contained in:
parent
8fed619373
commit
a726915cef
@ -47,11 +47,11 @@ MODULE_PARM_DESC(modeset,
|
|||||||
unsigned int i915_fbpercrtc __always_unused = 0;
|
unsigned int i915_fbpercrtc __always_unused = 0;
|
||||||
module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
|
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_param_named(panel_ignore_lid, i915_panel_ignore_lid, int, 0600);
|
||||||
MODULE_PARM_DESC(panel_ignore_lid,
|
MODULE_PARM_DESC(panel_ignore_lid,
|
||||||
"Override lid status (0=autodetect [default], 1=lid open, "
|
"Override lid status (0=autodetect, 1=autodetect disabled [default], "
|
||||||
"-1=lid closed)");
|
"-1=force lid closed, -2=force lid open)");
|
||||||
|
|
||||||
unsigned int i915_powersave __read_mostly = 1;
|
unsigned int i915_powersave __read_mostly = 1;
|
||||||
module_param_named(powersave, i915_powersave, int, 0600);
|
module_param_named(powersave, i915_powersave, int, 0600);
|
||||||
|
@ -275,7 +275,7 @@ static void intel_panel_actually_set_backlight(struct drm_device *dev, u32 level
|
|||||||
}
|
}
|
||||||
|
|
||||||
tmp = I915_READ(BLC_PWM_CTL);
|
tmp = I915_READ(BLC_PWM_CTL);
|
||||||
if (INTEL_INFO(dev)->gen < 4)
|
if (INTEL_INFO(dev)->gen < 4)
|
||||||
level <<= 1;
|
level <<= 1;
|
||||||
tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
|
tmp &= ~BACKLIGHT_DUTY_CYCLE_MASK;
|
||||||
I915_WRITE(BLC_PWM_CTL, tmp | level);
|
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
|
enum drm_connector_status
|
||||||
intel_panel_detect(struct drm_device *dev)
|
intel_panel_detect(struct drm_device *dev)
|
||||||
{
|
{
|
||||||
#if 0
|
|
||||||
struct drm_i915_private *dev_priv = dev->dev_private;
|
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... */
|
/* 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 ?
|
return ioread32(dev_priv->opregion.lid_state) & 0x1 ?
|
||||||
connector_status_connected :
|
connector_status_connected :
|
||||||
connector_status_disconnected;
|
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
|
#ifdef CONFIG_BACKLIGHT_CLASS_DEVICE
|
||||||
|
Loading…
Reference in New Issue
Block a user