Egbert Eich
cc1843ce25
Check for broken DPMSGet (bsc#986974). OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xf86-video-vesa?expand=0&rev=22
53 lines
1.5 KiB
Diff
53 lines
1.5 KiB
Diff
From: Egbert Eich <eich@suse.de>
|
|
Date: Mon Jul 4 18:00:18 2016 +0200
|
|
Subject: [PATCH]DPMS: Check for broken DPMSGet()
|
|
Patch-mainline: to be upstreamed
|
|
Git-commit: 484aa9d156f213d08001b3c926ff1632cf3826c2
|
|
References: bsc#986974
|
|
Signed-off-by: Egbert Eich <eich@suse.com>
|
|
|
|
On some BIOSes DPMSGet may return an incorrect mode. Check by
|
|
attempting to read back the mode just set and compare it to
|
|
the value set.
|
|
|
|
Signed-off-by: Egbert Eich <eich@suse.de>
|
|
---
|
|
src/vesa.c | 8 +++++++-
|
|
src/vesa.h | 1 +
|
|
2 files changed, 8 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/src/vesa.c b/src/vesa.c
|
|
index 983a5f5..818d9a7 100644
|
|
--- a/src/vesa.c
|
|
+++ b/src/vesa.c
|
|
@@ -1698,10 +1698,16 @@ VESADisplayPowerManagementSet(ScrnInfoPtr pScrn, int mode,
|
|
(val & (1 << mode)) == 0)
|
|
return;
|
|
|
|
- if (VBEDPMSGet(pVesa->pVbe, &val) == TRUE && val == mode)
|
|
+ if (!pVesa->brokenDPMSGet &&
|
|
+ VBEDPMSGet(pVesa->pVbe, &val) == TRUE &&
|
|
+ val == mode)
|
|
return;
|
|
#endif
|
|
VBEDPMSSet(pVesa->pVbe, mode);
|
|
+#ifdef VBE_HAVE_DPMS_GET_CAPABILITIES
|
|
+ if (!pVesa->brokenDPMSGet && VBEDPMSGet(pVesa->pVbe, &val) && val != mode)
|
|
+ pVesa->brokenDPMSGet = TRUE;
|
|
+#endif
|
|
}
|
|
|
|
/***********************************************************************
|
|
diff --git a/src/vesa.h b/src/vesa.h
|
|
index bcc9e37..7c68724 100644
|
|
--- a/src/vesa.h
|
|
+++ b/src/vesa.h
|
|
@@ -119,6 +119,7 @@ typedef struct _VESARec
|
|
void *shadow;
|
|
ShadowUpdateProc update;
|
|
ShadowWindowProc window;
|
|
+ Bool brokenDPMSGet;
|
|
} VESARec, *VESAPtr;
|
|
|
|
|