diff options
author | Egbert Eich <eich@suse.de> | 2005-05-23 09:50:20 +0000 |
---|---|---|
committer | Egbert Eich <eich@suse.de> | 2005-05-23 09:50:20 +0000 |
commit | 0845d1db801ae74688464bd4c41a7e40e4b50186 (patch) | |
tree | 655817fdedffbde8a1d58521b30ccb4fd3a46360 | |
parent | 74b86b036def72e5180a46871b8452ba9eea9bb1 (diff) |
Explicitely disable DPMS power states during close screen. Fix macro that
takes a value and a mask of bits to modify to be behave evquvalently if
the bits that should remain unchanged are set or unset in the value
(Bugzilla #3369).
-rw-r--r-- | src/r128_reg.h | 4 | ||||
-rw-r--r-- | src/radeon_driver.c | 13 | ||||
-rw-r--r-- | src/radeon_macros.h | 4 |
3 files changed, 11 insertions, 10 deletions
diff --git a/src/r128_reg.h b/src/r128_reg.h index 31883e3d..721a72c7 100644 --- a/src/r128_reg.h +++ b/src/r128_reg.h @@ -68,7 +68,7 @@ do { \ CARD32 tmp = INREG(addr); \ tmp &= (mask); \ - tmp |= (val); \ + tmp |= ((val) & ~(mask)); \ OUTREG(addr, tmp); \ } while (0) @@ -84,7 +84,7 @@ do { \ CARD32 tmp = INPLL(pScrn, addr); \ tmp &= (mask); \ - tmp |= (val); \ + tmp |= ((val) & ~(mask)); \ OUTPLL(addr, tmp); \ } while (0) diff --git a/src/radeon_driver.c b/src/radeon_driver.c index e0a488e9..3e4564ef 100644 --- a/src/radeon_driver.c +++ b/src/radeon_driver.c @@ -8209,6 +8209,7 @@ static Bool RADEONCloseScreen(int scrnIndex, ScreenPtr pScreen) } if (pScrn->vtSema) { + RADEONDisplayPowerManagementSet(pScrn, DPMSModeOn, 0); RADEONRestore(pScrn); } RADEONUnmapMem(pScrn); @@ -8392,15 +8393,15 @@ static void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, /* Screen: Off; HSync: Off, VSync: On */ if (info->IsSecondary) OUTREGP(RADEON_CRTC2_GEN_CNTL, - RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS, + (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS), ~mask2); else { if (info->MergedFB) OUTREGP(RADEON_CRTC2_GEN_CNTL, - RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS, + (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_HSYNC_DIS), ~mask2); OUTREGP(RADEON_CRTC_EXT_CNTL, - RADEON_CRTC_DISPLAY_DIS | RADEON_CRTC_HSYNC_DIS, + (RADEON_CRTC_DISPLAY_DIS | RADEON_CRTC_HSYNC_DIS), ~mask1); } break; @@ -8409,15 +8410,15 @@ static void RADEONDisplayPowerManagementSet(ScrnInfoPtr pScrn, /* Screen: Off; HSync: On, VSync: Off */ if (info->IsSecondary) OUTREGP(RADEON_CRTC2_GEN_CNTL, - RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS, + (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS), ~mask2); else { if (info->MergedFB) OUTREGP(RADEON_CRTC2_GEN_CNTL, - RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS, + (RADEON_CRTC2_DISP_DIS | RADEON_CRTC2_VSYNC_DIS), ~mask2); OUTREGP(RADEON_CRTC_EXT_CNTL, - RADEON_CRTC_DISPLAY_DIS | RADEON_CRTC_VSYNC_DIS, + (RADEON_CRTC_DISPLAY_DIS | RADEON_CRTC_VSYNC_DIS), ~mask1); } break; diff --git a/src/radeon_macros.h b/src/radeon_macros.h index 5b173cc0..b121a95b 100644 --- a/src/radeon_macros.h +++ b/src/radeon_macros.h @@ -78,7 +78,7 @@ do { \ CARD32 tmp = INREG(addr); \ tmp &= (mask); \ - tmp |= (val); \ + tmp |= ((val) & ~(mask)); \ OUTREG(addr, tmp); \ } while (0) @@ -90,7 +90,7 @@ do { \ do { \ CARD32 tmp_ = INPLL(pScrn, addr); \ tmp_ &= (mask); \ - tmp_ |= (val); \ + tmp_ |= ((val) & ~(mask)); \ OUTPLL(pScrn, addr, tmp_); \ } while (0) |