]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
3.10-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 15 Jul 2014 23:14:37 +0000 (16:14 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Tue, 15 Jul 2014 23:14:37 +0000 (16:14 -0700)
added patches:
acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch

queue-3.10/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch [new file with mode: 0644]
queue-3.10/series

diff --git a/queue-3.10/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch b/queue-3.10/acpi-battery-retry-to-get-battery-information-if-failed-during-probing.patch
new file mode 100644 (file)
index 0000000..0bec38a
--- /dev/null
@@ -0,0 +1,82 @@
+From 75646e758a0ecbed5024454507d5be5b9ea9dcbf Mon Sep 17 00:00:00 2001
+From: Lan Tianyu <tianyu.lan@intel.com>
+Date: Mon, 7 Jul 2014 15:47:12 +0800
+Subject: ACPI / battery: Retry to get battery information if failed during probing
+
+From: Lan Tianyu <tianyu.lan@intel.com>
+
+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 <naszar@ya.ru>: backport to 3.14.5]
+Link: https://bugzilla.kernel.org/show_bug.cgi?id=75581
+Reported-and-tested-by: naszar <naszar@ya.ru>
+Cc: All applicable <stable@vger.kernel.org>
+Signed-off-by: Lan Tianyu <tianyu.lan@intel.com>
+Signed-off-by: Rafael J. Wysocki <rafael.j.wysocki@intel.com>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ 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 <linux/dmi.h>
+ #include <linux/slab.h>
+ #include <linux/suspend.h>
++#include <linux/delay.h>
+ #include <asm/unaligned.h>
+ #ifdef CONFIG_ACPI_PROCFS_POWER
+@@ -1081,6 +1082,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;
+@@ -1100,9 +1123,11 @@ static int acpi_battery_add(struct acpi_
+       if (ACPI_SUCCESS(acpi_get_handle(battery->device->handle,
+                       "_BIX", &handle)))
+               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
index 45fcd0f52d20955f50b9c936468c45ad4bf8b546..af62190e7917f03930f03bd390dcc1f1367437f9 100644 (file)
@@ -41,3 +41,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