regulator: core: Prioritise consumer mappings over regulator name
Currently, when looking up a regulator supply, the regulator name takes priority over the consumer mappings. As there are a lot of regulator names that are in fairly common use (VDD, MICVDD, etc.) this can easily lead to obtaining the wrong supply, when a system contains two regulators that share a name. The explicit consumer mappings contain much less ambiguity as they specify both a name and a consumer device. As such prioritise those if one exists and only fall back to the regulator name if there are no matching explicit mappings. Signed-off-by: Charles Keepax <ckeepax@opensource.wolfsonmicro.com> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
parent
2ea659a9ef
commit
062171973e
|
@ -1462,7 +1462,7 @@ static struct regulator_dev *regulator_lookup_by_name(const char *name)
|
|||
static struct regulator_dev *regulator_dev_lookup(struct device *dev,
|
||||
const char *supply)
|
||||
{
|
||||
struct regulator_dev *r;
|
||||
struct regulator_dev *r = NULL;
|
||||
struct device_node *node;
|
||||
struct regulator_map *map;
|
||||
const char *devname = NULL;
|
||||
|
@ -1489,10 +1489,6 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
|
|||
if (dev)
|
||||
devname = dev_name(dev);
|
||||
|
||||
r = regulator_lookup_by_name(supply);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
mutex_lock(®ulator_list_mutex);
|
||||
list_for_each_entry(map, ®ulator_map_list, list) {
|
||||
/* If the mapping has a device set up it must match */
|
||||
|
@ -1508,6 +1504,10 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
|
|||
}
|
||||
mutex_unlock(®ulator_list_mutex);
|
||||
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
r = regulator_lookup_by_name(supply);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
|
|
Loading…
Reference in New Issue