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: Mark Brown <broonie@opensource.wolfsonmicro.com>
This commit is contained in:
parent
01e86f4988
commit
6d191a5fc7
|
@ -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,
|
||||||
/* 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, ®ulator_list, list)
|
list_for_each_entry(r, ®ulator_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,
|
||||||
|
|
||||||
mutex_lock(®ulator_list_mutex);
|
mutex_lock(®ulator_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,
|
||||||
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);
|
||||||
|
|
Loading…
Reference in New Issue