summaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorAhmad Fatoum <a.fatoum@pengutronix.de>2020-07-22 10:09:56 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2020-12-16 09:25:17 +0100
commitfec44233632957debf8a6d182f9f22fe95a0fd22 (patch)
tree3d0f23b8c12fb7dee1651d678ab6746c936c5ea5 /drivers
parent399eef3f85593b82ec15af15524108acc6720b41 (diff)
downloadbarebox-fec44233632957debf8a6d182f9f22fe95a0fd22.tar.gz
barebox-fec44233632957debf8a6d182f9f22fe95a0fd22.tar.xz
regulator: stm32-pwr: release resources to properly support EPROBE_DEFER
Driver failed to release resources on failed probe so far, leading to deferred probe failing with -EBUSY. Fix this. Signed-off-by: Ahmad Fatoum <a.fatoum@pengutronix.de> Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/regulator/stm32-pwr.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/regulator/stm32-pwr.c b/drivers/regulator/stm32-pwr.c
index 54ba716a8f..7df8074ba7 100644
--- a/drivers/regulator/stm32-pwr.c
+++ b/drivers/regulator/stm32-pwr.c
@@ -183,18 +183,25 @@ static int stm32_pwr_regulator_probe(struct device_d *dev)
priv->rdev.dev = dev;
priv->supply = regulator_get(dev, desc->supply_name);
- if (IS_ERR(priv->supply))
- return PTR_ERR(priv->supply);
+ if (IS_ERR(priv->supply)) {
+ ret = PTR_ERR(priv->supply);
+ goto release_region;
+ }
ret = of_regulator_register(&priv->rdev, child);
if (ret) {
dev_err(dev, "%s: Failed to register regulator: %d\n",
desc->name, ret);
- return ret;
+ goto release_region;
}
}
return 0;
+
+release_region:
+ release_region(iores);
+
+ return ret;
}
static const struct of_device_id stm32_pwr_of_match[] = {