summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'sys-power/upower/files/upower-0.99.0-fix-shutdown-on-boot.patch')
-rw-r--r--sys-power/upower/files/upower-0.99.0-fix-shutdown-on-boot.patch75
1 files changed, 75 insertions, 0 deletions
diff --git a/sys-power/upower/files/upower-0.99.0-fix-shutdown-on-boot.patch b/sys-power/upower/files/upower-0.99.0-fix-shutdown-on-boot.patch
new file mode 100644
index 000000000000..76fdcc876a2b
--- /dev/null
+++ b/sys-power/upower/files/upower-0.99.0-fix-shutdown-on-boot.patch
@@ -0,0 +1,75 @@
+From dbf7eb7e557674a9b888a088f1cae4f36b77e14d Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Wed, 23 Apr 2014 13:34:24 +0000
+Subject: daemon: Fix shutdown on boot on some machines
+
+On the Lenovo A600 all-in-one, there's a HCI/HID dual-mode Broadcom
+device which will try to get the battery level of the supplied
+mouse and keyboard, but will usually fail to do so.
+
+So we have a battery of type "battery" (it's not either a mouse or
+a keyboard, as it's supposed to handle both) but our display device
+battery code doesn't check whether those batteries are power supplies
+or not, using this "empty" (0% after the check timed out) battery in
+the shutdown policy.
+
+Check better for power supply devices, not all the "battery" types
+are power supply batteries, they might be non-power supply ones
+from unknown device types.
+---
+diff --git a/src/up-daemon.c b/src/up-daemon.c
+index df0a7b7..ef90be4 100644
+--- a/src/up-daemon.c
++++ b/src/up-daemon.c
+@@ -208,6 +208,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
+ gdouble energy_rate = 0.0;
+ gint64 time_to_empty = 0;
+ gint64 time_to_full = 0;
++ gboolean power_supply = FALSE;
+
+ device = g_ptr_array_index (array, i);
+ g_object_get (device,
+@@ -219,6 +220,7 @@ up_daemon_update_display_battery (UpDaemon *daemon)
+ "energy-rate", &energy_rate,
+ "time-to-empty", &time_to_empty,
+ "time-to-full", &time_to_full,
++ "power-supply", &power_supply,
+ NULL);
+
+ /* When we have a UPS, it's either a desktop, and
+@@ -236,7 +238,8 @@ up_daemon_update_display_battery (UpDaemon *daemon)
+ is_present_total = TRUE;
+ break;
+ }
+- if (kind != UP_DEVICE_KIND_BATTERY)
++ if (kind != UP_DEVICE_KIND_BATTERY ||
++ power_supply == FALSE)
+ continue;
+
+ /* If one battery is charging, then the composite is charging
+@@ -389,17 +392,21 @@ up_daemon_refresh_battery_devices (UpDaemon *daemon)
+ guint i;
+ GPtrArray *array;
+ UpDevice *device;
+- UpDeviceKind type;
+
+ /* refresh all devices in array */
+ array = up_device_list_get_array (daemon->priv->power_devices);
+ for (i=0; i<array->len; i++) {
++ UpDeviceKind type;
++ gboolean power_supply;
++
+ device = (UpDevice *) g_ptr_array_index (array, i);
+ /* only refresh battery devices */
+ g_object_get (device,
+ "type", &type,
++ "power-supply", &power_supply,
+ NULL);
+- if (type == UP_DEVICE_KIND_BATTERY)
++ if (type == UP_DEVICE_KIND_BATTERY &&
++ power_supply)
+ up_device_refresh_internal (device);
+ }
+ g_ptr_array_unref (array);
+--
+cgit v0.9.0.2-2-gbebe