diff -urN xf86-video-intel-2.2.0.old/src/i830_lvds.c xf86-video-intel-2.2.0/src/i830_lvds.c --- xf86-video-intel-2.2.0.old/src/i830_lvds.c 2008-01-04 07:00:59.000000000 +0400 +++ xf86-video-intel-2.2.0/src/i830_lvds.c 2008-01-04 07:11:37.451419732 +0400 @@ -234,6 +234,12 @@ #endif } + /* + * Don't set the lowest bit in combo configs since it can act as a flag for + * max brightness. + */ + level <<= 1; + blc_pwm_ctl = INREG(BLC_PWM_CTL); blc_pwm_ctl &= ~BACKLIGHT_DUTY_CYCLE_MASK; OUTREG(BLC_PWM_CTL, blc_pwm_ctl | (level << BACKLIGHT_DUTY_CYCLE_SHIFT)); @@ -248,7 +254,17 @@ blc_pwm_ctl = INREG(BLC_PWM_CTL); blc_pwm_ctl &= BACKLIGHT_DUTY_CYCLE_MASK; - return blc_pwm_ctl; + + /* Since we don't use the low bit when using combo, the value is halved */ + + return blc_pwm_ctl >> 1; +} + +static int +i830_lvds_get_backlight_max_combo(xf86OutputPtr output) +{ + /* Since we don't set the low bit when using combo, the range is halved */ + return i830_lvds_get_backlight_max_native(output) >> 1; } /* @@ -661,7 +677,7 @@ dev_priv->set_backlight = i830_lvds_set_backlight_combo; dev_priv->get_backlight = i830_lvds_get_backlight_combo; dev_priv->backlight_max = - i830_lvds_get_backlight_max_native(output); + i830_lvds_get_backlight_max_combo(output); break; case KERNEL: dev_priv->set_backlight = i830_lvds_set_backlight_kernel; @@ -1003,7 +1019,7 @@ case COMBO: dev_priv->set_backlight = i830_lvds_set_backlight_combo; dev_priv->get_backlight = i830_lvds_get_backlight_combo; - dev_priv->backlight_max = i830_lvds_get_backlight_max_native(output); + dev_priv->backlight_max = i830_lvds_get_backlight_max_combo(output); break; case KERNEL: dev_priv->set_backlight = i830_lvds_set_backlight_kernel;