]> git.kernelconcepts.de Git - karo-tx-linux.git/blobdiff - drivers/acpi/device_pm.c
Merge branches 'acpi-scan', 'acpi-utils' and 'acpi-pm'
[karo-tx-linux.git] / drivers / acpi / device_pm.c
index 897640188acdda6ce9b47a117fc5e50172dd072c..c2daa85fc9f70fa5aca61a6f2a4fbaa6b85df100 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;