From e3aab99c85a88c3a09d8a090bbbea8370b873b8f Mon Sep 17 00:00:00 2001 From: Greg Kroah-Hartman Date: Tue, 15 Jul 2014 16:14:40 -0700 Subject: [PATCH] 3.14-stable patches added patches: acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch --- ...information-if-failed-during-probing.patch | 82 +++++++++++++++++++ queue-3.14/series | 1 + 2 files changed, 83 insertions(+) create mode 100644 queue-3.14/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch diff --git a/queue-3.14/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch b/queue-3.14/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch new file mode 100644 index 00000000000..06f5d1d6879 --- /dev/null +++ b/queue-3.14/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch @@ -0,0 +1,82 @@ +From 75646e758a0ecbed5024454507d5be5b9ea9dcbf Mon Sep 17 00:00:00 2001 +From: Lan Tianyu +Date: Mon, 7 Jul 2014 15:47:12 +0800 +Subject: ACPI / battery: Retry to get battery information if failed during probing + +From: Lan Tianyu + +commit 75646e758a0ecbed5024454507d5be5b9ea9dcbf upstream. + +Some machines (eg. Lenovo Z480) ECs are not stable during boot up +and causes battery driver fails to be loaded due to failure of getting +battery information from EC sometimes. After several retries, the +operation will work. This patch is to retry to get battery information 5 +times if the first try fails. + +[ backport to 3.14.5: removed second parameter in acpi_battery_update(), +introduced by the commit 9e50bc14a7f58b5d8a55973b2d69355852ae2dae (ACPI / +battery: Accelerate battery resume callback)] + +[naszar : backport to 3.14.5] +Link: https://bugzilla.kernel.org/show_bug.cgi?id=75581 +Reported-and-tested-by: naszar +Cc: All applicable +Signed-off-by: Lan Tianyu +Signed-off-by: Rafael J. Wysocki +Signed-off-by: Greg Kroah-Hartman +--- + drivers/acpi/battery.c | 27 ++++++++++++++++++++++++++- + 1 file changed, 26 insertions(+), 1 deletion(-) + +--- a/drivers/acpi/battery.c ++++ b/drivers/acpi/battery.c +@@ -34,6 +34,7 @@ + #include + #include + #include ++#include + #include + + #ifdef CONFIG_ACPI_PROCFS_POWER +@@ -1070,6 +1071,28 @@ static struct dmi_system_id bat_dmi_tabl + {}, + }; + ++/* ++ * Some machines'(E,G Lenovo Z480) ECs are not stable ++ * during boot up and this causes battery driver fails to be ++ * probed due to failure of getting battery information ++ * from EC sometimes. After several retries, the operation ++ * may work. So add retry code here and 20ms sleep between ++ * every retries. ++ */ ++static int acpi_battery_update_retry(struct acpi_battery *battery) ++{ ++ int retry, ret; ++ ++ for (retry = 5; retry; retry--) { ++ ret = acpi_battery_update(battery); ++ if (!ret) ++ break; ++ ++ msleep(20); ++ } ++ return ret; ++} ++ + static int acpi_battery_add(struct acpi_device *device) + { + int result = 0; +@@ -1088,9 +1111,11 @@ static int acpi_battery_add(struct acpi_ + mutex_init(&battery->sysfs_lock); + if (acpi_has_method(battery->device->handle, "_BIX")) + set_bit(ACPI_BATTERY_XINFO_PRESENT, &battery->flags); +- result = acpi_battery_update(battery); ++ ++ result = acpi_battery_update_retry(battery); + if (result) + goto fail; ++ + #ifdef CONFIG_ACPI_PROCFS_POWER + result = acpi_battery_add_fs(device); + #endif diff --git a/queue-3.14/series b/queue-3.14/series index 936b13b8227..ac78f4e4a05 100644 --- a/queue-3.14/series +++ b/queue-3.14/series @@ -63,3 +63,4 @@ x86-espfix-fix-broken-header-guard.patch x86-espfix-make-espfix64-a-kconfig-option-fix-uml.patch x86-espfix-make-it-possible-to-disable-16-bit-support.patch x86-ioremap-speed-up-check-for-ram-pages.patch +acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch -- 2.47.3