diff options
author | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2015-01-05 12:48:42 +0100 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-08 20:15:45 +0000 |
commit | bfa21a0dfe6915dc85953b5d40ea9dae5fdf205f (patch) | |
tree | a65674f6cf409a546fc2a62c74e3ab25261a4f4d /drivers/regulator/of_regulator.c | |
parent | 1b3de223385d6bf2ab9bf2e9e80aebb26fedd426 (diff) | |
download | linux-bfa21a0dfe6915dc85953b5d40ea9dae5fdf205f.tar.bz2 |
regulator: Allow parsing custom properties when using simplified DT parsing
When drivers use simplified DT parsing method (they provide
'regulator_desc.of_match') they still may want to parse custom
properties for some of the regulators. For example some of the
regulators support GPIO enable control.
Add a driver-supplied callback for such case. This way the regulator
core parses common bindings offloading a lot of code from drivers and
still custom properties may be used.
The callback, called for each parsed regulator, may modify the
'regulator_config' initially passed to regulator_register().
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator/of_regulator.c')
-rw-r--r-- | drivers/regulator/of_regulator.c | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c index 91eaaf010524..24e812c48d93 100644 --- a/drivers/regulator/of_regulator.c +++ b/drivers/regulator/of_regulator.c @@ -270,6 +270,7 @@ EXPORT_SYMBOL_GPL(of_regulator_match); 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 *search, *child; @@ -307,6 +308,16 @@ struct regulator_init_data *regulator_of_get_init_data(struct device *dev, break; } + if (desc->of_parse_cb) { + if (desc->of_parse_cb(child, desc, config)) { + dev_err(dev, + "driver callback failed to parse DT for regulator %s\n", + child->name); + init_data = NULL; + break; + } + } + of_node_get(child); *node = child; break; |