···408408 return_ACPI_STATUS(AE_OK);409409 }410410411411+ /* Disable the GPE in case it's been enabled already. */412412+ (void)acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_DISABLE);413413+411414 /*412415 * Add the GPE information from above to the gpe_event_info block for413416 * use during dispatch of this GPE.
-5
drivers/acpi/battery.c
···130130 unsigned long flags;131131};132132133133-static int acpi_battery_update(struct acpi_battery *battery);134134-135133#define to_acpi_battery(x) container_of(x, struct acpi_battery, bat);136134137135inline int acpi_battery_present(struct acpi_battery *battery)···183185{184186 int ret = 0;185187 struct acpi_battery *battery = to_acpi_battery(psy);186186-187187- if (acpi_battery_update(battery))188188- return -ENODEV;189188190189 if (acpi_battery_present(battery)) {191190 /* run battery update only if it is present */
+60-37
drivers/acpi/scan.c
···705705}706706707707static acpi_status708708-acpi_bus_extract_wakeup_device_power_package(struct acpi_device *device,709709- union acpi_object *package)708708+acpi_bus_extract_wakeup_device_power_package(acpi_handle handle,709709+ struct acpi_device_wakeup *wakeup)710710{711711- int i = 0;711711+ struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };712712+ union acpi_object *package = NULL;712713 union acpi_object *element = NULL;714714+ acpi_status status;715715+ int i = 0;713716714714- if (!device || !package || (package->package.count < 2))717717+ if (!wakeup)715718 return AE_BAD_PARAMETER;719719+720720+ /* _PRW */721721+ status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer);722722+ if (ACPI_FAILURE(status)) {723723+ ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW"));724724+ return status;725725+ }726726+727727+ package = (union acpi_object *)buffer.pointer;728728+729729+ if (!package || (package->package.count < 2)) {730730+ status = AE_BAD_DATA;731731+ goto out;732732+ }716733717734 element = &(package->package.elements[0]);718718- if (!element)719719- return AE_BAD_PARAMETER;735735+ if (!element) {736736+ status = AE_BAD_DATA;737737+ goto out;738738+ }720739 if (element->type == ACPI_TYPE_PACKAGE) {721740 if ((element->package.count < 2) ||722741 (element->package.elements[0].type !=723742 ACPI_TYPE_LOCAL_REFERENCE)724724- || (element->package.elements[1].type != ACPI_TYPE_INTEGER))725725- return AE_BAD_DATA;726726- device->wakeup.gpe_device =743743+ || (element->package.elements[1].type != ACPI_TYPE_INTEGER)) {744744+ status = AE_BAD_DATA;745745+ goto out;746746+ }747747+ wakeup->gpe_device =727748 element->package.elements[0].reference.handle;728728- device->wakeup.gpe_number =749749+ wakeup->gpe_number =729750 (u32) element->package.elements[1].integer.value;730751 } else if (element->type == ACPI_TYPE_INTEGER) {731731- device->wakeup.gpe_number = element->integer.value;732732- } else733733- return AE_BAD_DATA;752752+ wakeup->gpe_device = NULL;753753+ wakeup->gpe_number = element->integer.value;754754+ } else {755755+ status = AE_BAD_DATA;756756+ goto out;757757+ }734758735759 element = &(package->package.elements[1]);736760 if (element->type != ACPI_TYPE_INTEGER) {737737- return AE_BAD_DATA;761761+ status = AE_BAD_DATA;762762+ goto out;738763 }739739- device->wakeup.sleep_state = element->integer.value;764764+ wakeup->sleep_state = element->integer.value;740765741766 if ((package->package.count - 2) > ACPI_MAX_HANDLES) {742742- return AE_NO_MEMORY;767767+ status = AE_NO_MEMORY;768768+ goto out;743769 }744744- device->wakeup.resources.count = package->package.count - 2;745745- for (i = 0; i < device->wakeup.resources.count; i++) {770770+ wakeup->resources.count = package->package.count - 2;771771+ for (i = 0; i < wakeup->resources.count; i++) {746772 element = &(package->package.elements[i + 2]);747747- if (element->type != ACPI_TYPE_LOCAL_REFERENCE)748748- return AE_BAD_DATA;773773+ if (element->type != ACPI_TYPE_LOCAL_REFERENCE) {774774+ status = AE_BAD_DATA;775775+ goto out;776776+ }749777750750- device->wakeup.resources.handles[i] = element->reference.handle;778778+ wakeup->resources.handles[i] = element->reference.handle;751779 }752780753753- acpi_gpe_can_wake(device->wakeup.gpe_device, device->wakeup.gpe_number);781781+ acpi_gpe_can_wake(wakeup->gpe_device, wakeup->gpe_number);754782755755- return AE_OK;783783+ out:784784+ kfree(buffer.pointer);785785+786786+ return status;756787}757788758789static void acpi_bus_set_run_wake_flags(struct acpi_device *device)···818787static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device)819788{820789 acpi_status status = 0;821821- struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL };822822- union acpi_object *package = NULL;823790 int psw_error;824791825825- /* _PRW */826826- status = acpi_evaluate_object(device->handle, "_PRW", NULL, &buffer);827827- if (ACPI_FAILURE(status)) {828828- ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW"));829829- goto end;830830- }831831-832832- package = (union acpi_object *)buffer.pointer;833833- status = acpi_bus_extract_wakeup_device_power_package(device, package);792792+ status = acpi_bus_extract_wakeup_device_power_package(device->handle,793793+ &device->wakeup);834794 if (ACPI_FAILURE(status)) {835795 ACPI_EXCEPTION((AE_INFO, status, "Extracting _PRW package"));836796 goto end;837797 }838838-839839- kfree(buffer.pointer);840798841799 device->wakeup.flags.valid = 1;842800 device->wakeup.prepare_count = 0;···13711351 struct acpi_bus_ops *ops = context;13721352 int type;13731353 unsigned long long sta;13541354+ struct acpi_device_wakeup wakeup;13741355 struct acpi_device *device;13751356 acpi_status status;13761357 int result;···13811360 return AE_OK;1382136113831362 if (!(sta & ACPI_STA_DEVICE_PRESENT) &&13841384- !(sta & ACPI_STA_DEVICE_FUNCTIONING))13631363+ !(sta & ACPI_STA_DEVICE_FUNCTIONING)) {13641364+ acpi_bus_extract_wakeup_device_power_package(handle, &wakeup);13851365 return AE_CTRL_DEPTH;13661366+ }1386136713871368 /*13881369 * We may already have an acpi_device from a previous enumeration. If