From 1121f6ddf0ae873b09f67eb45ce6c57ed6d9e81d Mon Sep 17 00:00:00 2001 From: Kyle McMartin Date: Wed, 23 Mar 2011 09:42:21 -0400 Subject: [PATCH] re-create ACPI battery sysfs files on resume from suspend Fixes the upstream changes to the dropped acpi-update-battery-information-on-notification-0x81.patch. --- ...e-sysfs-files-from-a-resume-notifier.patch | 89 +++++++++++++++++++ kernel.spec | 7 ++ 2 files changed, 96 insertions(+) create mode 100644 acpi_battery-fribble-sysfs-files-from-a-resume-notifier.patch diff --git a/acpi_battery-fribble-sysfs-files-from-a-resume-notifier.patch b/acpi_battery-fribble-sysfs-files-from-a-resume-notifier.patch new file mode 100644 index 000000000..b3256a2d3 --- /dev/null +++ b/acpi_battery-fribble-sysfs-files-from-a-resume-notifier.patch @@ -0,0 +1,89 @@ +From lenb@kernel.org Wed Mar 23 03:07:45 2011 +From: Len Brown +To: linux-acpi@vger.kernel.org +Cc: Kyle McMartin , Len Brown +Subject: [PATCH 35/42] ACPI battery: fribble sysfs files from a resume notifier +Date: Wed, 23 Mar 2011 02:42:48 -0400 + +From: Kyle McMartin + +Commit da8aeb92 re-poked the battery on resume, but Linus reports that +it broke his eee and partially reverted it in b23fffd7. Unfortunately +this also results in my x201s giving crack values until the sysfs files +are poked again. In the revert message, it was suggested that we poke it +from a PM notifier, so let's do that. + +With this in place, I haven't noticed the units going nutty on my +gnome-power-manager across a dozen suspends or so... + +Signed-off-by: Kyle McMartin +Acked-by: Rafael J. Wysocki +Signed-off-by: Len Brown +--- + drivers/acpi/battery.c | 22 ++++++++++++++++++++++ + 1 files changed, 22 insertions(+), 0 deletions(-) + +diff --git a/drivers/acpi/battery.c b/drivers/acpi/battery.c +index ac1a599..fcc13ac 100644 +--- a/drivers/acpi/battery.c ++++ b/drivers/acpi/battery.c +@@ -33,6 +33,7 @@ + #include + #include + #include ++#include + + #ifdef CONFIG_ACPI_PROCFS_POWER + #include +@@ -102,6 +103,7 @@ struct acpi_battery { + struct mutex lock; + struct power_supply bat; + struct acpi_device *device; ++ struct notifier_block pm_nb; + unsigned long update_time; + int rate_now; + int capacity_now; +@@ -940,6 +942,21 @@ static void acpi_battery_notify(struct acpi_device *device, u32 event) + power_supply_changed(&battery->bat); + } + ++static int battery_notify(struct notifier_block *nb, ++ unsigned long mode, void *_unused) ++{ ++ struct acpi_battery *battery = container_of(nb, struct acpi_battery, ++ pm_nb); ++ switch (mode) { ++ case PM_POST_SUSPEND: ++ sysfs_remove_battery(battery); ++ sysfs_add_battery(battery); ++ break; ++ } ++ ++ return 0; ++} ++ + static int acpi_battery_add(struct acpi_device *device) + { + int result = 0; +@@ -972,6 +989,10 @@ static int acpi_battery_add(struct acpi_device *device) + #endif + kfree(battery); + } ++ ++ battery->pm_nb.notifier_call = battery_notify; ++ register_pm_notifier(&battery->pm_nb); ++ + return result; + } + +@@ -982,6 +1003,7 @@ static int acpi_battery_remove(struct acpi_device *device, int type) + if (!device || !acpi_driver_data(device)) + return -EINVAL; + battery = acpi_driver_data(device); ++ unregister_pm_notifier(&battery->pm_nb); + #ifdef CONFIG_ACPI_PROCFS_POWER + acpi_battery_remove_fs(device); + #endif +-- +1.7.4.1.343.ga91df + diff --git a/kernel.spec b/kernel.spec index 12f2b9927..3391d195f 100644 --- a/kernel.spec +++ b/kernel.spec @@ -640,6 +640,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 +Patch399: acpi_battery-fribble-sysfs-files-from-a-resume-notifier.patch Patch450: linux-2.6-input-kill-stupid-messages.patch Patch452: linux-2.6.30-no-pcspkr-modalias.patch @@ -1215,6 +1216,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_battery-fribble-sysfs-files-from-a-resume-notifier.patch # Various low-impact patches to aid debugging. ApplyPatch linux-2.6-debug-sizeof-structs.patch @@ -1954,6 +1956,11 @@ fi # and build. %changelog +* Wed Mar 23 2011 Kyle McMartin +- Re-create ACPI battery sysfs files on resume from suspend, fixes the + upstream changes to the dropped + acpi-update-battery-information-on-notification-0x81.patch. + * Wed Mar 23 2011 Kyle McMartin - Update to 2.6.38-git12 - Enable I2C_DIOLAN_U2C USB i2c adapter [all], I2C_PXA [i686].