[PATCH] UBUNTU: [Karmic SRU] backlight failed after suspend to ram on IBM X40

Andy Whitcroft apw at canonical.com
Wed Dec 16 09:12:23 UTC 2009


On Thu, Dec 10, 2009 at 08:46:02PM +0800, AceLan Kao wrote:

> From 43644cbe252d555de423202853f4855693e4316a Mon Sep 17 00:00:00 2001
> From: Jesse Barnes <jbarnes at virtuousgeek.org>
> Date: Wed, 14 Oct 2009 12:33:41 -0700
> Subject: [PATCH] UBUNTU: [Karmic SRU] backlight failed after suspend to ram on IBM X40
> 
> BugLink: https://bugs.edge.launchpad.net/ubuntu/+source/linux/+bug/292256
> 
> drm/i915: save/restore BLC histogram control reg across suspend/resume
> 
> Turns out some machines, like the ThinkPad X40 don't come back if you
> don't save/restore this register.
> 
> Signed-off-by: Jesse Barnes <jbarnes at virtuousgeek.org>
> Signed-off-by: Eric Anholt <eric at anholt.net>
> (cherry picked from commit 0eb96d6ed38430b72897adde58f5477a6b71757a)
> 
> Signed-off-by: AceLan Kao <acelan.kao at canonical.com>
> ---
>  drivers/gpu/drm/i915/i915_drv.h     |    1 +
>  drivers/gpu/drm/i915/i915_reg.h     |    2 ++
>  drivers/gpu/drm/i915/i915_suspend.c |    2 ++
>  3 files changed, 5 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 88b3eff..602dd76 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -264,6 +264,7 @@ typedef struct drm_i915_private {
>  	u32 saveDSPASURF;
>  	u32 saveDSPATILEOFF;
>  	u32 savePFIT_PGM_RATIOS;
> +	u32 saveBLC_HIST_CTL;
>  	u32 saveBLC_PWM_CTL;
>  	u32 saveBLC_PWM_CTL2;
>  	u32 saveFPB0;
> diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
> index c017fa1..9917749 100644
> --- a/drivers/gpu/drm/i915/i915_reg.h
> +++ b/drivers/gpu/drm/i915/i915_reg.h
> @@ -915,6 +915,8 @@
>  #define   BACKLIGHT_DUTY_CYCLE_SHIFT		(0)
>  #define   BACKLIGHT_DUTY_CYCLE_MASK		(0xffff)
>  
> +#define BLC_HIST_CTL		0x61260
> +
>  /* TV port control */
>  #define TV_CTL			0x68000
>  /** Enables the TV encoder */
> diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
> index 1d04e19..2e4aca6 100644
> --- a/drivers/gpu/drm/i915/i915_suspend.c
> +++ b/drivers/gpu/drm/i915/i915_suspend.c
> @@ -416,6 +416,7 @@ int i915_save_state(struct drm_device *dev)
>  	dev_priv->savePP_CONTROL = I915_READ(PP_CONTROL);
>  	dev_priv->savePFIT_PGM_RATIOS = I915_READ(PFIT_PGM_RATIOS);
>  	dev_priv->saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL);
> +	dev_priv->saveBLC_HIST_CTL = I915_READ(BLC_HIST_CTL);
>  	if (IS_I965G(dev))
>  		dev_priv->saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2);
>  	if (IS_MOBILE(dev) && !IS_I830(dev))
> @@ -560,6 +561,7 @@ int i915_restore_state(struct drm_device *dev)
>  
>  	I915_WRITE(PFIT_PGM_RATIOS, dev_priv->savePFIT_PGM_RATIOS);
>  	I915_WRITE(BLC_PWM_CTL, dev_priv->saveBLC_PWM_CTL);
> +	I915_WRITE(BLC_HIST_CTL, dev_priv->saveBLC_HIST_CTL);
>  	I915_WRITE(PP_ON_DELAYS, dev_priv->savePP_ON_DELAYS);
>  	I915_WRITE(PP_OFF_DELAYS, dev_priv->savePP_OFF_DELAYS);
>  	I915_WRITE(PP_DIVISOR, dev_priv->savePP_DIVISOR);
> -- 
> 1.6.3.3
> 

Simply saves one additional register across suspend/resume.  Look sane.

Acked-by: Andy Whitcroft <apw at canonical.com>

-apw




More information about the kernel-team mailing list