Commit 925c85e2 authored by Charles Keepax's avatar Charles Keepax Committed by Mark Brown

regulator: Factor out location of init data OF node

To support future additions factor out the location of the OF node
containing the init data for the regulator from the code that parses the
init data.
Signed-off-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent db6e6244
...@@ -371,13 +371,10 @@ int of_regulator_match(struct device *dev, struct device_node *node, ...@@ -371,13 +371,10 @@ int of_regulator_match(struct device *dev, struct device_node *node,
} }
EXPORT_SYMBOL_GPL(of_regulator_match); EXPORT_SYMBOL_GPL(of_regulator_match);
struct regulator_init_data *regulator_of_get_init_data(struct device *dev, struct device_node *regulator_of_get_init_node(struct device *dev,
const struct regulator_desc *desc, const struct regulator_desc *desc)
struct regulator_config *config,
struct device_node **node)
{ {
struct device_node *search, *child; struct device_node *search, *child;
struct regulator_init_data *init_data = NULL;
const char *name; const char *name;
if (!dev->of_node || !desc->of_match) if (!dev->of_node || !desc->of_match)
...@@ -400,35 +397,48 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev, ...@@ -400,35 +397,48 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
if (!name) if (!name)
name = child->name; name = child->name;
if (strcmp(desc->of_match, name)) if (!strcmp(desc->of_match, name))
continue; return of_node_get(child);
}
of_node_put(search);
return NULL;
}
struct regulator_init_data *regulator_of_get_init_data(struct device *dev,
const struct regulator_desc *desc,
struct regulator_config *config,
struct device_node **node)
{
struct device_node *child;
struct regulator_init_data *init_data = NULL;
child = regulator_of_get_init_node(dev, desc);
if (!child)
return NULL;
init_data = of_get_regulator_init_data(dev, child, desc); init_data = of_get_regulator_init_data(dev, child, desc);
if (!init_data) { if (!init_data) {
dev_err(dev, dev_err(dev, "failed to parse DT for regulator %pOFn\n", child);
"failed to parse DT for regulator %pOFn\n", goto error;
child);
break;
} }
if (desc->of_parse_cb) { if (desc->of_parse_cb && desc->of_parse_cb(child, desc, config)) {
if (desc->of_parse_cb(child, desc, config)) {
dev_err(dev, dev_err(dev,
"driver callback failed to parse DT for regulator %pOFn\n", "driver callback failed to parse DT for regulator %pOFn\n",
child); child);
init_data = NULL; goto error;
break;
}
} }
of_node_get(child);
*node = child; *node = child;
break;
}
of_node_put(search);
return init_data; return init_data;
error:
of_node_put(child);
return NULL;
} }
static int of_node_match(struct device *dev, const void *data) static int of_node_match(struct device *dev, const void *data)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment