]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
power: supply: axp20x_battery: allow disabling battery charging
authorHermann Lauer <Hermann.Lauer@iwr.uni-heidelberg.de>
Wed, 12 May 2021 10:58:56 +0000 (12:58 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 17 Oct 2024 13:07:45 +0000 (15:07 +0200)
[ Upstream commit 6a0fcc87c9e35191d37a8819fdab9d30e523515b ]

Allow disabling and re-enabling battery charging of an axp209 PMIC
through a writable status property. With the current driver code
charging is always on.

This works on the axp209 of Banana {Pi M1+,Pro} and should work on all
AXP chips.

Signed-off-by: Hermann.Lauer@uni-heidelberg.de
Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Stable-dep-of: 61978807b00f ("power: supply: axp20x_battery: Remove design from min and max voltage")
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/power/supply/axp20x_battery.c

index 9fda98b950bab406dbbd4a758e6031edc5288e57..335e12cc5e2f9acbd1cdedb5a38375e6aee97f03 100644 (file)
@@ -40,6 +40,7 @@
 #define AXP209_FG_PERCENT              GENMASK(6, 0)
 #define AXP22X_FG_VALID                        BIT(7)
 
+#define AXP20X_CHRG_CTRL1_ENABLE       BIT(7)
 #define AXP20X_CHRG_CTRL1_TGT_VOLT     GENMASK(6, 5)
 #define AXP20X_CHRG_CTRL1_TGT_4_1V     (0 << 5)
 #define AXP20X_CHRG_CTRL1_TGT_4_15V    (1 << 5)
@@ -467,7 +468,18 @@ static int axp20x_battery_set_prop(struct power_supply *psy,
        case POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX:
                return axp20x_set_max_constant_charge_current(axp20x_batt,
                                                              val->intval);
-
+       case POWER_SUPPLY_PROP_STATUS:
+               switch (val->intval) {
+               case POWER_SUPPLY_STATUS_CHARGING:
+                       return regmap_update_bits(axp20x_batt->regmap, AXP20X_CHRG_CTRL1,
+                               AXP20X_CHRG_CTRL1_ENABLE, AXP20X_CHRG_CTRL1_ENABLE);
+
+               case POWER_SUPPLY_STATUS_DISCHARGING:
+               case POWER_SUPPLY_STATUS_NOT_CHARGING:
+                       return regmap_update_bits(axp20x_batt->regmap, AXP20X_CHRG_CTRL1,
+                               AXP20X_CHRG_CTRL1_ENABLE, 0);
+               }
+               fallthrough;
        default:
                return -EINVAL;
        }
@@ -490,7 +502,8 @@ static enum power_supply_property axp20x_battery_props[] = {
 static int axp20x_battery_prop_writeable(struct power_supply *psy,
                                         enum power_supply_property psp)
 {
-       return psp == POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN ||
+       return psp == POWER_SUPPLY_PROP_STATUS ||
+              psp == POWER_SUPPLY_PROP_VOLTAGE_MIN_DESIGN ||
               psp == POWER_SUPPLY_PROP_VOLTAGE_MAX_DESIGN ||
               psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT ||
               psp == POWER_SUPPLY_PROP_CONSTANT_CHARGE_CURRENT_MAX;