diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_ums.c')
| -rw-r--r-- | drivers/gpu/drm/i915/i915_ums.c | 35 | 
1 files changed, 35 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/i915_ums.c b/drivers/gpu/drm/i915/i915_ums.c index 967da4772c4..480da593e6c 100644 --- a/drivers/gpu/drm/i915/i915_ums.c +++ b/drivers/gpu/drm/i915/i915_ums.c @@ -270,6 +270,22 @@ void i915_save_display_reg(struct drm_device *dev)  	}  	/* FIXME: regfile.save TV & SDVO state */ +	/* Backlight */ +	if (INTEL_INFO(dev)->gen <= 4) +		pci_read_config_byte(dev->pdev, PCI_LBPC, +				     &dev_priv->regfile.saveLBB); + +	if (HAS_PCH_SPLIT(dev)) { +		dev_priv->regfile.saveBLC_PWM_CTL = I915_READ(BLC_PWM_PCH_CTL1); +		dev_priv->regfile.saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_PCH_CTL2); +		dev_priv->regfile.saveBLC_CPU_PWM_CTL = I915_READ(BLC_PWM_CPU_CTL); +		dev_priv->regfile.saveBLC_CPU_PWM_CTL2 = I915_READ(BLC_PWM_CPU_CTL2); +	} else { +		dev_priv->regfile.saveBLC_PWM_CTL = I915_READ(BLC_PWM_CTL); +		if (INTEL_INFO(dev)->gen >= 4) +			dev_priv->regfile.saveBLC_PWM_CTL2 = I915_READ(BLC_PWM_CTL2); +	} +  	return;  } @@ -280,6 +296,25 @@ void i915_restore_display_reg(struct drm_device *dev)  	int dpll_b_reg, fpb0_reg, fpb1_reg;  	int i; +	/* Backlight */ +	if (INTEL_INFO(dev)->gen <= 4) +		pci_write_config_byte(dev->pdev, PCI_LBPC, +				      dev_priv->regfile.saveLBB); + +	if (HAS_PCH_SPLIT(dev)) { +		I915_WRITE(BLC_PWM_PCH_CTL1, dev_priv->regfile.saveBLC_PWM_CTL); +		I915_WRITE(BLC_PWM_PCH_CTL2, dev_priv->regfile.saveBLC_PWM_CTL2); +		/* NOTE: BLC_PWM_CPU_CTL must be written after BLC_PWM_CPU_CTL2; +		 * otherwise we get blank eDP screen after S3 on some machines +		 */ +		I915_WRITE(BLC_PWM_CPU_CTL2, dev_priv->regfile.saveBLC_CPU_PWM_CTL2); +		I915_WRITE(BLC_PWM_CPU_CTL, dev_priv->regfile.saveBLC_CPU_PWM_CTL); +	} else { +		if (INTEL_INFO(dev)->gen >= 4) +			I915_WRITE(BLC_PWM_CTL2, dev_priv->regfile.saveBLC_PWM_CTL2); +		I915_WRITE(BLC_PWM_CTL, dev_priv->regfile.saveBLC_PWM_CTL); +	} +  	/* Display port ratios (must be done before clock is set) */  	if (SUPPORTS_INTEGRATED_DP(dev)) {  		I915_WRITE(_PIPEA_DATA_M_G4X, dev_priv->regfile.savePIPEA_GMCH_DATA_M);  | 
