aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKamal Mostafa <kamal@canonical.com>2013-07-19 18:02:01 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-08-04 04:51:11 -0400
commitf12155987bdc8d175b41b2fcbd88e8788c1af92d (patch)
tree31a89b7719c9c3c7f939903ad0f35a12bff7e2e6
parent19a280cac37e30243023a7f53651504a135ac960 (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.h1
-rw-r--r--drivers/gpu/drm/i915/intel_display.c16
-rw-r--r--drivers/gpu/drm/i915/intel_panel.c3
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
495struct intel_fbdev; 496struct intel_fbdev;
496struct intel_fbc_work; 497struct 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 */
8924static 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
8920struct intel_quirk { 8931struct 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
8991static void intel_init_quirks(struct drm_device *dev) 9007static 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;