From f486f1686176e69a001d03cf53801c8ace982a7f Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 4 Apr 2023 08:52:29 +0000 Subject: [PATCH] import upower-0.99.7-4.el8_7 --- SOURCES/pending-charge.patch | 338 +++++++++++++++++++++++++++++++++++ SPECS/upower.spec | 9 +- 2 files changed, 346 insertions(+), 1 deletion(-) create mode 100644 SOURCES/pending-charge.patch diff --git a/SOURCES/pending-charge.patch b/SOURCES/pending-charge.patch new file mode 100644 index 0000000..0489913 --- /dev/null +++ b/SOURCES/pending-charge.patch @@ -0,0 +1,338 @@ +From 91e9ccf69394d3c005f0386e92c8a84c158aa0c7 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Thu, 1 Nov 2018 14:45:28 -0700 +Subject: [PATCH 1/7] daemon: Make comment more succinct + +This will help make it more clear when adding an extra state on the +following commit. It also makes the language consistent between the +different lines. There are no changes on the meaning of these lines nor +any functional changes on this commit. +--- + src/up-daemon.c | 6 +++--- + 1 file changed, 3 insertions(+), 3 deletions(-) + +diff --git a/src/up-daemon.c b/src/up-daemon.c +index 1a5dddc..95fff6b 100644 +--- a/src/up-daemon.c ++++ b/src/up-daemon.c +@@ -209,9 +209,9 @@ up_daemon_update_display_battery (UpDaemon *daemon) + power_supply == FALSE) + continue; + +- /* If one battery is charging, then the composite is charging +- * If all batteries are discharging, then the composite is discharging +- * If all batteries are fully charged, then they're all fully charged ++ /* If one battery is charging, the composite is charging ++ * If all batteries are discharging, the composite is discharging ++ * If all batteries are fully charged, the composite is fully charged + * Everything else is unknown */ + if (state == UP_DEVICE_STATE_CHARGING) + state_total = UP_DEVICE_STATE_CHARGING; +-- +2.38.1 + + +From dc2de4e321c34e62a784ac6d9971f7defbf4984f Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Mon, 15 Oct 2018 17:05:27 -0700 +Subject: [PATCH 2/7] daemon: Consider pending-charge when calculating the + display state + +Without this change if all batteries in the system are in the +pending-charge state, the display device state is set to unknown, and +its icon to battery-missing-symbolic. + +This change makes the pending-charge state be considered when +calculating the DisplayDevice state, setting it to pending-charge if at +least one battery in the system is pending-charge and no other is +charging or discharging. + +Closes: #81 +Closes: #19 +--- + src/up-daemon.c | 6 +++++- + 1 file changed, 5 insertions(+), 1 deletion(-) + +diff --git a/src/up-daemon.c b/src/up-daemon.c +index 95fff6b..690f379 100644 +--- a/src/up-daemon.c ++++ b/src/up-daemon.c +@@ -210,14 +210,18 @@ up_daemon_update_display_battery (UpDaemon *daemon) + continue; + + /* If one battery is charging, the composite is charging +- * If all batteries are discharging, the composite is discharging ++ * If all batteries are discharging or pending-charge, the composite is discharging + * If all batteries are fully charged, the composite is fully charged ++ * If one battery is pending-charge and no other is charging or discharging, then the composite is pending-charge + * Everything else is unknown */ + if (state == UP_DEVICE_STATE_CHARGING) + state_total = UP_DEVICE_STATE_CHARGING; + else if (state == UP_DEVICE_STATE_DISCHARGING && + state_total != UP_DEVICE_STATE_CHARGING) + state_total = UP_DEVICE_STATE_DISCHARGING; ++ else if (state == UP_DEVICE_STATE_PENDING_CHARGE && ++ (state_total == UP_DEVICE_STATE_UNKNOWN || state_total == UP_DEVICE_STATE_PENDING_CHARGE)) ++ state_total = UP_DEVICE_STATE_PENDING_CHARGE; + else if (state == UP_DEVICE_STATE_FULLY_CHARGED && + state_total == UP_DEVICE_STATE_UNKNOWN) + state_total = UP_DEVICE_STATE_FULLY_CHARGED; +-- +2.38.1 + + +From 4420273ca55a6f6e97dd5075bca63e8a012c8794 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Fri, 2 Nov 2018 09:49:33 -0700 +Subject: [PATCH 3/7] integration-test: Define PENDING_CHARGE and + PENDING_DISCHARGE states + +Add definitions for UP_DEVICE_STATE_PENDING_CHARGE and +UP_DEVICE_STATE_PENDING_DISCHARGE. +--- + src/linux/integration-test | 4 +++- + 1 file changed, 3 insertions(+), 1 deletion(-) + +diff --git a/src/linux/integration-test b/src/linux/integration-test +index 81064dd..fbd95da 100755 +--- a/src/linux/integration-test ++++ b/src/linux/integration-test +@@ -60,7 +60,9 @@ BATTERY_IFACE = 'org.bluez.Battery1' + UP_DEVICE_STATE_CHARGING, + UP_DEVICE_STATE_DISCHARGING, + UP_DEVICE_STATE_EMPTY, +- UP_DEVICE_STATE_FULLY_CHARGED) = (0, 1, 2, 3, 4) ++ UP_DEVICE_STATE_FULLY_CHARGED, ++ UP_DEVICE_STATE_PENDING_CHARGE, ++ UP_DEVICE_STATE_PENDING_DISCHARGE) = (0, 1, 2, 3, 4, 5, 6) + + (UP_DEVICE_LEVEL_UNKNOWN, + UP_DEVICE_LEVEL_NONE, +-- +2.38.1 + + +From ec968accf4038a48a1bc8a1a8c177a7550739233 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Fri, 2 Nov 2018 09:55:22 -0700 +Subject: [PATCH 4/7] integration-test: Test DisplayDevice pending-charge + +Test relaying the pending-charge state to the DisplayDevice. This commit +adds three tests: only one battery pending-charge, one battery +pending-charge and another one discharging, and one battery +pending-charge and another one charging. +--- + src/linux/integration-test | 72 ++++++++++++++++++++++++++++++++++++++ + 1 file changed, 72 insertions(+) + +diff --git a/src/linux/integration-test b/src/linux/integration-test +index fbd95da..ad6dade 100755 +--- a/src/linux/integration-test ++++ b/src/linux/integration-test +@@ -491,6 +491,78 @@ class Tests(dbusmock.DBusTestCase): + self.assertEqual(self.get_dbus_display_property('WarningLevel'), UP_DEVICE_LEVEL_NONE) + self.stop_daemon() + ++ def test_display_pending_charge_one_battery(self): ++ '''One battery pending-charge''' ++ ++ self.testbed.add_device('power_supply', 'BAT0', None, ++ ['type', 'Battery', ++ 'present', '1', ++ 'status', 'Not charging', ++ 'charge_full', '10500000', ++ 'charge_full_design', '11000000', ++ 'capacity', '40', ++ 'voltage_now', '12000000'], []) ++ ++ self.start_daemon() ++ devs = self.proxy.EnumerateDevices() ++ self.assertEqual(len(devs), 1) ++ self.assertEqual(self.get_dbus_display_property('State'), UP_DEVICE_STATE_PENDING_CHARGE) ++ self.stop_daemon() ++ ++ def test_display_pending_charge_other_battery_discharging(self): ++ '''One battery pending-charge and another one discharging''' ++ ++ self.testbed.add_device('power_supply', 'BAT0', None, ++ ['type', 'Battery', ++ 'present', '1', ++ 'status', 'Not charging', ++ 'charge_full', '10500000', ++ 'charge_full_design', '11000000', ++ 'capacity', '40', ++ 'voltage_now', '12000000'], []) ++ self.testbed.add_device('power_supply', 'BAT1', None, ++ ['type', 'Battery', ++ 'present', '1', ++ 'status', 'Discharging', ++ 'charge_full', '10500000', ++ 'charge_full_design', '11000000', ++ 'capacity', '40', ++ 'voltage_now', '12000000'], []) ++ ++ ++ self.start_daemon() ++ devs = self.proxy.EnumerateDevices() ++ self.assertEqual(len(devs), 2) ++ self.assertEqual(self.get_dbus_display_property('State'), UP_DEVICE_STATE_DISCHARGING) ++ self.stop_daemon() ++ ++ def test_display_pending_charge_other_battery_charging(self): ++ '''One battery pending-charge and another one charging''' ++ ++ self.testbed.add_device('power_supply', 'BAT0', None, ++ ['type', 'Battery', ++ 'present', '1', ++ 'status', 'Not charging', ++ 'charge_full', '10500000', ++ 'charge_full_design', '11000000', ++ 'capacity', '40', ++ 'voltage_now', '12000000'], []) ++ self.testbed.add_device('power_supply', 'BAT1', None, ++ ['type', 'Battery', ++ 'present', '1', ++ 'status', 'Charging', ++ 'charge_full', '10500000', ++ 'charge_full_design', '11000000', ++ 'capacity', '40', ++ 'voltage_now', '12000000'], []) ++ ++ ++ self.start_daemon() ++ devs = self.proxy.EnumerateDevices() ++ self.assertEqual(len(devs), 2) ++ self.assertEqual(self.get_dbus_display_property('State'), UP_DEVICE_STATE_CHARGING) ++ self.stop_daemon() ++ + def test_battery_charge(self): + '''battery which reports charge instead of energy + +-- +2.38.1 + + +From 9318e73c8cd55522829970a74dc9d6ca59e4f828 Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Fri, 2 Nov 2018 16:05:21 -0700 +Subject: [PATCH 5/7] linux: Don't set out_state before state is final + +Currently up_device_supply_refresh_battery sets out_state before the +state value is definitive, so the wrong state value is returned to the +caller. Luckily the only caller does not make use of this value at the +moment, so there are no user-visible consequences. Nonetheless this is a +bug, so this commit fixes it. +--- + src/linux/up-device-supply.c | 3 ++- + 1 file changed, 2 insertions(+), 1 deletion(-) + +diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c +index 11a14e1..993cf12 100644 +--- a/src/linux/up-device-supply.c ++++ b/src/linux/up-device-supply.c +@@ -664,7 +664,6 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply, + } + + state = up_device_supply_get_state (native_path); +- *out_state = state; + + /* reset unknown counter */ + if (state != UP_DEVICE_STATE_UNKNOWN) { +@@ -834,6 +833,8 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply, + supply->priv->energy_old_first = 0; + } + ++ *out_state = state; ++ + g_object_set (device, + "energy", energy, + "energy-full", energy_full, +-- +2.38.1 + + +From ebea310f15cb61a3f5558800a45951d3c885201d Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Mon, 26 Nov 2018 13:12:18 -0800 +Subject: [PATCH 6/7] linux: Map pending-charge to fully-charged when charge is + 100% + +Some devices report "Not charging" when the battery is full and AC power +is connected. In this situation we should report fully-charged instead +of pending-charge. + +Closes: #86. +--- + src/linux/up-device-supply.c | 6 ++++++ + 1 file changed, 6 insertions(+) + +diff --git a/src/linux/up-device-supply.c b/src/linux/up-device-supply.c +index 993cf12..42971da 100644 +--- a/src/linux/up-device-supply.c ++++ b/src/linux/up-device-supply.c +@@ -733,6 +733,12 @@ up_device_supply_refresh_battery (UpDeviceSupply *supply, + percentage = CLAMP(percentage, 0.0f, 100.0f); + } + ++ /* Some devices report "Not charging" when the battery is full and AC ++ * power is connected. In this situation we should report fully-charged ++ * instead of pending-charge. */ ++ if (state == UP_DEVICE_STATE_PENDING_CHARGE && percentage == 100.0) ++ state = UP_DEVICE_STATE_FULLY_CHARGED; ++ + /* the battery isn't charging or discharging, it's just + * sitting there half full doing nothing: try to guess a state */ + if (state == UP_DEVICE_STATE_UNKNOWN && supply->priv->is_power_supply) { +-- +2.38.1 + + +From b327348ac160b57430ba4d2662835513ea35c08c Mon Sep 17 00:00:00 2001 +From: =?UTF-8?q?Jo=C3=A3o=20Paulo=20Rechi=20Vita?= +Date: Mon, 26 Nov 2018 13:13:00 -0800 +Subject: [PATCH 7/7] integration-test: Test mapping pending-charge to + fully-charged + +--- + src/linux/integration-test | 25 +++++++++++++++++++++++++ + 1 file changed, 25 insertions(+) + +diff --git a/src/linux/integration-test b/src/linux/integration-test +index ad6dade..c6fb5c0 100755 +--- a/src/linux/integration-test ++++ b/src/linux/integration-test +@@ -563,6 +563,31 @@ class Tests(dbusmock.DBusTestCase): + self.assertEqual(self.get_dbus_display_property('State'), UP_DEVICE_STATE_CHARGING) + self.stop_daemon() + ++ def test_map_pending_charge_to_fully_charged(self): ++ '''Map pending-charge to fully-charged''' ++ ++ bat0 = self.testbed.add_device('power_supply', 'BAT0', None, ++ ['type', 'Battery', ++ 'present', '1', ++ 'status', 'Not charging', ++ 'charge_full', '10500000', ++ 'charge_full_design', '11000000', ++ 'capacity', '100', ++ 'voltage_now', '12000000'], []) ++ ++ self.start_daemon() ++ devs = self.proxy.EnumerateDevices() ++ self.assertEqual(len(devs), 1) ++ bat0_up = devs[0] ++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'), UP_DEVICE_STATE_FULLY_CHARGED) ++ self.stop_daemon() ++ ++ # and make sure we still return pending-charge below 100% ++ self.testbed.set_attribute(bat0, 'capacity', '99') ++ self.start_daemon() ++ self.assertEqual(self.get_dbus_dev_property(bat0_up, 'State'), UP_DEVICE_STATE_PENDING_CHARGE) ++ self.stop_daemon() ++ + def test_battery_charge(self): + '''battery which reports charge instead of energy + +-- +2.38.1 + diff --git a/SPECS/upower.spec b/SPECS/upower.spec index bc55d4c..0671d7a 100644 --- a/SPECS/upower.spec +++ b/SPECS/upower.spec @@ -1,7 +1,7 @@ Summary: Power Management Service Name: upower Version: 0.99.7 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv2+ Group: System Environment/Libraries URL: http://upower.freedesktop.org/ @@ -23,6 +23,9 @@ BuildRequires: systemd Requires: udev Requires: gobject-introspection +# 0.99.10 backport +Patch0: pending-charge.patch + %if 0%{?fedora} # From rhughes-f20-gnome-3-12 copr Obsoletes: compat-upower09 < 0.99 @@ -107,6 +110,10 @@ rm -f $RPM_BUILD_ROOT%{_libdir}/*.la %{_datadir}/gtk-doc/html/UPower/* %changelog +* Mon Dec 19 2022 Bastien Nocera - 0.99.7-4 +- Fix pending-charge state on some laptops +Resolves: rhbz#2170088 + * Fri Feb 09 2018 Fedora Release Engineering - 0.99.7-3 - Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild