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,
 }
 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;
 
        if (state < 0)
                return state;
 
+       if (state && signal_wakeup)
+               acpi_pm_wakeup_event(&device->dev);
+
        return acpi_lid_notify_state(device, state);
 }
 
                (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:
                        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;