diff mbox series

power: supply: bq27xxx: Report charge full state correctly

Message ID 20240226193722.2173624-1-absicsz@gmail.com (mailing list archive)
State Handled Elsewhere, archived
Headers show
Series power: supply: bq27xxx: Report charge full state correctly | expand

Commit Message

Sicelo Feb. 26, 2024, 7:37 p.m. UTC
When reporting the charging status, the existing code reports the battery
as full only when the reported current flowing is exactly 0mA, which is
unlikely in practice.

Fix the reporting by giving priority to the battery's full state
indication/flag.

Tested on the Nokia N900 with bq27200 fuel gauge.

Signed-off-by: Sicelo A. Mhlongo <absicsz@gmail.com>
---
 drivers/power/supply/bq27xxx_battery.c | 15 ++++++---------
 1 file changed, 6 insertions(+), 9 deletions(-)

Comments

Sebastian Reichel Feb. 27, 2024, 8:16 p.m. UTC | #1
On Mon, 26 Feb 2024 21:37:22 +0200, Sicelo A. Mhlongo wrote:
> When reporting the charging status, the existing code reports the battery
> as full only when the reported current flowing is exactly 0mA, which is
> unlikely in practice.
> 
> Fix the reporting by giving priority to the battery's full state
> indication/flag.
> 
> [...]

Applied, thanks!

[1/1] power: supply: bq27xxx: Report charge full state correctly
      commit: 8fbb11162504f2de167a8ccd2d2c55a849d2c5ea

Best regards,
diff mbox series

Patch

diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c
index 1c4a9d137744..810f6eb468ad 100644
--- a/drivers/power/supply/bq27xxx_battery.c
+++ b/drivers/power/supply/bq27xxx_battery.c
@@ -1816,17 +1816,14 @@  static int bq27xxx_battery_current_and_status(
 		val_curr->intval = curr;
 
 	if (val_status) {
-		if (curr > 0) {
+		if (bq27xxx_battery_is_full(di, flags))
+			val_status->intval = POWER_SUPPLY_STATUS_FULL;
+		else if (curr > 0)
 			val_status->intval = POWER_SUPPLY_STATUS_CHARGING;
-		} else if (curr < 0) {
+		else if (curr < 0)
 			val_status->intval = POWER_SUPPLY_STATUS_DISCHARGING;
-		} else {
-			if (bq27xxx_battery_is_full(di, flags))
-				val_status->intval = POWER_SUPPLY_STATUS_FULL;
-			else
-				val_status->intval =
-					POWER_SUPPLY_STATUS_NOT_CHARGING;
-		}
+		else
+			val_status->intval = POWER_SUPPLY_STATUS_NOT_CHARGING;
 	}
 
 	return 0;