diff options
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.patch | 75 |
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 |