power: ip5xxx_power: Fall back to Charge End bit if status register is absent
authorCsókás, Bence <csokas.bence@prolan.hu>
Tue, 19 Nov 2024 18:07:38 +0000 (19:07 +0100)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Thu, 5 Dec 2024 00:07:08 +0000 (01:07 +0100)
On parts where there is no status register, check the Charge End
bit to set charging/not charging status. Fullness, trickle charge
status, discharging etc. cannot be determined from just this bit.

Signed-off-by: Csókás, Bence <csokas.bence@prolan.hu>
Link: https://lore.kernel.org/r/20241119180741.2237692-6-csokas.bence@prolan.hu
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/ip5xxx_power.c

index 2c4d338574d70bc531800b11cad5f61aaba77c17..24b437cb8793c20d836c8421f06431b958fec05c 100644 (file)
@@ -270,6 +270,19 @@ static int ip5xxx_battery_get_status(struct ip5xxx *ip5xxx, int *val)
        unsigned int rval;
        int ret;
 
+       if (!ip5xxx->regs.charger.status) {
+               // Fall-back to Charging Ended bit
+               ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.chg_end, &rval);
+               if (ret)
+                       return ret;
+
+               if (rval == ip5xxx->chg_end_inverted)
+                       *val = POWER_SUPPLY_STATUS_CHARGING;
+               else
+                       *val = POWER_SUPPLY_STATUS_NOT_CHARGING;
+               return 0;
+       }
+
        ret = ip5xxx_read(ip5xxx, ip5xxx->regs.charger.status, &rval);
        if (ret)
                return ret;