diff options
Diffstat (limited to 'meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-i915-opregion.patch')
-rw-r--r-- | meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-i915-opregion.patch | 43 |
1 files changed, 43 insertions, 0 deletions
diff --git a/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-i915-opregion.patch b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-i915-opregion.patch new file mode 100644 index 0000000000..a9b5e03cec --- /dev/null +++ b/meta-moblin/packages/linux/linux-moblin-2.6.31.5/linux-2.6.31-drm-i915-opregion.patch | |||
@@ -0,0 +1,43 @@ | |||
1 | diff --git a/drivers/gpu/drm/i915/i915_opregion.c b/drivers/gpu/drm/i915/i915_opregion.c | ||
2 | index e4b4e88..2d51935 100644 | ||
3 | --- a/drivers/gpu/drm/i915/i915_opregion.c | ||
4 | +++ b/drivers/gpu/drm/i915/i915_opregion.c | ||
5 | @@ -148,6 +148,7 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) | ||
6 | struct drm_i915_private *dev_priv = dev->dev_private; | ||
7 | struct opregion_asle *asle = dev_priv->opregion.asle; | ||
8 | u32 blc_pwm_ctl, blc_pwm_ctl2; | ||
9 | + u32 max_backlight, level, shift; | ||
10 | |||
11 | if (!(bclp & ASLE_BCLP_VALID)) | ||
12 | return ASLE_BACKLIGHT_FAIL; | ||
13 | @@ -157,14 +158,25 @@ static u32 asle_set_backlight(struct drm_device *dev, u32 bclp) | ||
14 | return ASLE_BACKLIGHT_FAIL; | ||
15 | |||
16 | blc_pwm_ctl = I915_READ(BLC_PWM_CTL); | ||
17 | - blc_pwm_ctl &= ~BACKLIGHT_DUTY_CYCLE_MASK; | ||
18 | blc_pwm_ctl2 = I915_READ(BLC_PWM_CTL2); | ||
19 | |||
20 | - if (blc_pwm_ctl2 & BLM_COMBINATION_MODE) | ||
21 | + if (IS_I965G(dev) && (blc_pwm_ctl2 & BLM_COMBINATION_MODE)) | ||
22 | pci_write_config_dword(dev->pdev, PCI_LBPC, bclp); | ||
23 | - else | ||
24 | - I915_WRITE(BLC_PWM_CTL, blc_pwm_ctl | ((bclp * 0x101)-1)); | ||
25 | - | ||
26 | + else { | ||
27 | + if (IS_IGD(dev)) { | ||
28 | + blc_pwm_ctl &= ~(BACKLIGHT_DUTY_CYCLE_MASK - 1); | ||
29 | + max_backlight = (blc_pwm_ctl & BACKLIGHT_MODULATION_FREQ_MASK) >> | ||
30 | + BACKLIGHT_MODULATION_FREQ_SHIFT; | ||
31 | + shift = BACKLIGHT_DUTY_CYCLE_SHIFT + 1; | ||
32 | + } else { | ||
33 | + blc_pwm_ctl &= ~BACKLIGHT_DUTY_CYCLE_MASK; | ||
34 | + max_backlight = ((blc_pwm_ctl & BACKLIGHT_MODULATION_FREQ_MASK) >> | ||
35 | + BACKLIGHT_MODULATION_FREQ_SHIFT) * 2; | ||
36 | + shift = BACKLIGHT_DUTY_CYCLE_SHIFT; | ||
37 | + } | ||
38 | + level = (bclp * max_backlight) / 255; | ||
39 | + I915_WRITE(BLC_PWM_CTL, blc_pwm_ctl | (level << shift)); | ||
40 | + } | ||
41 | asle->cblv = (bclp*0x64)/0xff | ASLE_CBLV_VALID; | ||
42 | |||
43 | return 0; | ||