forked from pool/xorg-x11-server
6c7e20d56d
Copy from X11:XOrg/xorg-x11-server based on submit request 29877 from user sndirsch OBS-URL: https://build.opensuse.org/request/show/29877 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/xorg-x11-server?expand=0&rev=153
122 lines
2.4 KiB
Diff
122 lines
2.4 KiB
Diff
Index: hw/xfree86/os-support/linux/lnx_acpi.c
|
|
================================================================================
|
|
--- hw/xfree86/os-support/linux/lnx_acpi.c
|
|
+++ hw/xfree86/os-support/linux/lnx_acpi.c
|
|
@@ -32,8 +32,10 @@
|
|
#define ACPI_VIDEO_HEAD_INVALID (~0u - 1)
|
|
#define ACPI_VIDEO_HEAD_END (~0u)
|
|
|
|
+static PMClose doLnxACPIOpen(void);
|
|
static void lnxCloseACPI(void);
|
|
static pointer ACPIihPtr = NULL;
|
|
+static OsTimerPtr acpiTimer = NULL;
|
|
PMClose lnxACPIOpen(void);
|
|
|
|
/* in milliseconds */
|
|
@@ -52,6 +54,22 @@
|
|
|
|
#define LINE_LENGTH 80
|
|
|
|
+static CARD32
|
|
+lnxACPICheckTimer(OsTimerPtr timer, CARD32 now, pointer arg)
|
|
+{
|
|
+#if DEBUG
|
|
+ ErrorF("ACPI: trying to reopen\n");
|
|
+#endif
|
|
+ if (doLnxACPIOpen()) {
|
|
+#if DEBUG
|
|
+ ErrorF("ACPI: successfully reopened\n");
|
|
+#endif
|
|
+ acpiTimer = NULL;
|
|
+ return 0;
|
|
+ }
|
|
+ return 5000;
|
|
+}
|
|
+
|
|
static int
|
|
lnxACPIGetEventFromOs(int fd, pmEvent *events, int num)
|
|
{
|
|
@@ -127,15 +145,14 @@
|
|
}
|
|
}
|
|
|
|
-PMClose
|
|
-lnxACPIOpen(void)
|
|
+static PMClose
|
|
+doLnxACPIOpen(void)
|
|
{
|
|
int fd;
|
|
struct sockaddr_un addr;
|
|
int r = -1;
|
|
static int warned = 0;
|
|
|
|
- DebugF("ACPI: OSPMOpen called\n");
|
|
if (ACPIihPtr || !xf86Info.pmFlag)
|
|
return NULL;
|
|
|
|
@@ -164,6 +181,27 @@
|
|
return lnxCloseACPI;
|
|
}
|
|
|
|
+PMClose
|
|
+lnxACPIPoll(void)
|
|
+{
|
|
+ TimerSet(NULL, 0, 5000, lnxACPICheckTimer, NULL);
|
|
+ return lnxCloseACPI;
|
|
+}
|
|
+
|
|
+PMClose
|
|
+lnxACPIOpen(void)
|
|
+{
|
|
+ PMClose ret;
|
|
+#ifdef DEBUG
|
|
+ ErrorF("ACPI: OSPMOpen called\n");
|
|
+#endif
|
|
+ if (!(ret = doLnxACPIOpen()))
|
|
+ xf86MsgVerb(X_WARNING,3,"Open ACPI failed (%s) (%s)\n", ACPI_SOCKET,
|
|
+ strerror(errno));
|
|
+
|
|
+ return ret;
|
|
+}
|
|
+
|
|
static void
|
|
lnxCloseACPI(void)
|
|
{
|
|
@@ -175,5 +213,11 @@
|
|
shutdown(fd, 2);
|
|
close(fd);
|
|
ACPIihPtr = NULL;
|
|
+ xf86PMGetEventFromOs = NULL;
|
|
+ xf86PMConfirmEventToOs = NULL;
|
|
+ if (acpiTimer) {
|
|
+ TimerCancel(acpiTimer);
|
|
+ acpiTimer = NULL;
|
|
+ }
|
|
}
|
|
}
|
|
--- hw/xfree86/os-support/linux/lnx_apm.c
|
|
+++ hw/xfree86/os-support/linux/lnx_apm.c
|
|
@@ -12,6 +12,7 @@
|
|
|
|
#ifdef HAVE_ACPI
|
|
extern PMClose lnxACPIOpen(void);
|
|
+extern PMClose lnxACPIPoll(void);
|
|
#endif
|
|
|
|
#ifdef HAVE_APM
|
|
@@ -150,6 +151,14 @@
|
|
ret = lnxAPMOpen();
|
|
#endif
|
|
|
|
+#ifdef HAVE_ACPI
|
|
+ /* if we can neither open ACPI nor APM poll for an ACPI service to
|
|
+ become available */
|
|
+
|
|
+ if (!ret && !xf86acpiDisableFlag)
|
|
+ ret = lnxACPIPoll();
|
|
+#endif
|
|
+
|
|
return ret;
|
|
}
|
|
|