| Message ID | 1360257365-17697-1-git-send-email-aplattner@nvidia.com |
|---|---|
| State | Accepted |
| Commit | 6238bd68bd71323f8b4f1808f34dabe2ae447fe3 |
| Headers | show |
diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c index ef4a2c1..3f1e142 100644 --- a/hw/xfree86/common/xf86DPMS.c +++ b/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;
On 02/07/2013 09:16 AM, Aaron Plattner wrote: > Otherwise, displays driven by GPU screens remain on all the time. Ping? CRTs do make good space heaters, but that probably shouldn't be a design goal of the X server. :) > Signed-off-by: Aaron Plattner <aplattner@nvidia.com> > --- > hw/xfree86/common/xf86DPMS.c | 45 ++++++++++++++++++++++++++++++-------------- > 1 file changed, 31 insertions(+), 14 deletions(-) > > diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c > index ef4a2c1..3f1e142 100644 > --- a/hw/xfree86/common/xf86DPMS.c > +++ b/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; >
On Mon, Mar 4, 2013 at 11:24 AM, Aaron Plattner <aplattner@nvidia.com> wrote: > On 02/07/2013 09:16 AM, Aaron Plattner wrote: >> >> Otherwise, displays driven by GPU screens remain on all the time. > > > Ping? CRTs do make good space heaters, but that probably shouldn't be a > design goal of the X server. :) Looks like the right thing to do. Reviewed-by: Alex Deucher <alexander.deucher@amd.com> > >> Signed-off-by: Aaron Plattner <aplattner@nvidia.com> >> --- >> hw/xfree86/common/xf86DPMS.c | 45 >> ++++++++++++++++++++++++++++++-------------- >> 1 file changed, 31 insertions(+), 14 deletions(-) >> >> diff --git a/hw/xfree86/common/xf86DPMS.c b/hw/xfree86/common/xf86DPMS.c >> index ef4a2c1..3f1e142 100644 >> --- a/hw/xfree86/common/xf86DPMS.c >> +++ b/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; >> > > -- > Aaron > _______________________________________________ > xorg-devel@lists.x.org: X.Org development > Archives: http://lists.x.org/archives/xorg-devel > Info: http://lists.x.org/mailman/listinfo/xorg-devel
Otherwise, displays driven by GPU screens remain on all the time. Signed-off-by: Aaron Plattner <aplattner@nvidia.com> --- hw/xfree86/common/xf86DPMS.c | 45 ++++++++++++++++++++++++++++++-------------- 1 file changed, 31 insertions(+), 14 deletions(-)