Skip to content

Commit

Permalink
power: supply: axp20x_battery: Fix fault handling for AXP717
Browse files Browse the repository at this point in the history
Correct the fault handling for the AXP717 by changing the i2c write
from regmap_update_bits() to regmap_write_bits(). The update bits
function does not work properly on a RW1C register where we must
write a 1 back to an existing register to clear it.

Additionally, as part of this testing I confirmed the behavior of
errors reappearing, so remove comment about assumptions.

Fixes: 6625767 ("power: supply: axp20x_battery: add support for AXP717")
Signed-off-by: Chris Morgan <[email protected]>
Reviewed-by: Chen-Yu Tsai <[email protected]>
Link: https://lore.kernel.org/r/[email protected]
Signed-off-by: Sebastian Reichel <[email protected]>
  • Loading branch information
macromorgan authored and sre committed Feb 3, 2025
1 parent 64dd6ed commit 9838011
Showing 1 changed file with 15 additions and 16 deletions.
31 changes: 15 additions & 16 deletions drivers/power/supply/axp20x_battery.c
Original file line number Diff line number Diff line change
Expand Up @@ -466,10 +466,9 @@ static int axp717_battery_get_prop(struct power_supply *psy,

/*
* If a fault is detected it must also be cleared; if the
* condition persists it should reappear (This is an
* assumption, it's actually not documented). A restart was
* not sufficient to clear the bit in testing despite the
* register listed as POR.
* condition persists it should reappear. A restart was not
* sufficient to clear the bit in testing despite the register
* listed as POR.
*/
case POWER_SUPPLY_PROP_HEALTH:
ret = regmap_read(axp20x_batt->regmap, AXP717_PMU_FAULT,
Expand All @@ -480,26 +479,26 @@ static int axp717_battery_get_prop(struct power_supply *psy,
switch (reg & AXP717_BATT_PMU_FAULT_MASK) {
case AXP717_BATT_UVLO_2_5V:
val->intval = POWER_SUPPLY_HEALTH_DEAD;
regmap_update_bits(axp20x_batt->regmap,
AXP717_PMU_FAULT,
AXP717_BATT_UVLO_2_5V,
AXP717_BATT_UVLO_2_5V);
regmap_write_bits(axp20x_batt->regmap,
AXP717_PMU_FAULT,
AXP717_BATT_UVLO_2_5V,
AXP717_BATT_UVLO_2_5V);
return 0;

case AXP717_BATT_OVER_TEMP:
val->intval = POWER_SUPPLY_HEALTH_HOT;
regmap_update_bits(axp20x_batt->regmap,
AXP717_PMU_FAULT,
AXP717_BATT_OVER_TEMP,
AXP717_BATT_OVER_TEMP);
regmap_write_bits(axp20x_batt->regmap,
AXP717_PMU_FAULT,
AXP717_BATT_OVER_TEMP,
AXP717_BATT_OVER_TEMP);
return 0;

case AXP717_BATT_UNDER_TEMP:
val->intval = POWER_SUPPLY_HEALTH_COLD;
regmap_update_bits(axp20x_batt->regmap,
AXP717_PMU_FAULT,
AXP717_BATT_UNDER_TEMP,
AXP717_BATT_UNDER_TEMP);
regmap_write_bits(axp20x_batt->regmap,
AXP717_PMU_FAULT,
AXP717_BATT_UNDER_TEMP,
AXP717_BATT_UNDER_TEMP);
return 0;

default:
Expand Down

0 comments on commit 9838011

Please sign in to comment.