aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw
diff options
context:
space:
mode:
Diffstat (limited to 'xorg-server/hw')
-rw-r--r--xorg-server/hw/xfree86/common/xf86DPMS.c45
1 files changed, 31 insertions, 14 deletions
diff --git a/xorg-server/hw/xfree86/common/xf86DPMS.c b/xorg-server/hw/xfree86/common/xf86DPMS.c
index ef4a2c19b..3f1e142c7 100644
--- a/xorg-server/hw/xfree86/common/xf86DPMS.c
+++ b/xorg-server/hw/xfree86/common/xf86DPMS.c
@@ -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;