forked from Minki/linux
regulator: core: Correct default return value for full constraints
Once we have full constraints then all supply mappings should be known to the regulator API. This means that we should treat failed lookups as fatal rather than deferring in the hope of further registrations but this was broken by commit9b92da1f12
"regulator: core: Fix default return value for _get()" which was targeted at DT systems but unintentionally broke non-DT systems by changing the default return value. Fix this by explicitly returning -EPROBE_DEFER from the DT lookup if we find a property but no corresponding regulator and by having the non-DT case default to -ENODEV when we have full constraints. Fixes:9b92da1f12
"regulator: core: Fix default return value for _get()" Signed-off-by: Mark Brown <broonie@linaro.org> Tested-by: Guenter Roeck <linux@roeck-us.net> Cc: stable@vger.kernel.org
This commit is contained in:
parent
07b1980848
commit
317b5684d5
@ -1272,6 +1272,8 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
|
||||
if (r->dev.parent &&
|
||||
node == r->dev.of_node)
|
||||
return r;
|
||||
*ret = -EPROBE_DEFER;
|
||||
return NULL;
|
||||
} else {
|
||||
/*
|
||||
* If we couldn't even get the node then it's
|
||||
@ -1312,7 +1314,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
|
||||
struct regulator_dev *rdev;
|
||||
struct regulator *regulator = ERR_PTR(-EPROBE_DEFER);
|
||||
const char *devname = NULL;
|
||||
int ret = -EPROBE_DEFER;
|
||||
int ret;
|
||||
|
||||
if (id == NULL) {
|
||||
pr_err("get() with no identifier\n");
|
||||
@ -1322,6 +1324,11 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
|
||||
if (dev)
|
||||
devname = dev_name(dev);
|
||||
|
||||
if (have_full_constraints())
|
||||
ret = -ENODEV;
|
||||
else
|
||||
ret = -EPROBE_DEFER;
|
||||
|
||||
mutex_lock(®ulator_list_mutex);
|
||||
|
||||
rdev = regulator_dev_lookup(dev, id, &ret);
|
||||
|
Loading…
Reference in New Issue
Block a user