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:
parent
d6e46f67ab
commit
a67c296538
|
|
@ -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)
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Reference in New Issue