diff options
author | Eric Anholt <eric@anholt.net> | 2007-03-20 14:33:53 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2007-03-20 14:33:53 -0700 |
commit | 223944878cf38f86580df5a7d3102d86cfc061b9 (patch) | |
tree | 63d16aabbc2c0bb667beb43bc6dd738139fdf4e6 /src/i830_driver.c | |
parent | 4c4faf260eb4dad1b1919c6168fa9ef477b98a39 (diff) |
Attempt to fix single/dual-channel issues on i9xx LVDS panels.
- Use the existing single/dual-channel state when available, as changing it
doesn't appear to work out.
- Set the power state of the CLKB and B0-B3 pairs according to whether
choose to go dual-channel or not.
- Restore the LVDS register at the appropriate point (before DPLLs are
re-programmed.
Diffstat (limited to 'src/i830_driver.c')
-rw-r--r-- | src/i830_driver.c | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/src/i830_driver.c b/src/i830_driver.c index c6aea5cf..f41beb0b 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -1729,6 +1729,8 @@ SaveHWState(ScrnInfoPtr pScrn) pI830->saveSWF[15] = INREG(SWF31); pI830->saveSWF[16] = INREG(SWF32); + if (IS_MOBILE(pI830) && !IS_I830(pI830)) + pI830->saveLVDS = INREG(LVDS); pI830->savePFIT_CONTROL = INREG(PFIT_CONTROL); for (i = 0; i < xf86_config->num_output; i++) { @@ -1771,6 +1773,9 @@ RestoreHWState(ScrnInfoPtr pScrn) } i830WaitForVblank(pScrn); + if (IS_MOBILE(pI830) && !IS_I830(pI830)) + OUTREG(LVDS, pI830->saveLVDS); + if (!IS_I830(pI830) && !IS_845G(pI830)) OUTREG(PFIT_CONTROL, pI830->savePFIT_CONTROL); |