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:
parent
dd4ab8b572
commit
6238bd68bd
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue
Block a user