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