xorg-x11-server/p_xorg_acpi.diff
Stefan Dirsch 7e6a980b1f Accepting request 35298 from home:oertel:branches:openSUSE:Factory
Copy from home:oertel:branches:openSUSE:Factory/xorg-x11-server via accept of submit request 35298 revision 8.
Request was accepted with message:
reviewed ok.

OBS-URL: https://build.opensuse.org/request/show/35298
OBS-URL: https://build.opensuse.org/package/show/X11:XOrg/xorg-x11-server?expand=0&rev=229
2010-03-20 02:42:15 +00:00

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
@@ -149,6 +150,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;
}