diff options
author | Eric Anholt <eric@anholt.net> | 2008-06-10 11:32:49 -0700 |
---|---|---|
committer | Eric Anholt <eric@anholt.net> | 2008-06-10 11:32:49 -0700 |
commit | d0fda9d24c5fe4870cdbd2ba0213091165666a8e (patch) | |
tree | ca1597e07d65cacf555ebca1b526cb2d5785a2d9 | |
parent | cc98d41df63f1ee2561440fab3aa471a80a12920 (diff) | |
parent | 79f94ee3c4652019395b9c329d94f7779c558571 (diff) |
Merge branch 'master' into drm-gem
-rw-r--r-- | src/i830.h | 1 | ||||
-rw-r--r-- | src/i830_driver.c | 16 | ||||
-rw-r--r-- | src/i830_quirks.c | 4 | ||||
-rw-r--r-- | src/i830_tv.c | 4 |
4 files changed, 19 insertions, 6 deletions
@@ -655,6 +655,7 @@ typedef struct _I830Rec { uint32_t saveRENCLK_GATE_D2; uint32_t saveDSPCLK_GATE_D; uint32_t saveRAMCLK_GATE_D; + uint32_t savePWRCTXA; enum last_3d *last_3d; diff --git a/src/i830_driver.c b/src/i830_driver.c index a04cfbca..35df0c75 100644 --- a/src/i830_driver.c +++ b/src/i830_driver.c @@ -2099,6 +2099,9 @@ SaveHWState(ScrnInfoPtr pScrn) pI830->saveRAMCLK_GATE_D = INREG(RAMCLK_GATE_D); } + if (IS_I965GM(pI830) || IS_IGD_GM(pI830)) + pI830->savePWRCTXA = INREG(PWRCTXA); + if (IS_MOBILE(pI830) && !IS_I830(pI830)) pI830->saveLVDS = INREG(LVDS); pI830->savePFIT_CONTROL = INREG(PFIT_CONTROL); @@ -2165,6 +2168,10 @@ RestoreHWState(ScrnInfoPtr pScrn) OUTREG(RENCLK_GATE_D2, pI830->saveRENCLK_GATE_D2); OUTREG(RAMCLK_GATE_D, pI830->saveRAMCLK_GATE_D); } + + if (IS_I965GM(pI830) || IS_IGD_GM(pI830)) + OUTREG(PWRCTXA, pI830->savePWRCTXA); + /* * Pipe regs * To restore the saved state, we first need to program the PLL regs, @@ -2896,9 +2903,6 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv) return FALSE; } - if (pI830->power_context) - OUTREG(PWRCTXA, pI830->power_context->offset | PWRCTX_EN); - I830UnmapMMIO(pScrn); i830_fixup_mtrrs(pScrn); @@ -3370,6 +3374,9 @@ I830EnterVT(int scrnIndex, int flags) i830_init_clock_gating(pScrn); + if (pI830->power_context) + OUTREG(PWRCTXA, pI830->power_context->offset | PWRCTX_EN); + /* Clear the framebuffer */ memset(pI830->FbBase + pScrn->fbOffset, 0, pScrn->virtualY * pScrn->displayWidth * pI830->cpp); @@ -3517,9 +3524,6 @@ I830CloseScreen(int scrnIndex, ScreenPtr pScreen) } #endif - if (IS_I965GM(pI830) || IS_IGD_GM(pI830)) - OUTREG(PWRCTXA, 0); - if (I830IsPrimary(pScrn)) { xf86GARTCloseScreen(scrnIndex); diff --git a/src/i830_quirks.c b/src/i830_quirks.c index b1c14238..1bd8885c 100644 --- a/src/i830_quirks.c +++ b/src/i830_quirks.c @@ -237,6 +237,8 @@ static i830_quirk i830_quirk_list[] = { { PCI_CHIP_I965_GM, 0x1028, 0x0256, quirk_ignore_tv }, /* Dell Inspiron 1318 */ { PCI_CHIP_I965_GM, 0x1028, 0x0286, quirk_ignore_tv }, + /* Dell Vostro A840 (LP: #235155) */ + { PCI_CHIP_I965_GM, 0x1028, 0x0298, quirk_ignore_tv }, /* Lenovo Napa TV (use dmi)*/ { PCI_CHIP_I945_GM, 0x17aa, SUBSYS_ANY, quirk_lenovo_tv_dmi }, @@ -272,6 +274,8 @@ static i830_quirk i830_quirk_list[] = { { PCI_CHIP_I855_GM, 0x1028, 0x0139, quirk_pipea_force }, /* Dell Latitude D500 needs pipe A force quirk */ { PCI_CHIP_I855_GM, 0x1028, 0x0152, quirk_pipea_force }, + /* Dell Latitude D505 needs pipe A force quirk (LP: #235643) */ + { PCI_CHIP_I855_GM, 0x1028, 0x0163, quirk_pipea_force }, /* Dell Latitude X300 needs pipe A force quirk */ { PCI_CHIP_I855_GM, 0x1028, 0x014f, quirk_pipea_force }, /* Dell Inspiron 510m needs pipe A force quirk */ diff --git a/src/i830_tv.c b/src/i830_tv.c index 6adb9f2f..cde929a7 100644 --- a/src/i830_tv.c +++ b/src/i830_tv.c @@ -788,6 +788,7 @@ i830_tv_dpms(xf86OutputPtr output, int mode) OUTREG(TV_CTL, INREG(TV_CTL) & ~TV_ENC_ENABLE); break; } + i830WaitForVblank(pScrn); } static void @@ -920,6 +921,7 @@ i830_tv_restore(xf86OutputPtr output) OUTREG(TV_DAC, dev_priv->save_TV_DAC); OUTREG(TV_CTL, dev_priv->save_TV_CTL); + i830WaitForVblank(pScrn); } static const tv_mode_t * @@ -1237,6 +1239,7 @@ i830_tv_mode_set(xf86OutputPtr output, DisplayModePtr mode, OUTREG(TV_V_CHROMA_0 + (i<<2), tv_mode->filter_table[j++]); OUTREG(TV_DAC, 0); OUTREG(TV_CTL, tv_ctl); + i830WaitForVblank(pScrn); } static const DisplayModeRec reported_modes[] = { @@ -1303,6 +1306,7 @@ i830_tv_detect_type (xf86CrtcPtr crtc, tv_dac = INREG(TV_DAC); OUTREG(TV_DAC, save_tv_dac); OUTREG(TV_CTL, save_tv_ctl); + i830WaitForVblank(pScrn); } /* * A B C |