summaryrefslogtreecommitdiff
path: root/source/a/upower/patches
diff options
context:
space:
mode:
Diffstat (limited to 'source/a/upower/patches')
-rw-r--r--source/a/upower/patches/Fix-HID-rules-header-as-per-discussions.patch36
-rw-r--r--source/a/upower/patches/Update-UPower-HID-rules-supported-devices-list.patch114
-rw-r--r--source/a/upower/patches/linux-Clamp-percentage-for-overfull-batteries.patch77
-rw-r--r--source/a/upower/patches/linux-Detect-docked-docking-stations-correctly.patch84
-rw-r--r--source/a/upower/patches/linux-Properly-detect-bluetooth-mice-and-keyboards-t.patch141
-rw-r--r--source/a/upower/patches/rules-Add-support-for-Logitech-G700s-G700-Gaming-Mou.patch23
-rw-r--r--source/a/upower/patches/rules-support-Logitech-Unifying-in-Linux-3.19.patch30
-rw-r--r--source/a/upower/patches/upower-pm-utils-0.9.23-fix-segfault.patch24
8 files changed, 529 insertions, 0 deletions
diff --git a/source/a/upower/patches/Fix-HID-rules-header-as-per-discussions.patch b/source/a/upower/patches/Fix-HID-rules-header-as-per-discussions.patch
new file mode 100644
index 00000000..d6100394
--- /dev/null
+++ b/source/a/upower/patches/Fix-HID-rules-header-as-per-discussions.patch
@@ -0,0 +1,36 @@
+From ae9f8521c6f900255df1b6c7bc9f6adfd09abda5 Mon Sep 17 00:00:00 2001
+From: Arnaud Quette <arnaud.quette@free.fr>
+Date: Mon, 22 Jun 2015 15:11:15 +0200
+Subject: [PATCH 1/2] Fix HID rules header, as per discussions
+
+Signed-off-by: Richard Hughes <richard@hughsie.com>
+---
+ rules/95-upower-hid.rules | 10 ++++++++--
+ 1 file changed, 8 insertions(+), 2 deletions(-)
+
+diff --git a/rules/95-upower-hid.rules b/rules/95-upower-hid.rules
+index dcf4380..767e9bc 100644
+--- a/rules/95-upower-hid.rules
++++ b/rules/95-upower-hid.rules
+@@ -1,10 +1,16 @@
+ ##############################################################################################################
+ # Uninterruptible Power Supplies with USB HID interfaces
+ #
+-# to keep up to date, monitor: http://svn.debian.org/wsvn/nut/trunk/scripts/upower/95-upower-hid.rules
++# This file was automatically generated by NUT:
++# https://github.com/networkupstools/nut/
++#
++# To keep up to date, monitor upstream NUT
++# https://github.com/networkupstools/nut/commits/master/scripts/upower/95-upower-hid.rules
++# or checkout the NUT repository and call 'tools/nut-usbinfo.pl'
+
+-# only support USB, else ignore
++# newer hiddev are part of the usbmisc class
+ SUBSYSTEM=="usbmisc", GOTO="up_hid_chkdev"
++# only support USB, else ignore
+ SUBSYSTEM!="usb", GOTO="up_hid_end"
+
+ # if usbraw device, ignore
+--
+2.6.4
+
diff --git a/source/a/upower/patches/Update-UPower-HID-rules-supported-devices-list.patch b/source/a/upower/patches/Update-UPower-HID-rules-supported-devices-list.patch
new file mode 100644
index 00000000..8ef4498c
--- /dev/null
+++ b/source/a/upower/patches/Update-UPower-HID-rules-supported-devices-list.patch
@@ -0,0 +1,114 @@
+From fc27cbd5cb098ccf6c70110fe1b894987328fc0d Mon Sep 17 00:00:00 2001
+From: Arnaud Quette <arnaud.quette@free.fr>
+Date: Mon, 8 Jun 2015 10:08:24 +0200
+Subject: [PATCH 2/2] Update UPower HID rules - supported devices list
+
+As per update on the NUT - Network UPS Tools project, this first patch
+adds some more supported devices to the rules file
+
+Signed-off-by: Richard Hughes <richard@hughsie.com>
+---
+ rules/95-upower-hid.rules | 31 +++++++++++++++++++++++++++++--
+ 1 file changed, 29 insertions(+), 2 deletions(-)
+
+diff --git a/rules/95-upower-hid.rules b/rules/95-upower-hid.rules
+index 767e9bc..e064ef7 100644
+--- a/rules/95-upower-hid.rules
++++ b/rules/95-upower-hid.rules
+@@ -23,21 +23,31 @@ ENV{DEVTYPE}=="usb_interface", GOTO="up_hid_end"
+ ATTRS{idVendor}=="03f0", ENV{UPOWER_VENDOR}="Hewlett Packard"
+ ATTRS{idVendor}=="0463", ENV{UPOWER_VENDOR}="Eaton"
+ ATTRS{idVendor}=="047c", ENV{UPOWER_VENDOR}="Dell"
++ATTRS{idVendor}=="04d8", ENV{UPOWER_VENDOR}="Minibox"
+ ATTRS{idVendor}=="050d", ENV{UPOWER_VENDOR}="Belkin"
+ ATTRS{idVendor}=="051d", ENV{UPOWER_VENDOR}="APC"
+-ATTRS{idVendor}=="06da", ENV{UPOWER_VENDOR}="Liebert"
++ATTRS{idVendor}=="0592", ENV{UPOWER_VENDOR}="Powerware"
++ATTRS{idVendor}=="06da", ENV{UPOWER_VENDOR}="Phoenixtec Power Co., Ltd"
++ATTRS{idVendor}=="075d", ENV{UPOWER_VENDOR}="iDowell"
+ ATTRS{idVendor}=="0764", ENV{UPOWER_VENDOR}="Cyber Power Systems"
+ ATTRS{idVendor}=="09ae", ENV{UPOWER_VENDOR}="TrippLite"
+ ATTRS{idVendor}=="0d9f", ENV{UPOWER_VENDOR}="PowerCOM"
+ ATTRS{idVendor}=="10af", ENV{UPOWER_VENDOR}="Liebert"
+
+ # Hewlett Packard
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f06", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f08", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f09", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1f0a", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe0", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe1", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe2", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe3", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe5", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe6", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe7", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="03f0", ATTRS{idProduct}=="1fe8", ENV{UPOWER_BATTERY_TYPE}="ups"
+
+ # Eaton
+ ATTRS{idVendor}=="0463", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
+@@ -46,6 +56,10 @@ ATTRS{idVendor}=="0463", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups
+ # Dell
+ ATTRS{idVendor}=="047c", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups"
+
++# Minibox
++ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d004", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="d005", ENV{UPOWER_BATTERY_TYPE}="ups"
++
+ # Belkin
+ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0375", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0551", ENV{UPOWER_BATTERY_TYPE}="ups"
+@@ -55,15 +69,23 @@ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0900", ENV{UPOWER_BATTERY_TYPE}="ups
+ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0910", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0912", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0980", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="050d", ATTRS{idProduct}=="0f51", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="050d", ATTRS{idProduct}=="1100", ENV{UPOWER_BATTERY_TYPE}="ups"
+
+ # APC
++ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0000", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0002", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="051d", ATTRS{idProduct}=="0003", ENV{UPOWER_BATTERY_TYPE}="ups"
+
+-# Liebert
++# Powerware
++ATTRS{idVendor}=="0592", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups"
++
++# Phoenixtec Power Co., Ltd
+ ATTRS{idVendor}=="06da", ATTRS{idProduct}=="ffff", ENV{UPOWER_BATTERY_TYPE}="ups"
+
++# iDowell
++ATTRS{idVendor}=="075d", ATTRS{idProduct}=="0300", ENV{UPOWER_BATTERY_TYPE}="ups"
++
+ # Cyber Power Systems
+ ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0005", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="0764", ATTRS{idProduct}=="0501", ENV{UPOWER_BATTERY_TYPE}="ups"
+@@ -92,6 +114,7 @@ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3012", ENV{UPOWER_BATTERY_TYPE}="ups
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3013", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3014", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3015", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="3016", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4001", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4002", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4003", ENV{UPOWER_BATTERY_TYPE}="ups"
+@@ -102,6 +125,8 @@ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4007", ENV{UPOWER_BATTERY_TYPE}="ups
+ ATTRS{idVendor}=="09ae", ATTRS{idProduct}=="4008", ENV{UPOWER_BATTERY_TYPE}="ups"
+
+ # PowerCOM
++ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a2", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a3", ENV{UPOWER_BATTERY_TYPE}="ups"
+ ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a4", ENV{UPOWER_BATTERY_TYPE}="ups"
+@@ -110,5 +135,7 @@ ATTRS{idVendor}=="0d9f", ATTRS{idProduct}=="00a6", ENV{UPOWER_BATTERY_TYPE}="ups
+
+ # Liebert
+ ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0001", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0004", ENV{UPOWER_BATTERY_TYPE}="ups"
++ATTRS{idVendor}=="10af", ATTRS{idProduct}=="0008", ENV{UPOWER_BATTERY_TYPE}="ups"
+
+ LABEL="up_hid_end"
+--
+2.6.4
+
diff --git a/source/a/upower/patches/linux-Clamp-percentage-for-overfull-batteries.patch b/source/a/upower/patches/linux-Clamp-percentage-for-overfull-batteries.patch
new file mode 100644
index 00000000..bb97ca78
--- /dev/null
+++ b/source/a/upower/patches/linux-Clamp-percentage-for-overfull-batteries.patch
@@ -0,0 +1,77 @@
+From b8fe9902f3c6c50ca6a23e24fcea99582beebc65 Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt@gnome.org>
+Date: Tue, 22 Oct 2013 10:02:51 +0200
+Subject: [PATCH 2/3] linux: Clamp percentage for overfull batteries
+
+Some batteries report energy > energy_full and a percentage ("capacity"
+attribute) > 100%. Clamp these within 0 and 100% for both plausibility as well
+as to avoid setting an out-of-range property which would then become 0%.
+
+https://launchpad.net/bugs/1240673
+---
+ src/linux/integration-test | 33 +++++++++++++++++++++++++++++++++
+ src/linux/up-device-supply.c | 4 ++++
+ 2 files changed, 37 insertions(+)
+
+diff --git a/src/linux/integration-test b/src/linux/integration-test
+index 8489bf3..4be1922 100755
+--- a/src/linux/integration-test
++++ b/src/linux/integration-test
+@@ -442,6 +442,39 @@ class Tests(unittest.TestCase):
+ self.assertEqual(self.get_dbus_property('OnLowBattery'), False)
+ self.stop_daemon()
+
++ def test_battery_overfull(self):
++ '''battery which reports a > 100% percentage for a full battery'''
++
++ self.testbed.add_device('power_supply', 'BAT0', None,
++ ['type', 'Battery',
++ 'present', '1',
++ 'status', 'Full',
++ 'current_now', '1000',
++ 'charge_now', '11000000',
++ 'charge_full', '10000000',
++ 'charge_full_design', '11000000',
++ 'capacity', '110',
++ 'voltage_now', '12000000'], [])
++
++ self.start_daemon()
++ devs = self.proxy.EnumerateDevices()
++ self.assertEqual(len(devs), 1)
++ bat0_up = devs[0]
++
++ # should clamp percentage
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Percentage'), 100.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'IsPresent'), True)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'),
++ UP_DEVICE_STATE_FULLY_CHARGED)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Energy'), 132.0)
++ # should adjust EnergyFull to reality, not what the battery claims
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'EnergyFull'), 132.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'EnergyFullDesign'), 132.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Voltage'), 12.0)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'PowerSupply'), True)
++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'Type'), 2)
++ self.stop_daemon()
++
+ def test_battery_temperature(self):
+ '''battery which reports temperature'''
+
+diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
+index 8020277..b953d65 100644
+--- a/src/linux/up-device-supply.c
++++ b/src/linux/up-device-supply.c
+@@ -708,6 +708,10 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply)
+ /* get a precise percentage */
+ if (sysfs_file_exists (native_path, "capacity")) {
+ percentage = sysfs_get_double (native_path, "capacity");
++ if (percentage < 0.0f)
++ percentage = 0.0f;
++ if (percentage > 100.0f)
++ percentage = 100.0f;
+ /* for devices which provide capacity, but not {energy,charge}_now */
+ if (energy < 0.1f && energy_full > 0.0f)
+ energy = energy_full * percentage / 100;
+--
+2.6.4
+
diff --git a/source/a/upower/patches/linux-Detect-docked-docking-stations-correctly.patch b/source/a/upower/patches/linux-Detect-docked-docking-stations-correctly.patch
new file mode 100644
index 00000000..bed83d8e
--- /dev/null
+++ b/source/a/upower/patches/linux-Detect-docked-docking-stations-correctly.patch
@@ -0,0 +1,84 @@
+From a6e830cd652a086161f04b049c84283e0573881b Mon Sep 17 00:00:00 2001
+From: Bastien Nocera <hadess@hadess.net>
+Date: Wed, 15 Feb 2012 17:50:00 +0000
+Subject: [PATCH 3/3] linux: Detect docked docking stations correctly
+
+Instead of counting the number of graphics outputs, check
+all the devices the platform/dock_station subsystem that
+export a "dock_station" type.
+
+Based on patch by Armando Di Cianno <armando@goodship.net>
+
+https://bugs.freedesktop.org/show_bug.cgi?id=36818
+---
+ src/linux/up-dock.c | 38 +++++++++++++++++++-------------------
+ 1 file changed, 19 insertions(+), 19 deletions(-)
+
+diff --git a/src/linux/up-dock.c b/src/linux/up-dock.c
+index f9a7c67..4fe904e 100644
+--- a/src/linux/up-dock.c
++++ b/src/linux/up-dock.c
+@@ -46,22 +46,23 @@ G_DEFINE_TYPE (UpDock, up_dock, G_TYPE_OBJECT)
+ * up_dock_device_check:
+ **/
+ static gboolean
+-up_dock_device_check (GUdevDevice *d)
++up_dock_device_check (GUdevDevice *device)
+ {
+- const gchar *status;
+- gboolean ret = FALSE;
+-
+- /* Get the boolean state from the kernel -- note that ideally
+- * the property value would be "1" or "true" but now it's
+- * set in stone as ABI. Urgh. */
+- status = g_udev_device_get_sysfs_attr (d, "status");
+- if (status == NULL)
+- goto out;
+- ret = (g_strcmp0 (status, "connected") == 0);
+- g_debug ("graphics device %s is %s",
+- g_udev_device_get_sysfs_path (d),
+- ret ? "on" : "off");
+-out:
++ gint docked;
++ gboolean ret;
++
++ /* Is it a docking station? */
++ if (g_strcmp0 (g_udev_device_get_sysfs_attr (device, "dock_type"), "dock_station") != 0)
++ return FALSE;
++
++ /* Get the boolean state from the kernel */
++ if (g_udev_device_get_sysfs_attr (device, "docked") == NULL)
++ return FALSE;
++
++ docked = g_udev_device_get_sysfs_attr_as_int (device, "docked");
++ ret = (docked == 1);
++ g_debug ("dock_station %s is %s", g_udev_device_get_sysfs_path (device), ret ? "docked" : "undocked");
++
+ return ret;
+ }
+
+@@ -76,10 +77,9 @@ up_dock_refresh (UpDock *dock)
+ GUdevDevice *native;
+ guint count = 0;
+
+- /* the metric we're using here is that a machine is docked when
+- * there is more than one active output */
++ /* check to see if there are any docking stations, and if they are docked */
+ devices = g_udev_client_query_by_subsystem (dock->priv->gudev_client,
+- "drm");
++ "platform/dock_station");
+ for (l = devices; l != NULL; l = l->next) {
+ native = l->data;
+ count += up_dock_device_check (native);
+@@ -163,7 +163,7 @@ up_dock_uevent_signal_handler_cb (GUdevClient *client, const gchar *action,
+ static void
+ up_dock_init (UpDock *dock)
+ {
+- const gchar *subsystems[] = { "drm", NULL};
++ const gchar *subsystems[] = { "platform/dock_station", NULL};
+ dock->priv = UP_DOCK_GET_PRIVATE (dock);
+ dock->priv->gudev_client = g_udev_client_new (subsystems);
+ g_signal_connect (dock->priv->gudev_client, "uevent",
+--
+2.6.4
+
diff --git a/source/a/upower/patches/linux-Properly-detect-bluetooth-mice-and-keyboards-t.patch b/source/a/upower/patches/linux-Properly-detect-bluetooth-mice-and-keyboards-t.patch
new file mode 100644
index 00000000..55de33b7
--- /dev/null
+++ b/source/a/upower/patches/linux-Properly-detect-bluetooth-mice-and-keyboards-t.patch
@@ -0,0 +1,141 @@
+From 6c706ff03365e462e1b076155428decbed0f55c6 Mon Sep 17 00:00:00 2001
+From: Marc Deslauriers <marc.deslauriers@ubuntu.com>
+Date: Mon, 4 May 2015 19:31:31 -0400
+Subject: [PATCH] linux: Properly detect bluetooth mice and keyboards that are
+ HID devices
+
+https://bugs.freedesktop.org/show_bug.cgi?id=90222
+---
+ src/linux/integration-test | 41 +++++++++++++++++++++++++++++++++++++
+ src/linux/up-device-supply.c | 48 ++++++++++++++++++++++++++++----------------
+ 2 files changed, 72 insertions(+), 17 deletions(-)
+
+diff --git a/src/linux/integration-test b/src/linux/integration-test
+index ad7152a..b83f80d 100755
+--- a/src/linux/integration-test
++++ b/src/linux/integration-test
+@@ -761,6 +761,47 @@ class Tests(unittest.TestCase):
+ self.assertEqual(self.get_dbus_dev_property(mb1_up, 'Percentage'), 30)
+ self.assertEqual(self.get_dbus_dev_property(mb1_up, 'PowerSupply'), False)
+
++ def test_bluetooth_hid_mouse(self):
++ '''bluetooth HID mouse battery'''
++
++ self.testbed.add_device('hid',
++ 'usb1/bluetooth/hci0/hci0:01',
++ None,
++ [], [])
++
++ self.testbed.add_device(
++ 'input',
++ 'usb1/bluetooth/hci0/hci0:01/input/input2/mouse3',
++ None,
++ [], ['DEVNAME', 'input/mouse3', 'ID_INPUT_MOUSE', '1'])
++
++ self.testbed.add_device(
++ 'power_supply',
++ 'usb1/bluetooth/hci0/hci0:01/1/power_supply/hid-00:11:22:33:44:55-battery',
++ None,
++ ['type', 'Battery',
++ 'scope', 'Device',
++ 'present', '1',
++ 'online', '1',
++ 'status', 'Discharging',
++ 'capacity', '30',
++ 'model_name', 'Fancy BT mouse'],
++ [])
++
++ self.start_daemon()
++ devs = self.proxy.EnumerateDevices()
++ self.assertEqual(len(devs), 1)
++ mousebat0_up = devs[0]
++
++ self.assertEqual(self.get_dbus_dev_property(mousebat0_up, 'Model'), 'Fancy BT mouse')
++ self.assertEqual(self.get_dbus_dev_property(mousebat0_up, 'Percentage'), 30)
++ self.assertEqual(self.get_dbus_dev_property(mousebat0_up, 'PowerSupply'), False)
++ # 5 == mouse
++ self.assertEqual(self.get_dbus_dev_property(mousebat0_up, 'Type'), 5)
++ self.assertEqual(self.get_dbus_property('OnBattery'), False)
++ self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE)
++ self.stop_daemon()
++
+ def test_bluetooth_keyboard(self):
+ '''bluetooth keyboard battery'''
+
+diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c
+index 1f86382..b96080b 100644
+--- a/src/linux/up-device-supply.c
++++ b/src/linux/up-device-supply.c
+@@ -932,9 +932,12 @@ up_device_supply_coldplug (UpDevice *device)
+ const gchar *scope;
+ gchar *device_type = NULL;
+ gchar *input_path = NULL;
++ gchar *subdir = NULL;
+ GDir *dir = NULL;
+ GError *error = NULL;
+ UpDeviceKind type = UP_DEVICE_KIND_UNKNOWN;
++ guint i;
++ const char *class[] = { "hid", "bluetooth" };
+
+ up_device_supply_reset_values (supply);
+
+@@ -970,28 +973,39 @@ up_device_supply_coldplug (UpDevice *device)
+ if (g_ascii_strcasecmp (device_type, "mains") == 0) {
+ type = UP_DEVICE_KIND_LINE_POWER;
+ } else if (g_ascii_strcasecmp (device_type, "battery") == 0) {
++ for (i = 0; i < G_N_ELEMENTS(class) && type == UP_DEVICE_KIND_UNKNOWN; i++) {
++ /* Detect if the battery comes from bluetooth keyboard or mouse. */
++ bluetooth = g_udev_device_get_parent_with_subsystem (native, class[i], NULL);
++ if (bluetooth != NULL) {
++ device_path = g_udev_device_get_sysfs_path (bluetooth);
++
++ /* There may be an extra subdirectory here */
++ subdir = g_build_filename (device_path, "input", NULL);
++ if (!g_file_test (subdir, G_FILE_TEST_IS_DIR)) {
++ g_free(subdir);
++ subdir = g_strdup (device_path);
++ }
+
+- /* Detect if the battery comes from bluetooth keyboard or mouse. */
+- bluetooth = g_udev_device_get_parent_with_subsystem (native, "bluetooth", NULL);
+- if (bluetooth != NULL) {
+- device_path = g_udev_device_get_sysfs_path (bluetooth);
+- if ((dir = g_dir_open (device_path, 0, &error))) {
+- while ((file = g_dir_read_name (dir))) {
+- /* Check if it is an input device. */
+- if (g_str_has_prefix (file, "input")) {
+- input_path = g_build_filename (device_path, file, NULL);
+- break;
++ if ((dir = g_dir_open (subdir, 0, &error))) {
++ while ((file = g_dir_read_name (dir))) {
++ /* Check if it is an input device. */
++ if (g_str_has_prefix (file, "input")) {
++ input_path = g_build_filename (subdir, file, NULL);
++ break;
++ }
+ }
++ g_dir_close (dir);
++ } else {
++ g_warning ("Can not open folder %s: %s", device_path, error->message);
++ g_error_free (error);
+ }
+- g_dir_close (dir);
+- } else {
+- g_warning ("Can not open folder %s: %s", device_path, error->message);
+- g_error_free (error);
++ g_free (subdir);
++ g_object_unref (bluetooth);
+ }
+- g_object_unref (bluetooth);
+- }
+
+- if (input_path != NULL) {
++ if (input_path == NULL)
++ continue;
++
+ if ((dir = g_dir_open (input_path, 0, &error))) {
+ while ((file = g_dir_read_name (dir))) {
+ /* Check if it is a mouse device. */
+--
+2.6.3
+
diff --git a/source/a/upower/patches/rules-Add-support-for-Logitech-G700s-G700-Gaming-Mou.patch b/source/a/upower/patches/rules-Add-support-for-Logitech-G700s-G700-Gaming-Mou.patch
new file mode 100644
index 00000000..1826c416
--- /dev/null
+++ b/source/a/upower/patches/rules-Add-support-for-Logitech-G700s-G700-Gaming-Mou.patch
@@ -0,0 +1,23 @@
+From 305f62adf052aa972523d083ca44d3050f659ec9 Mon Sep 17 00:00:00 2001
+From: muzena <trebelnik2@gmail.com>
+Date: Wed, 8 Jul 2015 17:11:25 +0200
+Subject: [PATCH 4/4] rules: Add support for Logitech G700s/G700 Gaming Mouse
+
+https://bugs.freedesktop.org/show_bug.cgi?id=91270
+---
+ rules/95-upower-csr.rules | 1 +
+ 1 file changed, 1 insertion(+)
+
+diff --git a/rules/95-upower-csr.rules b/rules/95-upower-csr.rules
+index 39539ca..3b83665 100644
+--- a/rules/95-upower-csr.rules
++++ b/rules/95-upower-csr.rules
+@@ -29,4 +29,5 @@ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c532", DRIVER=="logitech-djdevice",
+ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", DRIVER=="logitech-hidpp-device", ENV{UPOWER_BATTERY_TYPE}="unifying"
+ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c532", DRIVER=="logitech-hidpp-device", ENV{UPOWER_BATTERY_TYPE}="unifying"
+ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52f", ENV{UPOWER_BATTERY_TYPE}="lg-wireless"
++ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c531", ENV{UPOWER_BATTERY_TYPE}="lg-wireless"
+ LABEL="up_unifying_end"
+--
+2.6.4
+
diff --git a/source/a/upower/patches/rules-support-Logitech-Unifying-in-Linux-3.19.patch b/source/a/upower/patches/rules-support-Logitech-Unifying-in-Linux-3.19.patch
new file mode 100644
index 00000000..adcba238
--- /dev/null
+++ b/source/a/upower/patches/rules-support-Logitech-Unifying-in-Linux-3.19.patch
@@ -0,0 +1,30 @@
+From f8104a112eb967cd4c2aaf57b5a59aafe7c4738f Mon Sep 17 00:00:00 2001
+From: Peter Wu <peter@lekensteyn.nl>
+Date: Wed, 21 Jan 2015 15:56:23 +0100
+Subject: [PATCH] rules: support Logitech Unifying in Linux 3.19
+
+Linux 3.19 changed the way in which devices get registered by
+introducing a hid-logitech-hidpp module. The driver name therefore needs
+to be adjusted.
+
+Signed-off-by: Peter Wu <peter@lekensteyn.nl>
+---
+ rules/95-upower-csr.rules | 3 +++
+ 1 file changed, 3 insertions(+)
+
+diff --git a/rules/95-upower-csr.rules b/rules/95-upower-csr.rules
+index b476660..39539ca 100644
+--- a/rules/95-upower-csr.rules
++++ b/rules/95-upower-csr.rules
+@@ -25,5 +25,8 @@ SUBSYSTEM!="hid", GOTO="up_unifying_end"
+ ATTRS{idVendor}=="046d", ENV{UPOWER_VENDOR}="Logitech, Inc."
+ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", DRIVER=="logitech-djdevice", ENV{UPOWER_BATTERY_TYPE}="unifying"
+ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c532", DRIVER=="logitech-djdevice", ENV{UPOWER_BATTERY_TYPE}="unifying"
++# These devices bind to the hid-logitech-hidpp module since Linux 3.19
++ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52b", DRIVER=="logitech-hidpp-device", ENV{UPOWER_BATTERY_TYPE}="unifying"
++ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c532", DRIVER=="logitech-hidpp-device", ENV{UPOWER_BATTERY_TYPE}="unifying"
+ ATTRS{idVendor}=="046d", ATTRS{idProduct}=="c52f", ENV{UPOWER_BATTERY_TYPE}="lg-wireless"
+ LABEL="up_unifying_end"
+--
+2.6.3
+
diff --git a/source/a/upower/patches/upower-pm-utils-0.9.23-fix-segfault.patch b/source/a/upower/patches/upower-pm-utils-0.9.23-fix-segfault.patch
new file mode 100644
index 00000000..3e897632
--- /dev/null
+++ b/source/a/upower/patches/upower-pm-utils-0.9.23-fix-segfault.patch
@@ -0,0 +1,24 @@
+From 0d64bbddaa0078ef148d609a3cfad854cf00d7de Mon Sep 17 00:00:00 2001
+From: Martin Pitt <martinpitt@gnome.org>
+Date: Fri, 08 Nov 2013 13:59:50 +0000
+Subject: lib: Fix segfault on getting property when daemon is not running
+
+This fixes "upower --version" when the daemon is not running, and thus the
+client proxy is NULL.
+---
+diff --git a/libupower-glib/up-client.c b/libupower-glib/up-client.c
+index 35d7b5d..17fb02d 100644
+--- a/libupower-glib/up-client.c
++++ b/libupower-glib/up-client.c
+@@ -322,6 +322,9 @@ up_client_get_property (GObject *object,
+ UpClient *client;
+ client = UP_CLIENT (object);
+
++ if (client->priv->proxy == NULL)
++ return;
++
+ switch (prop_id) {
+ case PROP_DAEMON_VERSION:
+ g_value_set_string (value, up_client_glue_get_daemon_version (client->priv->proxy));
+--
+cgit v0.9.0.2-2-gbebe