diff --git a/src/i830_lvds.c b/src/i830_lvds.c index a3a56f7..3de4351 100644 --- a/src/i830_lvds.c +++ b/src/i830_lvds.c @@ -116,11 +116,11 @@ i830_set_lvds_backlight_method(xf86OutputPtr output) } else if (IS_I965GM(pI830)) { blc_pwm_ctl2 = INREG(BLC_PWM_CTL2); if (blc_pwm_ctl2 & BLM_LEGACY_MODE2) - method = COMBO; + method = LEGACY; } else { blc_pwm_ctl = INREG(BLC_PWM_CTL); if (blc_pwm_ctl & BLM_LEGACY_MODE) - method = COMBO; + method = LEGACY; } pI830->backlight_control_method = method; @@ -363,6 +363,12 @@ i830SetLVDSPanelPower(xf86OutputPtr output, Bool on) dev_priv->set_backlight(output, dev_priv->backlight_duty_cycle); } else { + /* + * Only save the current backlight value if we're going from + * on to off. + */ + if (INREG(PP_CONTROL) & POWER_TARGET_ON) + dev_priv->backlight_duty_cycle = dev_priv->get_backlight(output); dev_priv->set_backlight(output, 0); OUTREG(PP_CONTROL, INREG(PP_CONTROL) & ~POWER_TARGET_ON); @@ -399,12 +405,6 @@ i830_lvds_save (xf86OutputPtr output) pI830->savePP_CYCLE = INREG(PP_CYCLE); pI830->saveBLC_PWM_CTL = INREG(BLC_PWM_CTL); dev_priv->backlight_duty_cycle = dev_priv->get_backlight(output); - - /* - * If the light is off at server startup, just make it full brightness - */ - if (dev_priv->backlight_duty_cycle == 0) - dev_priv->backlight_duty_cycle = dev_priv->backlight_max; } static void @@ -1015,7 +1015,7 @@ i830_lvds_init(ScrnInfoPtr pScrn) break; } - dev_priv->backlight_duty_cycle = dev_priv->backlight_max; + dev_priv->backlight_duty_cycle = dev_priv->get_backlight(output); return;