summaryrefslogtreecommitdiff
path: root/src/i830_driver.c
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2007-03-20 14:33:53 -0700
committerEric Anholt <eric@anholt.net>2007-03-20 14:33:53 -0700
commit223944878cf38f86580df5a7d3102d86cfc061b9 (patch)
tree63d16aabbc2c0bb667beb43bc6dd738139fdf4e6 /src/i830_driver.c
parent4c4faf260eb4dad1b1919c6168fa9ef477b98a39 (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.c5
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);