mfd: stmfx: Improve error message triggered by regulator fault in .remove()
authorUwe Kleine-König <u.kleine-koenig@pengutronix.de>
Mon, 14 Feb 2022 15:07:10 +0000 (16:07 +0100)
committerLee Jones <lee.jones@linaro.org>
Tue, 8 Mar 2022 09:44:05 +0000 (09:44 +0000)
Returning a non-zero value in an i2c remove callback results in the i2c
core emitting a very generic error message ("remove failed (-ESOMETHING),
will be ignored") and as the message indicates not further error handling
is done.

Instead emit a more specific error message and then return zero in
.remove().

The long-term goal is to make the i2c remove prototype return void, making
all implementations return 0 is preparatory work for this change.

Signed-off-by: Uwe Kleine-König <u.kleine-koenig@pengutronix.de>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
Link: https://lore.kernel.org/r/20220214150710.312269-1-u.kleine-koenig@pengutronix.de
drivers/mfd/stmfx.c

index e095a39..122f960 100644 (file)
@@ -392,17 +392,22 @@ err:
        return ret;
 }
 
-static int stmfx_chip_exit(struct i2c_client *client)
+static void stmfx_chip_exit(struct i2c_client *client)
 {
        struct stmfx *stmfx = i2c_get_clientdata(client);
 
        regmap_write(stmfx->map, STMFX_REG_IRQ_SRC_EN, 0);
        regmap_write(stmfx->map, STMFX_REG_SYS_CTRL, 0);
 
-       if (stmfx->vdd)
-               return regulator_disable(stmfx->vdd);
+       if (stmfx->vdd) {
+               int ret;
 
-       return 0;
+               ret = regulator_disable(stmfx->vdd);
+               if (ret)
+                       dev_err(&client->dev,
+                               "Failed to disable vdd regulator: %pe\n",
+                               ERR_PTR(ret));
+       }
 }
 
 static int stmfx_probe(struct i2c_client *client,
@@ -466,7 +471,9 @@ static int stmfx_remove(struct i2c_client *client)
 {
        stmfx_irq_exit(client);
 
-       return stmfx_chip_exit(client);
+       stmfx_chip_exit(client);
+
+       return 0;
 }
 
 #ifdef CONFIG_PM_SLEEP