Merge tag 'iwlwifi-next-for-kalle-2014-12-30' of https://git.kernel.org/pub/scm/linux...
[cascardo/linux.git] / drivers / acpi / device_pm.c
index 8976401..c2daa85 100644 (file)
@@ -680,13 +680,21 @@ static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state,
                if (error)
                        return error;
 
+               if (adev->wakeup.flags.enabled)
+                       return 0;
+
                res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
-               if (ACPI_FAILURE(res)) {
+               if (ACPI_SUCCESS(res)) {
+                       adev->wakeup.flags.enabled = 1;
+               } else {
                        acpi_disable_wakeup_device_power(adev);
                        return -EIO;
                }
        } else {
-               acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
+               if (adev->wakeup.flags.enabled) {
+                       acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
+                       adev->wakeup.flags.enabled = 0;
+               }
                acpi_disable_wakeup_device_power(adev);
        }
        return 0;