diff --git a/src/i810_reg.h b/src/i810_reg.h index 248df04..d873f4a 100644 --- a/src/i810_reg.h +++ b/src/i810_reg.h @@ -1064,6 +1064,7 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ #define LEGACY_BACKLIGHT_BRIGHTNESS 0xf4 +#define BLC_PWM_CTL2 0x61250 #define BLC_PWM_CTL 0x61254 #define BACKLIGHT_MODULATION_FREQ_SHIFT (17) /** diff --git a/src/i830.h b/src/i830.h index bf072a1..a8de0e6 100644 --- a/src/i830.h +++ b/src/i830.h @@ -532,6 +532,7 @@ typedef struct _I830Rec { CARD32 savePaletteB[256]; CARD32 saveSWF[17]; CARD32 saveBLC_PWM_CTL; + CARD32 saveBLC_PWM_CTL2; CARD32 saveFBC_CFB_BASE; CARD32 saveFBC_LL_BASE; CARD32 saveFBC_CONTROL2; diff --git a/src/i830_lvds.c b/src/i830_lvds.c index 246008b..1b5e9aa 100644 --- a/src/i830_lvds.c +++ b/src/i830_lvds.c @@ -57,10 +57,11 @@ i830_lvds_set_backlight(xf86OutputPtr output, int level) { ScrnInfoPtr pScrn = output->scrn; I830Ptr pI830 = I830PTR(pScrn); - CARD32 blc_pwm_ctl; + CARD32 blc_pwm_ctl, blc_pwm_ctl2; blc_pwm_ctl = INREG(BLC_PWM_CTL); - if (blc_pwm_ctl & BLM_LEGACY_MODE) + blc_pwm_ctl2 = INREG(BLC_PWM_CTL2); + if (blc_pwm_ctl2 & BLM_LEGACY_MODE) { pciWriteByte (pI830->PciTag, LEGACY_BACKLIGHT_BRIGHTNESS, @@ -81,9 +82,9 @@ i830_lvds_get_max_backlight(xf86OutputPtr output) { ScrnInfoPtr pScrn = output->scrn; I830Ptr pI830 = I830PTR(pScrn); - CARD32 pwm_ctl = INREG(BLC_PWM_CTL); + CARD32 pwm_ctl = INREG(BLC_PWM_CTL), pwm_ctl2 = INREG(BLC_PWM_CTL2); - if (pwm_ctl & BLM_LEGACY_MODE) + if (pwm_ctl2 & BLM_LEGACY_MODE) return 0xff; else return ((pwm_ctl & BACKLIGHT_MODULATION_FREQ_MASK) >> @@ -143,7 +144,8 @@ i830_lvds_save (xf86OutputPtr output) pI830->savePP_CONTROL = INREG(PP_CONTROL); pI830->savePP_CYCLE = INREG(PP_CYCLE); pI830->saveBLC_PWM_CTL = INREG(BLC_PWM_CTL); - if (pI830->saveBLC_PWM_CTL & BLM_LEGACY_MODE) + pI830->saveBLC_PWM_CTL2 = INREG(BLC_PWM_CTL2); + if (pI830->saveBLC_PWM_CTL2 & BLM_LEGACY_MODE) { dev_priv->backlight_duty_cycle = pciReadByte (pI830->PciTag, LEGACY_BACKLIGHT_BRIGHTNESS); @@ -168,6 +170,7 @@ i830_lvds_restore(xf86OutputPtr output) I830Ptr pI830 = I830PTR(pScrn); OUTREG(BLC_PWM_CTL, pI830->saveBLC_PWM_CTL); + OUTREG(BLC_PWM_CTL2, pI830->saveBLC_PWM_CTL2); OUTREG(LVDSPP_ON, pI830->savePP_ON); OUTREG(LVDSPP_OFF, pI830->savePP_OFF); OUTREG(PP_CYCLE, pI830->savePP_CYCLE);