]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/commitdiff
UBUNTU: SAUCE: i915_bpo: drm/i915/backlight: setup backlight pwm alternate increment...
authorShawn Lee <shawn.c.lee@intel.com>
Wed, 21 Sep 2016 06:37:34 +0000 (14:37 +0800)
committerKamal Mostafa <kamal@canonical.com>
Thu, 22 Sep 2016 17:03:55 +0000 (10:03 -0700)
BugLink: http://bugs.launchpad.net/bugs/1625932
Backlight enable is supposed to do a full setup of the backlight. We
were missing the PWM alternate increment bit in the south chicken
registers on lpt+ pch. This potentially caused a PWM frequency change
when the chicken register value was lost e.g. on suspend.

v2 by Jani, rebase on the patch caching alt increment

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97486
References: https://bugs.freedesktop.org/show_bug.cgi?id=67454
Cc: Cooper Chiou <cooper.chiou@intel.com>
Cc: Wei Shun Chen <wei.shun.chang@intel.com>
Cc: Gary C Wang <gary.c.wang@intel.com>
Cc: stable@vger.kernel.org # v4.4+ 32b421e79e6b drm/i915/backlight: setup and cache...
Cc: stable@vger.kernel.org # v4.4+
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: Shawn Lee <shawn.c.lee@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/8265f5935bd31c039ddfc82819d26c2ca1ae9cba.1474281249.git.jani.nikula@intel.com
(cherry-picked from drm-intel-next-queued commit e29aff05f239f8d)
Signed-off-by: AceLan Kao <acelan.kao@canonical.com>
Acked-by: Tim Gardner <tim.gardner@canonical.com>
Signed-off-by: Kamal Mostafa <kamal@canonical.com>
ubuntu/i915/intel_panel.c

index d676ff687711312a4c03260a60ff058f008b2e2c..1e22a7764d2cd1cac41c5ad7db90bccf14924231 100644 (file)
@@ -841,7 +841,7 @@ static void lpt_enable_backlight(struct intel_connector *connector)
 {
        struct drm_i915_private *dev_priv = to_i915(connector->base.dev);
        struct intel_panel *panel = &connector->panel;
-       u32 pch_ctl1, pch_ctl2;
+       u32 pch_ctl1, pch_ctl2, schicken;
 
        pch_ctl1 = I915_READ(BLC_PWM_PCH_CTL1);
        if (pch_ctl1 & BLM_PCH_PWM_ENABLE) {
@@ -850,6 +850,22 @@ static void lpt_enable_backlight(struct intel_connector *connector)
                I915_WRITE(BLC_PWM_PCH_CTL1, pch_ctl1);
        }
 
+       if (HAS_PCH_LPT(dev_priv)) {
+               schicken = I915_READ(SOUTH_CHICKEN2);
+               if (panel->backlight.alternate_pwm_increment)
+                       schicken |= LPT_PWM_GRANULARITY;
+               else
+                       schicken &= ~LPT_PWM_GRANULARITY;
+               I915_WRITE(SOUTH_CHICKEN2, schicken);
+       } else {
+               schicken = I915_READ(SOUTH_CHICKEN1);
+               if (panel->backlight.alternate_pwm_increment)
+                       schicken |= SPT_PWM_GRANULARITY;
+               else
+                       schicken &= ~SPT_PWM_GRANULARITY;
+               I915_WRITE(SOUTH_CHICKEN1, schicken);
+       }
+
        pch_ctl2 = panel->backlight.max << 16;
        I915_WRITE(BLC_PWM_PCH_CTL2, pch_ctl2);