Skip to content

Commit 175f8e2

Browse files
committed
ACPI / PM: Do not disable wakeup GPEs that have not been enabled
In some cases acpi_device_wakeup() may be called to ensure wakeup power to be off for a given device even though that device's wakeup GPE has not been enabled so far. It calls acpi_disable_gpe() on a GPE that's not enabled and this causes ACPICA to return the AE_LIMIT status code from that call which then is reported as an error by the ACPICA's debug facilities (if enabled). This may lead to a fair amount of confusion, so introduce a new ACPI device wakeup flag to store the wakeup GPE status and avoid disabling wakeup GPEs that have not been enabled. Reported-and-tested-by: Venkat Raghavulu <venkat.raghavulu@intel.com> Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
1 parent c52fa70 commit 175f8e2

File tree

2 files changed

+11
-2
lines changed

2 files changed

+11
-2
lines changed

drivers/acpi/device_pm.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -680,13 +680,21 @@ static int acpi_device_wakeup(struct acpi_device *adev, u32 target_state,
680680
if (error)
681681
return error;
682682

683+
if (adev->wakeup.flags.enabled)
684+
return 0;
685+
683686
res = acpi_enable_gpe(wakeup->gpe_device, wakeup->gpe_number);
684-
if (ACPI_FAILURE(res)) {
687+
if (ACPI_SUCCESS(res)) {
688+
adev->wakeup.flags.enabled = 1;
689+
} else {
685690
acpi_disable_wakeup_device_power(adev);
686691
return -EIO;
687692
}
688693
} else {
689-
acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
694+
if (adev->wakeup.flags.enabled) {
695+
acpi_disable_gpe(wakeup->gpe_device, wakeup->gpe_number);
696+
adev->wakeup.flags.enabled = 0;
697+
}
690698
acpi_disable_wakeup_device_power(adev);
691699
}
692700
return 0;

include/acpi/acpi_bus.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -312,6 +312,7 @@ struct acpi_device_wakeup_flags {
312312
u8 valid:1; /* Can successfully enable wakeup? */
313313
u8 run_wake:1; /* Run-Wake GPE devices */
314314
u8 notifier_present:1; /* Wake-up notify handler has been installed */
315+
u8 enabled:1; /* Enabled for wakeup */
315316
};
316317

317318
struct acpi_device_wakeup_context {

0 commit comments

Comments
 (0)