Commit 3bc95d64 authored by Kamal Mostafa's avatar Kamal Mostafa Committed by Ben Hutchings

drm/i915: quirk no PCH_PWM_ENABLE for Dell XPS13 backlight

commit e85843be upstream.

BugLink: https://bugzilla.kernel.org/show_bug.cgi?id=47941
BugLink: https://bugs.launchpad.net/bugs/1163720
BugLink: https://bugs.launchpad.net/bugs/1162026

Some machines suffer from non-functional backlight controls if
BLM_PCH_PWM_ENABLE is set, so provide a quirk to avoid doing so.
Apply this quirk to Dell XPS 13 models.
Tested-by: default avatarEric Griffith <EGriffith92@gmail.com>
Tested-by: default avatarKent Baxley <kent.baxley@canonical.com>
Signed-off-by: default avatarKamal Mostafa <kamal@canonical.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
[ kamal: backport to 3.2 ]
Signed-off-by: default avatarBen Hutchings <ben@decadent.org.uk>
parent bb8d7bf7
...@@ -275,6 +275,7 @@ enum intel_pch { ...@@ -275,6 +275,7 @@ enum intel_pch {
#define QUIRK_PIPEA_FORCE (1<<0) #define QUIRK_PIPEA_FORCE (1<<0)
#define QUIRK_LVDS_SSC_DISABLE (1<<1) #define QUIRK_LVDS_SSC_DISABLE (1<<1)
#define QUIRK_INVERT_BRIGHTNESS (1<<2) #define QUIRK_INVERT_BRIGHTNESS (1<<2)
#define QUIRK_NO_PCH_PWM_ENABLE (1<<3)
struct intel_fbdev; struct intel_fbdev;
struct intel_fbc_work; struct intel_fbc_work;
......
...@@ -8842,6 +8842,17 @@ static void quirk_invert_brightness(struct drm_device *dev) ...@@ -8842,6 +8842,17 @@ static void quirk_invert_brightness(struct drm_device *dev)
dev_priv->quirks |= QUIRK_INVERT_BRIGHTNESS; dev_priv->quirks |= QUIRK_INVERT_BRIGHTNESS;
} }
/*
* Some machines (Dell XPS13) suffer broken backlight controls if
* BLM_PCH_PWM_ENABLE is set.
*/
static void quirk_no_pcm_pwm_enable(struct drm_device *dev)
{
struct drm_i915_private *dev_priv = dev->dev_private;
dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE;
DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n");
}
struct intel_quirk { struct intel_quirk {
int device; int device;
int subsystem_vendor; int subsystem_vendor;
...@@ -8916,6 +8927,11 @@ struct intel_quirk intel_quirks[] = { ...@@ -8916,6 +8927,11 @@ struct intel_quirk intel_quirks[] = {
/* Acer/Packard Bell NCL20 */ /* Acer/Packard Bell NCL20 */
{ 0x2a42, 0x1025, 0x034b, quirk_invert_brightness }, { 0x2a42, 0x1025, 0x034b, quirk_invert_brightness },
/* Dell XPS13 HD Sandy Bridge */
{ 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable },
/* Dell XPS13 HD and XPS13 FHD Ivy Bridge */
{ 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable },
}; };
static void intel_init_quirks(struct drm_device *dev) static void intel_init_quirks(struct drm_device *dev)
......
...@@ -1075,7 +1075,8 @@ bool intel_lvds_init(struct drm_device *dev) ...@@ -1075,7 +1075,8 @@ bool intel_lvds_init(struct drm_device *dev)
goto failed; goto failed;
out: out:
if (HAS_PCH_SPLIT(dev)) { if (HAS_PCH_SPLIT(dev) &&
!(dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)) {
u32 pwm; u32 pwm;
pipe = (I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT) ? 1 : 0; pipe = (I915_READ(PCH_LVDS) & LVDS_PIPEB_SELECT) ? 1 : 0;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment