Re: [PATCH v2 2/2] drm/i915/backlight: setup backlight pwm alternate increment on backlight enable

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Mon, 19 Sep 2016, Jani Nikula <jani.nikula@xxxxxxxxx> wrote:
> From: Shawn Lee <shawn.c.lee@xxxxxxxxx>
>
> 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

There's a good chance this'll also fix a bug long ago deemed
NOTOURBUG...

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=67454

> Cc: Cooper Chiou <cooper.chiou@xxxxxxxxx>
> Cc: Wei Shun Chen <wei.shun.chang@xxxxxxxxx>
> Cc: Gary C Wang <gary.c.wang@xxxxxxxxx>
> Cc: stable@xxxxxxxxxxxxxxx
> Signed-off-by: Shawn Lee <shawn.c.lee@xxxxxxxxx>
> Signed-off-by: Jani Nikula <jani.nikula@xxxxxxxxx>
> ---
>  drivers/gpu/drm/i915/intel_panel.c | 18 +++++++++++++++++-
>  1 file changed, 17 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/i915/intel_panel.c b/drivers/gpu/drm/i915/intel_panel.c
> index 8bc43205d6a0..be4b4d546fd9 100644
> --- a/drivers/gpu/drm/i915/intel_panel.c
> +++ b/drivers/gpu/drm/i915/intel_panel.c
> @@ -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);

-- 
Jani Nikula, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe stable" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]