From 7fe2b95dfb899d2d5512aeea859a9297062be121 Mon Sep 17 00:00:00 2001 From: Jeff Garzik Date: Sun, 26 Dec 2010 19:42:15 -0500 Subject: [PATCH] --- yaml --- r: 223661 b: refs/heads/master c: ff5dd32b997a5a5ce3f4256257991133d694da0b h: refs/heads/master i: 223659: 8da6b4fb441a808ff369bdcf57b0fb696549fec6 v: v3 --- [refs] | 2 +- trunk/drivers/acpi/acpica/evgpeinit.c | 3 - trunk/drivers/acpi/battery.c | 5 ++ trunk/drivers/acpi/scan.c | 97 ++++++++++----------------- trunk/drivers/ata/pata_cs5536.c | 2 + 5 files changed, 45 insertions(+), 64 deletions(-) diff --git a/[refs] b/[refs] index 2db2f4ca084b..3dfab9806db1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bbbcde9d9614683fbeb41f00728cfbfb7f75a7ad +refs/heads/master: ff5dd32b997a5a5ce3f4256257991133d694da0b diff --git a/trunk/drivers/acpi/acpica/evgpeinit.c b/trunk/drivers/acpi/acpica/evgpeinit.c index 4c8dea513b66..2c7def95f721 100644 --- a/trunk/drivers/acpi/acpica/evgpeinit.c +++ b/trunk/drivers/acpi/acpica/evgpeinit.c @@ -408,9 +408,6 @@ acpi_ev_match_gpe_method(acpi_handle obj_handle, return_ACPI_STATUS(AE_OK); } - /* Disable the GPE in case it's been enabled already. */ - (void)acpi_hw_low_set_gpe(gpe_event_info, ACPI_GPE_DISABLE); - /* * Add the GPE information from above to the gpe_event_info block for * use during dispatch of this GPE. diff --git a/trunk/drivers/acpi/battery.c b/trunk/drivers/acpi/battery.c index 95649d373071..9fb9d5ac939d 100644 --- a/trunk/drivers/acpi/battery.c +++ b/trunk/drivers/acpi/battery.c @@ -130,6 +130,8 @@ struct acpi_battery { unsigned long flags; }; +static int acpi_battery_update(struct acpi_battery *battery); + #define to_acpi_battery(x) container_of(x, struct acpi_battery, bat); inline int acpi_battery_present(struct acpi_battery *battery) @@ -184,6 +186,9 @@ static int acpi_battery_get_property(struct power_supply *psy, int ret = 0; struct acpi_battery *battery = to_acpi_battery(psy); + if (acpi_battery_update(battery)) + return -ENODEV; + if (acpi_battery_present(battery)) { /* run battery update only if it is present */ acpi_battery_get_state(battery); diff --git a/trunk/drivers/acpi/scan.c b/trunk/drivers/acpi/scan.c index 29ef505c487b..2b6c21d86b98 100644 --- a/trunk/drivers/acpi/scan.c +++ b/trunk/drivers/acpi/scan.c @@ -705,85 +705,54 @@ static int acpi_bus_get_perf_flags(struct acpi_device *device) } static acpi_status -acpi_bus_extract_wakeup_device_power_package(acpi_handle handle, - struct acpi_device_wakeup *wakeup) +acpi_bus_extract_wakeup_device_power_package(struct acpi_device *device, + union acpi_object *package) { - struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; - union acpi_object *package = NULL; - union acpi_object *element = NULL; - acpi_status status; int i = 0; + union acpi_object *element = NULL; - if (!wakeup) + if (!device || !package || (package->package.count < 2)) return AE_BAD_PARAMETER; - /* _PRW */ - status = acpi_evaluate_object(handle, "_PRW", NULL, &buffer); - if (ACPI_FAILURE(status)) { - ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW")); - return status; - } - - package = (union acpi_object *)buffer.pointer; - - if (!package || (package->package.count < 2)) { - status = AE_BAD_DATA; - goto out; - } - element = &(package->package.elements[0]); - if (!element) { - status = AE_BAD_DATA; - goto out; - } + if (!element) + return AE_BAD_PARAMETER; if (element->type == ACPI_TYPE_PACKAGE) { if ((element->package.count < 2) || (element->package.elements[0].type != ACPI_TYPE_LOCAL_REFERENCE) - || (element->package.elements[1].type != ACPI_TYPE_INTEGER)) { - status = AE_BAD_DATA; - goto out; - } - wakeup->gpe_device = + || (element->package.elements[1].type != ACPI_TYPE_INTEGER)) + return AE_BAD_DATA; + device->wakeup.gpe_device = element->package.elements[0].reference.handle; - wakeup->gpe_number = + device->wakeup.gpe_number = (u32) element->package.elements[1].integer.value; } else if (element->type == ACPI_TYPE_INTEGER) { - wakeup->gpe_device = NULL; - wakeup->gpe_number = element->integer.value; - } else { - status = AE_BAD_DATA; - goto out; - } + device->wakeup.gpe_number = element->integer.value; + } else + return AE_BAD_DATA; element = &(package->package.elements[1]); if (element->type != ACPI_TYPE_INTEGER) { - status = AE_BAD_DATA; - goto out; + return AE_BAD_DATA; } - wakeup->sleep_state = element->integer.value; + device->wakeup.sleep_state = element->integer.value; if ((package->package.count - 2) > ACPI_MAX_HANDLES) { - status = AE_NO_MEMORY; - goto out; + return AE_NO_MEMORY; } - wakeup->resources.count = package->package.count - 2; - for (i = 0; i < wakeup->resources.count; i++) { + device->wakeup.resources.count = package->package.count - 2; + for (i = 0; i < device->wakeup.resources.count; i++) { element = &(package->package.elements[i + 2]); - if (element->type != ACPI_TYPE_LOCAL_REFERENCE) { - status = AE_BAD_DATA; - goto out; - } + if (element->type != ACPI_TYPE_LOCAL_REFERENCE) + return AE_BAD_DATA; - wakeup->resources.handles[i] = element->reference.handle; + device->wakeup.resources.handles[i] = element->reference.handle; } - acpi_gpe_can_wake(wakeup->gpe_device, wakeup->gpe_number); + acpi_gpe_can_wake(device->wakeup.gpe_device, device->wakeup.gpe_number); - out: - kfree(buffer.pointer); - - return status; + return AE_OK; } static void acpi_bus_set_run_wake_flags(struct acpi_device *device) @@ -818,15 +787,26 @@ static void acpi_bus_set_run_wake_flags(struct acpi_device *device) static int acpi_bus_get_wakeup_device_flags(struct acpi_device *device) { acpi_status status = 0; + struct acpi_buffer buffer = { ACPI_ALLOCATE_BUFFER, NULL }; + union acpi_object *package = NULL; int psw_error; - status = acpi_bus_extract_wakeup_device_power_package(device->handle, - &device->wakeup); + /* _PRW */ + status = acpi_evaluate_object(device->handle, "_PRW", NULL, &buffer); + if (ACPI_FAILURE(status)) { + ACPI_EXCEPTION((AE_INFO, status, "Evaluating _PRW")); + goto end; + } + + package = (union acpi_object *)buffer.pointer; + status = acpi_bus_extract_wakeup_device_power_package(device, package); if (ACPI_FAILURE(status)) { ACPI_EXCEPTION((AE_INFO, status, "Extracting _PRW package")); goto end; } + kfree(buffer.pointer); + device->wakeup.flags.valid = 1; device->wakeup.prepare_count = 0; acpi_bus_set_run_wake_flags(device); @@ -1371,7 +1351,6 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl, struct acpi_bus_ops *ops = context; int type; unsigned long long sta; - struct acpi_device_wakeup wakeup; struct acpi_device *device; acpi_status status; int result; @@ -1381,10 +1360,8 @@ static acpi_status acpi_bus_check_add(acpi_handle handle, u32 lvl, return AE_OK; if (!(sta & ACPI_STA_DEVICE_PRESENT) && - !(sta & ACPI_STA_DEVICE_FUNCTIONING)) { - acpi_bus_extract_wakeup_device_power_package(handle, &wakeup); + !(sta & ACPI_STA_DEVICE_FUNCTIONING)) return AE_CTRL_DEPTH; - } /* * We may already have an acpi_device from a previous enumeration. If diff --git a/trunk/drivers/ata/pata_cs5536.c b/trunk/drivers/ata/pata_cs5536.c index a6e6c963b6ae..628c8fae5937 100644 --- a/trunk/drivers/ata/pata_cs5536.c +++ b/trunk/drivers/ata/pata_cs5536.c @@ -44,6 +44,8 @@ static int use_msr; module_param_named(msr, use_msr, int, 0644); MODULE_PARM_DESC(msr, "Force using MSR to configure IDE function (Default: 0)"); #else +#undef rdmsr /* avoid accidental MSR usage on, e.g. x86-64 */ +#undef wrmsr #define rdmsr(x, y, z) do { } while (0) #define wrmsr(x, y, z) do { } while (0) #define use_msr 0