|
@@ -835,7 +835,7 @@ static int acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,
|
|
|
return err;
|
|
|
}
|
|
|
|
|
|
-static void acpi_wakeup_gpe_init(struct acpi_device *device)
|
|
|
+static bool acpi_wakeup_gpe_init(struct acpi_device *device)
|
|
|
{
|
|
|
static const struct acpi_device_id button_device_ids[] = {
|
|
|
{"PNP0C0C", 0},
|
|
@@ -845,13 +845,11 @@ static void acpi_wakeup_gpe_init(struct acpi_device *device)
|
|
|
};
|
|
|
struct acpi_device_wakeup *wakeup = &device->wakeup;
|
|
|
acpi_status status;
|
|
|
- acpi_event_status event_status;
|
|
|
|
|
|
wakeup->flags.notifier_present = 0;
|
|
|
|
|
|
/* Power button, Lid switch always enable wakeup */
|
|
|
if (!acpi_match_device_ids(device, button_device_ids)) {
|
|
|
- wakeup->flags.run_wake = 1;
|
|
|
if (!acpi_match_device_ids(device, &button_device_ids[1])) {
|
|
|
/* Do not use Lid/sleep button for S5 wakeup */
|
|
|
if (wakeup->sleep_state == ACPI_STATE_S5)
|
|
@@ -859,17 +857,12 @@ static void acpi_wakeup_gpe_init(struct acpi_device *device)
|
|
|
}
|
|
|
acpi_mark_gpe_for_wake(wakeup->gpe_device, wakeup->gpe_number);
|
|
|
device_set_wakeup_capable(&device->dev, true);
|
|
|
- return;
|
|
|
+ return true;
|
|
|
}
|
|
|
|
|
|
- acpi_setup_gpe_for_wake(device->handle, wakeup->gpe_device,
|
|
|
- wakeup->gpe_number);
|
|
|
- status = acpi_get_gpe_status(wakeup->gpe_device, wakeup->gpe_number,
|
|
|
- &event_status);
|
|
|
- if (ACPI_FAILURE(status))
|
|
|
- return;
|
|
|
-
|
|
|
- wakeup->flags.run_wake = !!(event_status & ACPI_EVENT_FLAG_HAS_HANDLER);
|
|
|
+ status = acpi_setup_gpe_for_wake(device->handle, wakeup->gpe_device,
|
|
|
+ wakeup->gpe_number);
|
|
|
+ return ACPI_SUCCESS(status);
|
|
|
}
|
|
|
|
|
|
static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
|
|
@@ -887,10 +880,10 @@ static void acpi_bus_get_wakeup_device_flags(struct acpi_device *device)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- device->wakeup.flags.valid = 1;
|
|
|
+ device->wakeup.flags.valid = acpi_wakeup_gpe_init(device);
|
|
|
device->wakeup.prepare_count = 0;
|
|
|
- acpi_wakeup_gpe_init(device);
|
|
|
- /* Call _PSW/_DSW object to disable its ability to wake the sleeping
|
|
|
+ /*
|
|
|
+ * Call _PSW/_DSW object to disable its ability to wake the sleeping
|
|
|
* system for the ACPI device with the _PRW object.
|
|
|
* The _PSW object is depreciated in ACPI 3.0 and is replaced by _DSW.
|
|
|
* So it is necessary to call _DSW object first. Only when it is not
|