Replace the custom SaveScreen function with a generic function calling DPMS.
With this, additional power saving occurs with the core screensaver, for example by turning off LVDS backlight.
This commit is contained in:
parent
7161e824e8
commit
8eb861fb61
|
|
@ -316,7 +316,6 @@ const char *i830_output_type_names[] = {
|
|||
|
||||
static void i830AdjustFrame(int scrnIndex, int x, int y, int flags);
|
||||
static Bool I830CloseScreen(int scrnIndex, ScreenPtr pScreen);
|
||||
static Bool I830SaveScreen(ScreenPtr pScreen, int unblack);
|
||||
static Bool I830EnterVT(int scrnIndex, int flags);
|
||||
static CARD32 I830CheckDevicesTimer(OsTimerPtr timer, CARD32 now, pointer arg);
|
||||
static Bool SaveHWState(ScrnInfoPtr pScrn);
|
||||
|
|
@ -2891,7 +2890,7 @@ I830ScreenInit(int scrnIndex, ScreenPtr pScreen, int argc, char **argv)
|
|||
xf86DrvMsg(pScrn->scrnIndex, X_INFO, "direct rendering: Not available\n");
|
||||
#endif
|
||||
|
||||
pScreen->SaveScreen = I830SaveScreen;
|
||||
pScreen->SaveScreen = xf86SaveScreen;
|
||||
pI830->CloseScreen = pScreen->CloseScreen;
|
||||
pScreen->CloseScreen = I830CloseScreen;
|
||||
|
||||
|
|
@ -3262,57 +3261,6 @@ I830SwitchMode(int scrnIndex, DisplayModePtr mode, int flags)
|
|||
return ret;
|
||||
}
|
||||
|
||||
static Bool
|
||||
I830SaveScreen(ScreenPtr pScreen, int mode)
|
||||
{
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
xf86CrtcConfigPtr xf86_config = XF86_CRTC_CONFIG_PTR(pScrn);
|
||||
I830Ptr pI830 = I830PTR(pScrn);
|
||||
Bool on = xf86IsUnblank(mode);
|
||||
CARD32 temp, ctrl, base, surf;
|
||||
int i;
|
||||
|
||||
DPRINTF(PFX, "I830SaveScreen: %d, on is %s\n", mode, BOOLTOSTRING(on));
|
||||
|
||||
if (pScrn->vtSema) {
|
||||
for (i = 0; i < xf86_config->num_crtc; i++) {
|
||||
if (i == 0) {
|
||||
ctrl = DSPACNTR;
|
||||
base = DSPABASE;
|
||||
surf = DSPASURF;
|
||||
} else {
|
||||
ctrl = DSPBCNTR;
|
||||
base = DSPBADDR;
|
||||
surf = DSPBSURF;
|
||||
}
|
||||
if (xf86_config->crtc[i]->enabled) {
|
||||
temp = INREG(ctrl);
|
||||
if (on)
|
||||
temp |= DISPLAY_PLANE_ENABLE;
|
||||
else
|
||||
temp &= ~DISPLAY_PLANE_ENABLE;
|
||||
OUTREG(ctrl, temp);
|
||||
/* Flush changes */
|
||||
temp = INREG(base);
|
||||
OUTREG(base, temp);
|
||||
if (IS_I965G(pI830)) {
|
||||
temp = INREG(surf);
|
||||
OUTREG(surf, temp);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (pI830->CursorInfoRec && !pI830->SWCursor && pI830->cursorOn) {
|
||||
if (on)
|
||||
pI830->CursorInfoRec->ShowCursor(pScrn);
|
||||
else
|
||||
pI830->CursorInfoRec->HideCursor(pScrn);
|
||||
pI830->cursorOn = TRUE;
|
||||
}
|
||||
}
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
static Bool
|
||||
I830CloseScreen(int scrnIndex, ScreenPtr pScreen)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -1237,6 +1237,9 @@ xf86DPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
|
|||
xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR(pScrn);
|
||||
int i;
|
||||
|
||||
if (!pScrn->vtSema)
|
||||
return;
|
||||
|
||||
if (mode == DPMSModeOff) {
|
||||
for (i = 0; i < config->num_output; i++) {
|
||||
xf86OutputPtr output = config->output[i];
|
||||
|
|
@ -1260,6 +1263,25 @@ xf86DPMSSet(ScrnInfoPtr pScrn, int mode, int flags)
|
|||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Implement the screensaver by just calling down into the driver DPMS hooks.
|
||||
*
|
||||
* Even for monitors with no DPMS support, by the definition of our DPMS hooks,
|
||||
* the outputs will still get disabled (blanked).
|
||||
*/
|
||||
Bool
|
||||
xf86SaveScreen(ScreenPtr pScreen, int mode)
|
||||
{
|
||||
ScrnInfoPtr pScrn = xf86Screens[pScreen->myNum];
|
||||
|
||||
if (xf86IsUnblank(mode))
|
||||
xf86DPMSSet(pScrn, DPMSModeOn, 0);
|
||||
else
|
||||
xf86DPMSSet(pScrn, DPMSModeOff, 0);
|
||||
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
#ifdef RANDR_12_INTERFACE
|
||||
|
||||
#define EDID_ATOM_NAME "EDID_DATA"
|
||||
|
|
|
|||
|
|
@ -452,6 +452,9 @@ xf86InitialConfiguration (ScrnInfoPtr pScrn);
|
|||
void
|
||||
xf86DPMSSet(ScrnInfoPtr pScrn, int PowerManagementMode, int flags);
|
||||
|
||||
Bool
|
||||
xf86SaveScreen(ScreenPtr pScreen, int mode);
|
||||
|
||||
/**
|
||||
* Set the EDID information for the specified output
|
||||
*/
|
||||
|
|
|
|||
Loading…
Reference in New Issue