mfd: wcd934x: Fix an error handling path in wcd934x_slim_probe()

If devm_gpiod_get_optional() fails, some resources need to be released, as
already done in the .remove() function.

While at it, remove the unneeded error code from a dev_err_probe() call.
It is already added in a human readable way by dev_err_probe() itself.

Fixes: 6a0ee2a61a ("mfd: wcd934x: Replace legacy gpio interface for gpiod")
Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr>
Link: https://lore.kernel.org/r/02d8447f6d1df52cc8357aae698152e9a9be67c6.1684565021.git.christophe.jaillet@wanadoo.fr
Signed-off-by: Lee Jones <lee@kernel.org>
This commit is contained in:
Christophe JAILLET 2023-05-20 09:10:54 +02:00 committed by Lee Jones
parent 8f3ef556f8
commit f190b4891a
1 changed files with 7 additions and 2 deletions

View File

@ -258,8 +258,9 @@ static int wcd934x_slim_probe(struct slim_device *sdev)
usleep_range(600, 650); usleep_range(600, 650);
reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW); reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_LOW);
if (IS_ERR(reset_gpio)) { if (IS_ERR(reset_gpio)) {
return dev_err_probe(dev, PTR_ERR(reset_gpio), ret = dev_err_probe(dev, PTR_ERR(reset_gpio),
"Failed to get reset gpio: err = %ld\n", PTR_ERR(reset_gpio)); "Failed to get reset gpio\n");
goto err_disable_regulators;
} }
msleep(20); msleep(20);
gpiod_set_value(reset_gpio, 1); gpiod_set_value(reset_gpio, 1);
@ -269,6 +270,10 @@ static int wcd934x_slim_probe(struct slim_device *sdev)
dev_set_drvdata(dev, ddata); dev_set_drvdata(dev, ddata);
return 0; return 0;
err_disable_regulators:
regulator_bulk_disable(WCD934X_MAX_SUPPLY, ddata->supplies);
return ret;
} }
static void wcd934x_slim_remove(struct slim_device *sdev) static void wcd934x_slim_remove(struct slim_device *sdev)