Follow BIOS configuration for Legacy Backlight Brightness.

The backlight control in the LVDS controller can either operate in 'normal'
mode or 'legacy' mode. In legacy mode, it uses the PCI config space register
0xf4 which can range from 0 to 0xff. In normal mode, it reads the range and
current value from the BLC_PWM_CTL register.
This commit is contained in:
Keith Packard 2007-06-21 23:59:38 +01:00
parent d6e46f67ab
commit a67c296538
2 changed files with 36 additions and 6 deletions

View File

@ -1056,6 +1056,14 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
#define RENCLK_GATE_D2 0x6208
#define RAMCLK_GATE_D 0x6210 /* CRL only */
/*
* This is a PCI config space register to manipulate backlight brightness
* It is used when the BLM_LEGACY_MODE is turned on. When enabled, the first
* byte of this config register sets brightness within the range from
* 0 to 0xff
*/
#define LEGACY_BACKLIGHT_BRIGHTNESS 0xf4
#define BLC_PWM_CTL 0x61254
#define BACKLIGHT_MODULATION_FREQ_SHIFT (17)
/**

View File

@ -59,8 +59,18 @@ i830_lvds_set_backlight(xf86OutputPtr output, int level)
I830Ptr pI830 = I830PTR(pScrn);
CARD32 blc_pwm_ctl;
blc_pwm_ctl = INREG(BLC_PWM_CTL) & ~BACKLIGHT_DUTY_CYCLE_MASK;
OUTREG(BLC_PWM_CTL, blc_pwm_ctl | (level << BACKLIGHT_DUTY_CYCLE_SHIFT));
blc_pwm_ctl = INREG(BLC_PWM_CTL);
if (blc_pwm_ctl & BLM_LEGACY_MODE)
{
pciWriteByte (pI830->PciTag,
LEGACY_BACKLIGHT_BRIGHTNESS,
level & 0xff);
}
else
{
blc_pwm_ctl &= ~BACKLIGHT_DUTY_CYCLE_MASK;
OUTREG(BLC_PWM_CTL, blc_pwm_ctl | (level << BACKLIGHT_DUTY_CYCLE_SHIFT));
}
}
/**
@ -71,9 +81,13 @@ i830_lvds_get_max_backlight(xf86OutputPtr output)
{
ScrnInfoPtr pScrn = output->scrn;
I830Ptr pI830 = I830PTR(pScrn);
CARD32 pwm_ctl = INREG(BLC_PWM_CTL);
return ((INREG(BLC_PWM_CTL) & BACKLIGHT_MODULATION_FREQ_MASK) >>
BACKLIGHT_MODULATION_FREQ_SHIFT) * 2;
if (pwm_ctl & BLM_LEGACY_MODE)
return 0xff;
else
return ((pwm_ctl & BACKLIGHT_MODULATION_FREQ_MASK) >>
BACKLIGHT_MODULATION_FREQ_SHIFT) * 2;
}
/**
@ -129,8 +143,16 @@ 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);
dev_priv->backlight_duty_cycle = (pI830->saveBLC_PWM_CTL &
BACKLIGHT_DUTY_CYCLE_MASK);
if (pI830->saveBLC_PWM_CTL & BLM_LEGACY_MODE)
{
dev_priv->backlight_duty_cycle = pciReadByte (pI830->PciTag,
LEGACY_BACKLIGHT_BRIGHTNESS);
}
else
{
dev_priv->backlight_duty_cycle = (pI830->saveBLC_PWM_CTL &
BACKLIGHT_DUTY_CYCLE_MASK);
}
/*
* If the light is off at server startup, just make it full brightness