ACPI / Button: Fix enabling button GPEs twice
authorLan Tianyu <tianyu.lan@intel.com>
Thu, 12 Dec 2013 10:08:17 +0000 (18:08 +0800)
committerRafael J. Wysocki <rafael.j.wysocki@intel.com>
Thu, 19 Dec 2013 14:07:00 +0000 (15:07 +0100)
Button GPEs have been enabled in the acpi_wake_device_init() during
boot and the button driver enables them for the second time.
Consequently, it is necessary to do

# echo disable > /sys/firmware/acpi/interrupts/gpeXXX

twice in a row to disable those GPEs via sysfs. This patch is to
remove the GPE enabling code from the button driver to avoid the
problem.

Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
[rjw: Changelog]
Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
drivers/acpi/button.c

index c971929..5401e9a 100644 (file)
@@ -101,7 +101,6 @@ struct acpi_button {
        struct input_dev *input;
        char phys[32];                  /* for input device */
        unsigned long pushed;
-       bool wakeup_enabled;
 };
 
 static BLOCKING_NOTIFIER_HEAD(acpi_lid_notifier);
@@ -407,16 +406,6 @@ static int acpi_button_add(struct acpi_device *device)
                lid_device = device;
        }
 
-       if (device->wakeup.flags.valid) {
-               /* Button's GPE is run-wake GPE */
-               acpi_enable_gpe(device->wakeup.gpe_device,
-                               device->wakeup.gpe_number);
-               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));
        return 0;
 
@@ -433,13 +422,6 @@ static int acpi_button_remove(struct acpi_device *device)
 {
        struct acpi_button *button = acpi_driver_data(device);
 
-       if (device->wakeup.flags.valid) {
-               acpi_disable_gpe(device->wakeup.gpe_device,
-                               device->wakeup.gpe_number);
-               if (button->wakeup_enabled)
-                       device_set_wakeup_enable(&device->dev, false);
-       }
-
        acpi_button_remove_fs(device);
        input_unregister_device(button->input);
        kfree(button);