提交 06217197 编写于 作者: C Charles Keepax 提交者: Mark Brown

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: NCharles Keepax <ckeepax@opensource.wolfsonmicro.com>
Signed-off-by: NMark Brown <broonie@kernel.org>
上级 2ea659a9
...@@ -1462,7 +1462,7 @@ static struct regulator_dev *regulator_lookup_by_name(const char *name) ...@@ -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, static struct regulator_dev *regulator_dev_lookup(struct device *dev,
const char *supply) const char *supply)
{ {
struct regulator_dev *r; struct regulator_dev *r = NULL;
struct device_node *node; struct device_node *node;
struct regulator_map *map; struct regulator_map *map;
const char *devname = NULL; const char *devname = NULL;
...@@ -1489,10 +1489,6 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev, ...@@ -1489,10 +1489,6 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
if (dev) if (dev)
devname = dev_name(dev); devname = dev_name(dev);
r = regulator_lookup_by_name(supply);
if (r)
return r;
mutex_lock(&regulator_list_mutex); mutex_lock(&regulator_list_mutex);
list_for_each_entry(map, &regulator_map_list, list) { list_for_each_entry(map, &regulator_map_list, list) {
/* If the mapping has a device set up it must match */ /* 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, ...@@ -1508,6 +1504,10 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
} }
mutex_unlock(&regulator_list_mutex); mutex_unlock(&regulator_list_mutex);
if (r)
return r;
r = regulator_lookup_by_name(supply);
if (r) if (r)
return r; return r;
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册