Snipe ACPI patch from mjg59 to fix battery levels on some laptops
This commit is contained in:
parent
5c8b9db40c
commit
6406b98a0e
96
acpi-update-battery-information-on-notification-0x81.patch
Normal file
96
acpi-update-battery-information-on-notification-0x81.patch
Normal file
@ -0,0 +1,96 @@
|
||||
From kyle@infradead.org Wed Sep 22 18:35:38 2010
|
||||
From: Matthew Garrett <mjg@redhat.com>
|
||||
To: linux-acpi@vger.kernel.org
|
||||
Cc: linux-kernel@vger.kernel.org, Matthew Garrett <mjg@redhat.com>
|
||||
Subject: [PATCH] acpi: Update battery information on notification 0x81
|
||||
Date: Mon, 16 Aug 2010 16:32:19 -0400
|
||||
|
||||
A notification event 0x81 from an ACPI battery device requires us to
|
||||
re-read the battery information structure. Do so, and if the battery's
|
||||
reporting units have changed (as is the case on some Thinkpads) destroy
|
||||
and recreate the battery in order to populate the fields correctly.
|
||||
|
||||
Signed-off-by: Matthew Garrett <mjg@redhat.com>
|
||||
---
|
||||
drivers/acpi/battery.c | 22 +++++++++++++++++-----
|
||||
1 files changed, 17 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c
|
||||
index dc58402..69638c4 100644
|
||||
--- a/drivers/acpi/battery.c
|
||||
+++ b/drivers/acpi/battery.c
|
||||
@@ -562,9 +562,10 @@ static void acpi_battery_quirks(struct acpi_battery *battery)
|
||||
}
|
||||
}
|
||||
|
||||
-static int acpi_battery_update(struct acpi_battery *battery)
|
||||
+static int acpi_battery_update(struct acpi_battery *battery, bool get_info)
|
||||
{
|
||||
int result, old_present = acpi_battery_present(battery);
|
||||
+ int old_power_unit = battery->power_unit;
|
||||
result = acpi_battery_get_status(battery);
|
||||
if (result)
|
||||
return result;
|
||||
@@ -587,6 +588,16 @@ static int acpi_battery_update(struct acpi_battery *battery)
|
||||
if (!battery->bat.dev)
|
||||
sysfs_add_battery(battery);
|
||||
#endif
|
||||
+ if (get_info) {
|
||||
+ acpi_battery_get_info(battery);
|
||||
+#ifdef CONFIG_ACPI_SYSFS_POWER
|
||||
+ if (old_power_unit != battery->power_unit) {
|
||||
+ /* The battery has changed its reporting units */
|
||||
+ sysfs_remove_battery(battery);
|
||||
+ sysfs_add_battery(battery);
|
||||
+ }
|
||||
+#endif
|
||||
+ }
|
||||
return acpi_battery_get_state(battery);
|
||||
}
|
||||
|
||||
@@ -762,7 +773,7 @@ static print_func acpi_print_funcs[ACPI_BATTERY_NUMFILES] = {
|
||||
static int acpi_battery_read(int fid, struct seq_file *seq)
|
||||
{
|
||||
struct acpi_battery *battery = seq->private;
|
||||
- int result = acpi_battery_update(battery);
|
||||
+ int result = acpi_battery_update(battery, false);
|
||||
return acpi_print_funcs[fid](seq, result);
|
||||
}
|
||||
|
||||
@@ -877,7 +888,8 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event)
|
||||
#ifdef CONFIG_ACPI_SYSFS_POWER
|
||||
old = battery->bat.dev;
|
||||
#endif
|
||||
- acpi_battery_update(battery);
|
||||
+ acpi_battery_update(battery, (event == ACPI_BATTERY_NOTIFY_INFO ? true
|
||||
+ : false));
|
||||
acpi_bus_generate_proc_event(device, event,
|
||||
acpi_battery_present(battery));
|
||||
acpi_bus_generate_netlink_event(device->pnp.device_class,
|
||||
@@ -908,7 +920,7 @@ static int acpi_battery_add(struct acpi_device *device)
|
||||
if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle,
|
||||
"_BIX", &handle)))
|
||||
set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags);
|
||||
- acpi_battery_update(battery);
|
||||
+ acpi_battery_update(battery, false);
|
||||
#ifdef CONFIG_ACPI_PROCFS_POWER
|
||||
result = acpi_battery_add_fs(device);
|
||||
#endif
|
||||
@@ -951,7 +963,7 @@ static int acpi_battery_resume(struct acpi_device *device)
|
||||
return -EINVAL;
|
||||
battery = acpi_driver_data(device);
|
||||
battery->update_time = 0;
|
||||
- acpi_battery_update(battery);
|
||||
+ acpi_battery_update(battery, true);
|
||||
return 0;
|
||||
}
|
||||
|
||||
--
|
||||
1.7.2.1
|
||||
|
||||
--
|
||||
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
|
||||
the body of a message to majordomo@vger.kernel.org
|
||||
More majordomo info at http://vger.kernel.org/majordomo-info.html
|
||||
Please read the FAQ at http://www.tux.org/lkml/
|
||||
|
@ -51,7 +51,7 @@ Summary: The Linux kernel
|
||||
# For non-released -rc kernels, this will be prepended with "0.", so
|
||||
# for example a 3 here will become 0.3
|
||||
#
|
||||
%global baserelease 24
|
||||
%global baserelease 25
|
||||
%global fedora_build %{baserelease}
|
||||
|
||||
# base_sublevel is the kernel version we're starting with and patching
|
||||
@ -625,6 +625,7 @@ Patch390: linux-2.6-defaults-acpi-video.patch
|
||||
Patch391: linux-2.6-acpi-video-dos.patch
|
||||
Patch393: acpi-ec-add-delay-before-write.patch
|
||||
Patch394: linux-2.6-acpi-debug-infinite-loop.patch
|
||||
Patch395: acpi-update-battery-information-on-notification-0x81.patch
|
||||
|
||||
Patch450: linux-2.6-input-kill-stupid-messages.patch
|
||||
Patch452: linux-2.6.30-no-pcspkr-modalias.patch
|
||||
@ -1185,6 +1186,7 @@ ApplyPatch linux-2.6-defaults-acpi-video.patch
|
||||
ApplyPatch linux-2.6-acpi-video-dos.patch
|
||||
ApplyPatch acpi-ec-add-delay-before-write.patch
|
||||
ApplyPatch linux-2.6-acpi-debug-infinite-loop.patch
|
||||
ApplyPatch acpi-update-battery-information-on-notification-0x81.patch
|
||||
|
||||
# Various low-impact patches to aid debugging.
|
||||
ApplyPatch linux-2.6-debug-sizeof-structs.patch
|
||||
@ -1920,6 +1922,9 @@ fi
|
||||
# || ||
|
||||
|
||||
%changelog
|
||||
* Thu Sep 23 2010 Kyle McMartin <kyle@redhat.com> 2.6.36-0.25.rc5
|
||||
- Snipe ACPI patch from mjg59 to fix battery levels on some laptops.
|
||||
|
||||
* Tue Sep 21 2010 Kyle McMartin <kyle@redhat.com>
|
||||
- Add new btusb ids for MacBookPro from wwoods@.
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user