提交 6d191a5f 编写于 作者: M Mark Brown

regulator: core: Don't defer probe if there's no DT binding for a supply

When using device tree if there's no binding for a supply then there's no
way that one could appear later so just fail permanently right away. This
avoids wasting time trying to reprobe when that can never work.
Signed-off-by: NMark Brown <broonie@opensource.wolfsonmicro.com>
上级 01e86f49
...@@ -1169,7 +1169,8 @@ static int _regulator_get_enable_time(struct regulator_dev *rdev) ...@@ -1169,7 +1169,8 @@ static int _regulator_get_enable_time(struct regulator_dev *rdev)
} }
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,
int *ret)
{ {
struct regulator_dev *r; struct regulator_dev *r;
struct device_node *node; struct device_node *node;
...@@ -1177,11 +1178,20 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev, ...@@ -1177,11 +1178,20 @@ static struct regulator_dev *regulator_dev_lookup(struct device *dev,
/* first do a dt based lookup */ /* first do a dt based lookup */
if (dev && dev->of_node) { if (dev && dev->of_node) {
node = of_get_regulator(dev, supply); node = of_get_regulator(dev, supply);
if (node) if (node) {
list_for_each_entry(r, &regulator_list, list) list_for_each_entry(r, &regulator_list, list)
if (r->dev.parent && if (r->dev.parent &&
node == r->dev.of_node) node == r->dev.of_node)
return r; return r;
} else {
/*
* If we couldn't even get the node then it's
* not just that the device didn't register
* yet, there's no node and we'll never
* succeed.
*/
*ret = -ENODEV;
}
} }
/* if not found, try doing it non-dt way */ /* if not found, try doing it non-dt way */
...@@ -1212,7 +1222,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id, ...@@ -1212,7 +1222,7 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
mutex_lock(&regulator_list_mutex); mutex_lock(&regulator_list_mutex);
rdev = regulator_dev_lookup(dev, id); rdev = regulator_dev_lookup(dev, id, &ret);
if (rdev) if (rdev)
goto found; goto found;
...@@ -2926,7 +2936,7 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc, ...@@ -2926,7 +2936,7 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
if (supply) { if (supply) {
struct regulator_dev *r; struct regulator_dev *r;
r = regulator_dev_lookup(dev, supply); r = regulator_dev_lookup(dev, supply, &ret);
if (!r) { if (!r) {
dev_err(dev, "Failed to find supply %s\n", supply); dev_err(dev, "Failed to find supply %s\n", supply);
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册