]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
power: supply: max17042: report time to full (max17055 & max77759)
authorAndré Draszik <andre.draszik@linaro.org>
Mon, 2 Mar 2026 13:32:10 +0000 (13:32 +0000)
committerSebastian Reichel <sebastian.reichel@collabora.com>
Tue, 3 Mar 2026 22:58:07 +0000 (23:58 +0100)
Report the remaining time to full as calculated by the firmware for
devices that implement this.
Similar to time to empty, the reported value is only meaningful when
charging, i.e. if it is != U16_MAX.

Reviewed-by: Peter Griffin <peter.griffin@linaro.org>
Signed-off-by: André Draszik <andre.draszik@linaro.org>
Link: https://patch.msgid.link/20260302-max77759-fg-v3-11-3c5f01dbda23@linaro.org
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
drivers/power/supply/max17042_battery.c

index bafbf87060559787c528416784022c50fc555841..167fb3fb373204b2668f1e5706b848d5c0b24ade 100644 (file)
@@ -89,6 +89,7 @@ static enum power_supply_property max17042_battery_props[] = {
        POWER_SUPPLY_PROP_HEALTH,
        POWER_SUPPLY_PROP_SCOPE,
        POWER_SUPPLY_PROP_TIME_TO_EMPTY_NOW,
+       POWER_SUPPLY_PROP_TIME_TO_FULL_NOW,
        // these two have to be at the end on the list
        POWER_SUPPLY_PROP_CURRENT_NOW,
        POWER_SUPPLY_PROP_CURRENT_AVG,
@@ -443,6 +444,21 @@ static int max17042_get_property(struct power_supply *psy,
                if (data == U16_MAX)
                        return -ENODATA;
 
+               val->intval = data * 5625 / 1000;
+               break;
+       case POWER_SUPPLY_PROP_TIME_TO_FULL_NOW:
+               if (chip->chip_type != MAXIM_DEVICE_TYPE_MAX17055 &&
+                   chip->chip_type != MAXIM_DEVICE_TYPE_MAX77759)
+                       return -EINVAL;
+
+               ret = regmap_read(map, MAX17055_TTF, &data);
+               if (ret < 0)
+                       return ret;
+
+               /* when discharging, the value is not meaningful */
+               if (data == U16_MAX)
+                       return -ENODATA;
+
                val->intval = data * 5625 / 1000;
                break;
        default: