Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: enable supply regulator only when use count is zero

Supply regulators are disabled only when the last
reference count is removed on the child regulator
(the use count goes from 1 to 0). This patch changes
the behaviour of enable so the supply regulator is
enabled only when the use count of the child
regulator goes from 0 to 1.

Signed-off-by: Bengt Jonsson <bengt.g.jonsson@stericsson.com>
Acked-by: Linus Walleij <linus.walleij@stericsson.com>
Acked-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
Signed-off-by: Liam Girdwood <lrg@slimlogic.co.uk>

authored by

Bengt Jonsson and committed by
Liam Girdwood
acaf6ffe 02fa3ec0

+11 -9
+11 -9
drivers/regulator/core.c
··· 1273 1273 { 1274 1274 int ret, delay; 1275 1275 1276 - /* do we need to enable the supply regulator first */ 1277 - if (rdev->supply) { 1278 - mutex_lock(&rdev->supply->mutex); 1279 - ret = _regulator_enable(rdev->supply); 1280 - mutex_unlock(&rdev->supply->mutex); 1281 - if (ret < 0) { 1282 - printk(KERN_ERR "%s: failed to enable %s: %d\n", 1283 - __func__, rdev_get_name(rdev), ret); 1284 - return ret; 1276 + if (rdev->use_count == 0) { 1277 + /* do we need to enable the supply regulator first */ 1278 + if (rdev->supply) { 1279 + mutex_lock(&rdev->supply->mutex); 1280 + ret = _regulator_enable(rdev->supply); 1281 + mutex_unlock(&rdev->supply->mutex); 1282 + if (ret < 0) { 1283 + printk(KERN_ERR "%s: failed to enable %s: %d\n", 1284 + __func__, rdev_get_name(rdev), ret); 1285 + return ret; 1286 + } 1285 1287 } 1286 1288 } 1287 1289