drm/i915/backlight: setup backlight pwm alternate increment on backlight enable
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+16e1203db8
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 commite29aff05f2
) Signed-off-by: Jani Nikula <jani.nikula@intel.com>
This commit is contained in:
Родитель
16e1203db8
Коммит
915b417946
|
@ -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);
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче