diff options
author | Kamal Mostafa <kamal@canonical.com> | 2013-07-19 18:02:01 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-04 04:51:11 -0400 |
commit | f12155987bdc8d175b41b2fcbd88e8788c1af92d (patch) | |
tree | 31a89b7719c9c3c7f939903ad0f35a12bff7e2e6 | |
parent | 19a280cac37e30243023a7f53651504a135ac960 (diff) |
drm/i915: quirk no PCH_PWM_ENABLE for Dell XPS13 backlight
commit e85843bec6c2ea7c10ec61238396891cc2b753a9 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: Eric Griffith <EGriffith92@gmail.com>
Tested-by: Kent Baxley <kent.baxley@canonical.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 16 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_panel.c | 3 |
3 files changed, 19 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 9669a0b8b440..d69f21cf1851 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -491,6 +491,7 @@ enum intel_sbi_destination { | |||
491 | #define QUIRK_PIPEA_FORCE (1<<0) | 491 | #define QUIRK_PIPEA_FORCE (1<<0) |
492 | #define QUIRK_LVDS_SSC_DISABLE (1<<1) | 492 | #define QUIRK_LVDS_SSC_DISABLE (1<<1) |
493 | #define QUIRK_INVERT_BRIGHTNESS (1<<2) | 493 | #define QUIRK_INVERT_BRIGHTNESS (1<<2) |
494 | #define QUIRK_NO_PCH_PWM_ENABLE (1<<3) | ||
494 | 495 | ||
495 | struct intel_fbdev; | 496 | struct intel_fbdev; |
496 | struct intel_fbc_work; | 497 | struct intel_fbc_work; |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index d7ff3afbf615..e1f4e6edaa46 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -8917,6 +8917,17 @@ static void quirk_invert_brightness(struct drm_device *dev) | |||
8917 | DRM_INFO("applying inverted panel brightness quirk\n"); | 8917 | DRM_INFO("applying inverted panel brightness quirk\n"); |
8918 | } | 8918 | } |
8919 | 8919 | ||
8920 | /* | ||
8921 | * Some machines (Dell XPS13) suffer broken backlight controls if | ||
8922 | * BLM_PCH_PWM_ENABLE is set. | ||
8923 | */ | ||
8924 | static void quirk_no_pcm_pwm_enable(struct drm_device *dev) | ||
8925 | { | ||
8926 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
8927 | dev_priv->quirks |= QUIRK_NO_PCH_PWM_ENABLE; | ||
8928 | DRM_INFO("applying no-PCH_PWM_ENABLE quirk\n"); | ||
8929 | } | ||
8930 | |||
8920 | struct intel_quirk { | 8931 | struct intel_quirk { |
8921 | int device; | 8932 | int device; |
8922 | int subsystem_vendor; | 8933 | int subsystem_vendor; |
@@ -8986,6 +8997,11 @@ static struct intel_quirk intel_quirks[] = { | |||
8986 | 8997 | ||
8987 | /* Acer Aspire 4736Z */ | 8998 | /* Acer Aspire 4736Z */ |
8988 | { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness }, | 8999 | { 0x2a42, 0x1025, 0x0260, quirk_invert_brightness }, |
9000 | |||
9001 | /* Dell XPS13 HD Sandy Bridge */ | ||
9002 | { 0x0116, 0x1028, 0x052e, quirk_no_pcm_pwm_enable }, | ||
9003 | /* Dell XPS13 HD and XPS13 FHD Ivy Bridge */ | ||
9004 | { 0x0166, 0x1028, 0x058b, quirk_no_pcm_pwm_enable }, | ||
8989 | }; | 9005 | }; |
8990 | 9006 | ||
8991 | static void intel_init_quirks(struct drm_device *dev) | 9007 | static void intel_init_quirks(struct drm_device *dev) |
diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c index eb5e6e95f3c7..33cb87f7983e 100644 --- a/drivers/gpu/drm/i915/intel_panel.c +++ b/drivers/gpu/drm/i915/intel_panel.c | |||
@@ -354,7 +354,8 @@ void intel_panel_enable_backlight(struct drm_device *dev, | |||
354 | POSTING_READ(reg); | 354 | POSTING_READ(reg); |
355 | I915_WRITE(reg, tmp | BLM_PWM_ENABLE); | 355 | I915_WRITE(reg, tmp | BLM_PWM_ENABLE); |
356 | 356 | ||
357 | if (HAS_PCH_SPLIT(dev)) { | 357 | if (HAS_PCH_SPLIT(dev) && |
358 | !(dev_priv->quirks & QUIRK_NO_PCH_PWM_ENABLE)) { | ||
358 | tmp = I915_READ(BLC_PWM_PCH_CTL1); | 359 | tmp = I915_READ(BLC_PWM_PCH_CTL1); |
359 | tmp |= BLM_PCH_PWM_ENABLE; | 360 | tmp |= BLM_PCH_PWM_ENABLE; |
360 | tmp &= ~BLM_PCH_OVERRIDE_ENABLE; | 361 | tmp &= ~BLM_PCH_OVERRIDE_ENABLE; |