diff -u -r xf86-video-ati-6.7.197-orig/src/radeon_driver.c xf86-video-ati-6.7.197/src/radeon_driver.c --- xf86-video-ati-6.7.197-orig/src/radeon_driver.c 2007-12-20 23:21:32.000000000 +0100 +++ xf86-video-ati-6.7.197/src/radeon_driver.c 2008-02-14 20:13:46.000000000 +0100 @@ -5274,6 +5274,70 @@ } #endif +/* Blank screen */ +static void RADEONBlankX(ScrnInfoPtr pScrn) +{ + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); + xf86CrtcPtr crtc; + RADEONCrtcPrivatePtr radeon_crtc; + RADEONInfoPtr info = RADEONPTR(pScrn); + unsigned char *RADEONMMIO = info->MMIO; + int c; + + for (c = 0; c < xf86_config->num_crtc; c++) { + crtc = xf86_config->crtc[c]; + if(!crtc->enabled) + continue; + radeon_crtc = crtc->driver_private; + switch(radeon_crtc->crtc_id) { + case 0: + OUTREGP(RADEON_CRTC_EXT_CNTL, + RADEON_CRTC_DISPLAY_DIS, + ~(RADEON_CRTC_DISPLAY_DIS)); + break; + case 1: + OUTREGP(RADEON_CRTC2_GEN_CNTL, + RADEON_CRTC2_DISP_DIS, + ~(RADEON_CRTC2_DISP_DIS)); + default: + crtc->funcs->dpms(crtc, DPMSModeOff); + break; + } + } +} + +/* Unblank screen */ +static void RADEONUnblankX(ScrnInfoPtr pScrn) +{ + xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn); + xf86CrtcPtr crtc; + RADEONCrtcPrivatePtr radeon_crtc; + RADEONInfoPtr info = RADEONPTR(pScrn); + unsigned char *RADEONMMIO = info->MMIO; + int c; + + for (c = 0; c < xf86_config->num_crtc; c++) { + crtc = xf86_config->crtc[c]; + if(!crtc->enabled) + continue; + radeon_crtc = crtc->driver_private; + switch(radeon_crtc->crtc_id) { + case 0: + OUTREGP(RADEON_CRTC_EXT_CNTL, + RADEON_CRTC_CRT_ON, + ~(RADEON_CRTC_DISPLAY_DIS)); + break; + case 1: + OUTREGP(RADEON_CRTC2_GEN_CNTL, + RADEON_CRTC2_CRT2_ON, + ~(RADEON_CRTC2_DISP_DIS)); + default: + crtc->funcs->dpms(crtc, DPMSModeOn); + break; + } + } +} + static Bool RADEONSaveScreen(ScreenPtr pScreen, int mode) { ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum]; @@ -5287,9 +5351,9 @@ if ((pScrn != NULL) && pScrn->vtSema) { if (unblank) - RADEONUnblank(pScrn); + RADEONUnblankX(pScrn); else - RADEONBlank(pScrn); + RADEONBlankX(pScrn); } return TRUE; }