]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/acpi/scan.c
Merge branches 'acpi-spcr', 'acpi-osi', 'acpi-bus', 'acpi-scan' and 'acpi-misc'
[karo-tx-linux.git] / drivers / acpi / scan.c
index ce88175032629cc21a8e6d98d190ee9025b9b741..59ebbd5f7b835b1aa5d119930c65f34b57a0dedc 100644 (file)
@@ -843,7 +843,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},
@@ -853,13 +853,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)
@@ -867,17 +865,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)
@@ -895,10 +888,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