[PATCH v4 05/11] power: supply: max17042_battery: Propagate status register errors
Vincent Cloutier <[email protected]>
| Newsgroups | org.kernel.vger.linux-pm,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel |
|---|---|
| Message-ID | <[email protected]> |
From: Vincent Cloutier <[email protected]> The driver ignores errors from the initial STATUS read and final POR clear. A failed read can leave the POR decision based on an invalid value, while a failed clear can report initialization complete with POR still set. Check the probe-time read and return the POR-clear result from max17042_init_chip(). Keep this error handling separate from the retry policy added later. Assisted-by: OpenCode:gpt-5.6-sol Signed-off-by: Vincent Cloutier <[email protected]> --- drivers/power/supply/max17042_battery.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/power/supply/max17042_battery.c b/drivers/power/supply/max17042_battery.c index 38abd3604643..9210bdb4d67e 100644 --- a/drivers/power/supply/max17042_battery.c +++ b/drivers/power/supply/max17042_battery.c @@ -908,8 +908,7 @@ static int max17042_init_chip(struct max17042_chip *chip) } /* Init complete, Clear the POR bit */ - regmap_update_bits(map, MAX17042_STATUS, STATUS_POR_BIT, 0x0); - return 0; + return regmap_clear_bits(map, MAX17042_STATUS, STATUS_POR_BIT); } static void max17042_set_soc_threshold(struct max17042_chip *chip, u16 off) @@ -1248,7 +1247,10 @@ static int max17042_probe(struct i2c_client *client, struct device *dev, int irq chip->irq = irq; - regmap_read(chip->regmap, MAX17042_STATUS, &val); + ret = regmap_read(chip->regmap, MAX17042_STATUS, &val); + if (ret) + return dev_err_probe(dev, ret, "failed to read status\n"); + if (val & STATUS_POR_BIT) { ret = devm_delayed_work_autocancel(dev, &chip->work, max17042_init_worker); -- 2.55.0