summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@opensource.wolfsonmicro.com>2012-05-07 12:34:52 +0200
committerMark Brown <broonie@opensource.wolfsonmicro.com>2012-05-07 14:14:44 +0200
commit968c2c1707a3396ccd6e7e6c5ddaf658a6d3bd66 (patch)
tree5c593bc221011a1b3cdc90ecbb034c656bcf06d7
parentregulator: Fix the logic to ensure new voltage setting in valid range (diff)
downloadlinux-968c2c1707a3396ccd6e7e6c5ddaf658a6d3bd66.tar.xz
linux-968c2c1707a3396ccd6e7e6c5ddaf658a6d3bd66.zip
regulator: Actually free the regulator in devm_regulator_put()
It turns out that (quite surprisingly) devres_destroy() only undoes the devres mapping, it doesn't destroy the underlying resource, meaning that anything using devm_regulator_put() would leak. While we wait for the new devres_release() which does what we want to get merged open code it in devm_regulator_put(). Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com> Acked-by: Liam Girdwood <lrg@ti.com>
-rw-r--r--drivers/regulator/core.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index e70dd382a009..046fb1bd8619 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -1431,7 +1431,10 @@ void devm_regulator_put(struct regulator *regulator)
rc = devres_destroy(regulator->dev, devm_regulator_release,
devm_regulator_match, regulator);
- WARN_ON(rc);
+ if (rc == 0)
+ regulator_put(regulator);
+ else
+ WARN_ON(rc);
}
EXPORT_SYMBOL_GPL(devm_regulator_put);