]> git.proxmox.com Git - mirror_ubuntu-bionic-kernel.git/blobdiff - drivers/acpi/button.c
ACPI / button: increment wakeup count only when notified
[mirror_ubuntu-bionic-kernel.git] / drivers / acpi / button.c
index 9c389b7fa51fbb35839962af587b0fcf12cca16e..9e2886d1a1d75d8577044379e939828b4391d6b2 100644 (file)
@@ -216,9 +216,6 @@ static int acpi_lid_notify_state(struct acpi_device *device, int state)
                button->last_time = ktime_get();
        }
 
-       if (state)
-               acpi_pm_wakeup_event(&device->dev);
-
        ret = blocking_notifier_call_chain(&acpi_lid_notifier, state, device);
        if (ret == NOTIFY_DONE)
                ret = blocking_notifier_call_chain(&acpi_lid_notifier, state,
@@ -360,7 +357,8 @@ int acpi_lid_open(void)
 }
 EXPORT_SYMBOL(acpi_lid_open);
 
-static int acpi_lid_update_state(struct acpi_device *device)
+static int acpi_lid_update_state(struct acpi_device *device,
+                                bool signal_wakeup)
 {
        int state;
 
@@ -368,6 +366,9 @@ static int acpi_lid_update_state(struct acpi_device *device)
        if (state < 0)
                return state;
 
+       if (state && signal_wakeup)
+               acpi_pm_wakeup_event(&device->dev);
+
        return acpi_lid_notify_state(device, state);
 }
 
@@ -378,7 +379,7 @@ static void acpi_lid_initialize_state(struct acpi_device *device)
                (void)acpi_lid_notify_state(device, 1);
                break;
        case ACPI_BUTTON_LID_INIT_METHOD:
-               (void)acpi_lid_update_state(device);
+               (void)acpi_lid_update_state(device, false);
                break;
        case ACPI_BUTTON_LID_INIT_IGNORE:
        default:
@@ -403,7 +404,7 @@ static void acpi_button_notify(struct acpi_device *device, u32 event)
                        users = button->input->users;
                        mutex_unlock(&button->input->mutex);
                        if (users)
-                               acpi_lid_update_state(device);
+                               acpi_lid_update_state(device, true);
                } else {
                        int keycode;