aboutsummaryrefslogtreecommitdiff
path: root/xorg-server/hw/xfree86/common/xf86DPMS.c
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2013-03-06 08:39:27 +0100
committermarha <marha@users.sourceforge.net>2013-03-06 08:39:27 +0100
commitb5acb643ab1a86b31409900a7c03281fcc48c8e3 (patch)
tree85db12bb6d437f616b2f91d547426d0e2d3173e6 /xorg-server/hw/xfree86/common/xf86DPMS.c
parent6ddd685990187ec5f5996a16951a3d780c820272 (diff)
parent84798668341b15890d625e3bffbbc2d19f434568 (diff)
downloadvcxsrv-b5acb643ab1a86b31409900a7c03281fcc48c8e3.tar.gz
vcxsrv-b5acb643ab1a86b31409900a7c03281fcc48c8e3.tar.bz2
vcxsrv-b5acb643ab1a86b31409900a7c03281fcc48c8e3.zip
Merge remote-tracking branch 'origin/released'
* origin/released: fontconfig libfontenc mesa xserver git update 6 Mar 2013
Diffstat (limited to 'xorg-server/hw/xfree86/common/xf86DPMS.c')
-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;