|
@@ -98,6 +98,7 @@ struct acpi_button {
|
|
|
struct input_dev *input;
|
|
|
char phys[32]; /* for input device */
|
|
|
unsigned long pushed;
|
|
|
+ bool wakeup_enabled;
|
|
|
};
|
|
|
|
|
|
static const struct file_operations acpi_button_info_fops = {
|
|
@@ -430,7 +431,10 @@ static int acpi_button_add(struct acpi_device *device)
|
|
|
/* Button's GPE is run-wake GPE */
|
|
|
acpi_enable_gpe(device->wakeup.gpe_device,
|
|
|
device->wakeup.gpe_number);
|
|
|
- device_set_wakeup_enable(&device->dev, true);
|
|
|
+ if (!device_may_wakeup(&device->dev)) {
|
|
|
+ device_set_wakeup_enable(&device->dev, true);
|
|
|
+ button->wakeup_enabled = true;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
printk(KERN_INFO PREFIX "%s [%s]\n", name, acpi_device_bid(device));
|
|
@@ -452,7 +456,8 @@ static int acpi_button_remove(struct acpi_device *device, int type)
|
|
|
if (device->wakeup.flags.valid) {
|
|
|
acpi_disable_gpe(device->wakeup.gpe_device,
|
|
|
device->wakeup.gpe_number);
|
|
|
- device_set_wakeup_enable(&device->dev, false);
|
|
|
+ if (button->wakeup_enabled)
|
|
|
+ device_set_wakeup_enable(&device->dev, false);
|
|
|
}
|
|
|
|
|
|
acpi_button_remove_fs(device);
|