Re: Charging status for N900/RX-51 with bq27200

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Merlijn,

On Thu, Feb 15, 2018 at 12:53:32PM +0100, Merlijn Wajer wrote:
> On my N900, with kernel 4.15-rc6 (I realise it's not the very latest),
> the (charging) status of the battery is confusing or plain wrong:
> 
> When no charger is connected, this is reported:
> 
> # cat
> /sys/devices/platform/68000000.ocp/48072000.i2c/i2c-2/2-0055/power_supply/bq27200-0/status
> Not charging
> 
> When a charged is connected, this is reported:
> 
> # cat
> /sys/devices/platform/68000000.ocp/48072000.i2c/i2c-2/2-0055/power_supply/bq27200-0/status
> Charging
> 
> The odd part here is "Not charging" -- on all my other devices, a device
> that is discharging is reported as "Discharging", not as "Not charging".

"Not charging" is reported, when the battery is neither charged, nor
dis-charged. It's supposed to be used when a charger is connected
without charging the battery.

> [...]
>
> The N900 reporting "Not charging" when it is in fact discharging
> confuses userspace, such as UPower.

It's a bug.

> I am not particularly versed in the N900/RX-51 drivers, but from a
> quick glance this line looks suspicious [1].
> 
> Cheers,
> Merlijn
> 
> [1]
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/power/supply/bq27xxx_battery.c#n1673

Basically the bq27xxx driver assumes, that charger is connected.
I guess the problem is, that the N900 devicetree does not specify,
that the bq27xxx is supplied by the charger, so
power_supply_am_i_supplied returns -ENODEV.

This can be fixed by adding the following to the N900 DT:

&bq27200 {
    power-supplies = <&bq24150a>;
};

But there is also a bug in the bq27xxx driver, that should cope
with no charger being specified. The following patch should fix
the issue. I currently don't have my N900 with me. Could you
give it a try?

-- Sebastian

--------------------------------------------------

From 47642af85cc9ffc829b5f478e71b1751a98e2659 Mon Sep 17 00:00:00 2001
From: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxxxx>
Date: Thu, 15 Feb 2018 21:28:40 +0100
Subject: [PATCH] power: supply: bq27xxx: support missing supplier device

power_supply_am_i_supplied() can return negative error
codes. In this case we should assume, that no charger
is connected and the battery should be marked as
DISCHARGING instead of NOT_CHARGING.

Reported-by: Merlijn Wajer <merlijn@xxxxxxxxxx>
Signed-off-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxxxx>
---
 drivers/power/supply/bq27xxx_battery.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/power/supply/bq27xxx_battery.c b/drivers/power/supply/bq27xxx_battery.c
index d99981542a46..7ce60519b1bc 100644
--- a/drivers/power/supply/bq27xxx_battery.c
+++ b/drivers/power/supply/bq27xxx_battery.c
@@ -1670,7 +1670,7 @@ static int bq27xxx_battery_status(struct bq27xxx_device_info *di,
 			status = POWER_SUPPLY_STATUS_FULL;
 		else if (di->cache.flags & BQ27000_FLAG_CHGS)
 			status = POWER_SUPPLY_STATUS_CHARGING;
-		else if (power_supply_am_i_supplied(di->bat))
+		else if (power_supply_am_i_supplied(di->bat) > 0)
 			status = POWER_SUPPLY_STATUS_NOT_CHARGING;
 		else
 			status = POWER_SUPPLY_STATUS_DISCHARGING;
-- 
2.15.1

-- Sebastian

Attachment: signature.asc
Description: PGP signature


[Index of Archives]     [Linux Arm (vger)]     [ARM Kernel]     [ARM MSM]     [Linux Tegra]     [Linux WPAN Networking]     [Linux Wireless Networking]     [Maemo Users]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Trails]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux