diff options
author | Rafael J. Wysocki <rjw@sisk.pl> | 2011-01-06 17:34:22 -0500 |
---|---|---|
committer | Len Brown <len.brown@intel.com> | 2011-01-07 01:17:41 -0500 |
commit | f2b56bc808addb908a5bf435d9b942c02af9a7c4 (patch) | |
tree | 562c7c96e60505f2b7278add12d19e5a545e7e1b /drivers/acpi/button.c | |
parent | b014f4f1aad3f25d5c7d877a394869645ea0c96b (diff) |
ACPI / PM: Use device wakeup flags for handling ACPI wakeup devices
There are ACPI devices (buttons and the laptop lid) that can wake up
the system from sleep states and have no "physical" companion
devices. The ACPI subsystem uses two flags, wakeup.state.enabled and
wakeup.flags.always_enabled, for handling those devices, but they
are not accessible through the standard device wakeup infrastructure.
User space can only control them via the /proc/acpi/wakeup interface
that is not really convenient (e.g. the way in which devices are
enabled to wake up the system is not portable between different
systems, because it requires one to know the devices' "names" used in
the system's ACPI tables).
To address this problem, use standard device wakeup flags instead of
the special ACPI flags for handling those devices. In particular,
use device_set_wakeup_capable() to mark the ACPI wakeup devices
during initialization and use device_set_wakeup_enable() to allow
or disallow them to wake up the system from sleep states. Rework
the /proc/acpi/wakeup interface to take these changes into account.
Signed-off-by: Rafael J. Wysocki <rjw@sisk.pl>
Signed-off-by: Len Brown <len.brown@intel.com>
Diffstat (limited to 'drivers/acpi/button.c')
-rw-r--r-- | drivers/acpi/button.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/acpi/button.c b/drivers/acpi/button.c index 71ef9cd0735f..234c104fcdd8 100644 --- a/drivers/acpi/button.c +++ b/drivers/acpi/button.c | |||
@@ -426,7 +426,7 @@ static int acpi_button_add(struct acpi_device *device) | |||
426 | acpi_enable_gpe(device->wakeup.gpe_device, | 426 | acpi_enable_gpe(device->wakeup.gpe_device, |
427 | device->wakeup.gpe_number); | 427 | device->wakeup.gpe_number); |
428 | device->wakeup.run_wake_count++; | 428 | device->wakeup.run_wake_count++; |
429 | device->wakeup.state.enabled = 1; | 429 | device_set_wakeup_enable(&device->dev, true); |
430 | } | 430 | } |
431 | 431 | ||
432 | printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device)); | 432 | printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device)); |
@@ -449,7 +449,7 @@ static int acpi_button_remove(struct acpi_device *device, int type) | |||
449 | acpi_disable_gpe(device->wakeup.gpe_device, | 449 | acpi_disable_gpe(device->wakeup.gpe_device, |
450 | device->wakeup.gpe_number); | 450 | device->wakeup.gpe_number); |
451 | device->wakeup.run_wake_count--; | 451 | device->wakeup.run_wake_count--; |
452 | device->wakeup.state.enabled = 0; | 452 | device_set_wakeup_enable(&device->dev, false); |
453 | } | 453 | } |
454 | 454 | ||
455 | acpi_button_remove_fs(device); | 455 | acpi_button_remove_fs(device); |