summaryrefslogtreecommitdiffstats
path: root/sys/dev/acpica/acpi_lid.c
diff options
context:
space:
mode:
authoriwasaki <iwasaki@FreeBSD.org>2002-07-22 12:52:54 +0000
committeriwasaki <iwasaki@FreeBSD.org>2002-07-22 12:52:54 +0000
commit39615709135ccb3ccbc54ac2a0a1540692d913cd (patch)
treeb7be83e0557f6498766c14cd562d2172d12e3f8f /sys/dev/acpica/acpi_lid.c
parentfcb9022bbd197d29db9969eb8ddad8754296f8d0 (diff)
downloadFreeBSD-src-39615709135ccb3ccbc54ac2a0a1540692d913cd.zip
FreeBSD-src-39615709135ccb3ccbc54ac2a0a1540692d913cd.tar.gz
Add device(power/sleep button and lid) wake function from sleeping state.
This is required for some Thinkpad (and maybe VAIO) machines to wake the system up from sleep. Currently partially implemented, more complete implementation will come later.
Diffstat (limited to 'sys/dev/acpica/acpi_lid.c')
-rw-r--r--sys/dev/acpica/acpi_lid.c21
1 files changed, 21 insertions, 0 deletions
diff --git a/sys/dev/acpica/acpi_lid.c b/sys/dev/acpica/acpi_lid.c
index bd186a5..f83b2de 100644
--- a/sys/dev/acpica/acpi_lid.c
+++ b/sys/dev/acpica/acpi_lid.c
@@ -55,6 +55,8 @@ struct acpi_lid_softc {
static int acpi_lid_probe(device_t dev);
static int acpi_lid_attach(device_t dev);
+static int acpi_lid_suspend(device_t dev);
+static int acpi_lid_resume(device_t dev);
static void acpi_lid_notify_status_changed(void *arg);
static void acpi_lid_notify_handler(ACPI_HANDLE h,UINT32 notify, void *context);
@@ -62,6 +64,8 @@ static device_method_t acpi_lid_methods[] = {
/* Device interface */
DEVMETHOD(device_probe, acpi_lid_probe),
DEVMETHOD(device_attach, acpi_lid_attach),
+ DEVMETHOD(device_suspend, acpi_lid_suspend),
+ DEVMETHOD(device_resume, acpi_lid_resume),
{0, 0}
};
@@ -102,9 +106,26 @@ acpi_lid_attach(device_t dev)
* Install notification handler
*/
AcpiInstallNotifyHandler(sc->lid_handle, ACPI_DEVICE_NOTIFY, acpi_lid_notify_handler, sc);
+ acpi_device_enable_wake_capability(sc->lid_handle, 1);
return_VALUE(0);
}
+static int
+acpi_lid_suspend(device_t dev)
+{
+ struct acpi_lid_softc *sc;
+
+ sc = device_get_softc(dev);
+ acpi_device_enable_wake_event(sc->lid_handle);
+ return (0);
+}
+
+static int
+acpi_lid_resume(device_t dev)
+{
+ return (0);
+}
+
static void
acpi_lid_notify_status_changed(void *arg)
{
OpenPOWER on IntegriCloud