DPMS: include GPU screens in DPMS code

Otherwise, displays driven by GPU screens remain on all the time.

Signed-off-by: Aaron Plattner <aplattner@nvidia.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Keith Packard <keithp@keithp.com>
This commit is contained in:
Aaron Plattner 2013-03-05 13:04:46 -08:00 committed by Keith Packard
parent dd4ab8b572
commit 6238bd68bd

View File

@ -130,6 +130,19 @@ DPMSClose(ScreenPtr pScreen)
return pScreen->CloseScreen(pScreen);
}
static void
DPMSSetScreen(ScrnInfoPtr pScrn, int level)
{
ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
DPMSPtr pDPMS = dixLookupPrivate(&pScreen->devPrivates, DPMSKey);
if (pDPMS && pScrn->DPMSSet && pDPMS->Enabled && pScrn->vtSema) {
xf86VGAarbiterLock(pScrn);
pScrn->DPMSSet(pScrn, level, 0);
xf86VGAarbiterUnlock(pScrn);
}
}
/*
* DPMSSet --
* Device dependent DPMS mode setting hook. This is called whenever
@ -139,8 +152,6 @@ int
DPMSSet(ClientPtr client, int level)
{
int rc, i;
DPMSPtr pDPMS;
ScrnInfoPtr pScrn;
DPMSPowerLevel = level;
@ -155,17 +166,23 @@ DPMSSet(ClientPtr client, int level)
/* For each screen, set the DPMS level */
for (i = 0; i < xf86NumScreens; i++) {
pScrn = xf86Screens[i];
pDPMS = dixLookupPrivate(&screenInfo.screens[i]->devPrivates, DPMSKey);
if (pDPMS && pScrn->DPMSSet && pDPMS->Enabled && pScrn->vtSema) {
xf86VGAarbiterLock(pScrn);
pScrn->DPMSSet(pScrn, level, 0);
xf86VGAarbiterUnlock(pScrn);
}
DPMSSetScreen(xf86Screens[i], level);
}
for (i = 0; i < xf86NumGPUScreens; i++) {
DPMSSetScreen(xf86GPUScreens[i], level);
}
return Success;
}
static Bool
DPMSSupportedOnScreen(ScrnInfoPtr pScrn)
{
ScreenPtr pScreen = xf86ScrnToScreen(pScrn);
DPMSPtr pDPMS = dixLookupPrivate(&pScreen->devPrivates, DPMSKey);
return pDPMS && pScrn->DPMSSet;
}
/*
* DPMSSupported --
* Return TRUE if any screen supports DPMS.
@ -174,8 +191,6 @@ Bool
DPMSSupported(void)
{
int i;
DPMSPtr pDPMS;
ScrnInfoPtr pScrn;
if (DPMSKey == NULL) {
return FALSE;
@ -183,9 +198,11 @@ DPMSSupported(void)
/* For each screen, check if DPMS is supported */
for (i = 0; i < xf86NumScreens; i++) {
pScrn = xf86Screens[i];
pDPMS = dixLookupPrivate(&screenInfo.screens[i]->devPrivates, DPMSKey);
if (pDPMS && pScrn->DPMSSet)
if (DPMSSupportedOnScreen(xf86Screens[i]))
return TRUE;
}
for (i = 0; i < xf86NumGPUScreens; i++) {
if (DPMSSupportedOnScreen(xf86GPUScreens[i]))
return TRUE;
}
return FALSE;