Messages in this thread Patch in this message | | | From | zoro <> | Subject | [PATCH] regulator/of_get_regulator: add child path to find the regulator supplier | Date | Thu, 8 Nov 2018 13:40:35 +0800 |
| |
example code : &vir_regulator { ldo0_vir: ldo0-virtual { regulator-compatible = "VIR_LDO0"; regulator-name= "VIR_LDO0"; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <2000000>; }; ldo1_vir: ldo1-virtual { regulator-compatible = "VIR_LDO1"; regulator-name= "VIR_LDO1"; regulator-min-microvolt = <1000000>; regulator-max-microvolt = <3000000>; ldo1-supply = <&ldo0_vir>; }; ... };
when the VIR_LDO1 regulator supplier is it's brother, we can't find the supplier. so we add the child ptah to find the suppier.
Signed-off-by: zoro <long17.cool@163.com> --- drivers/regulator/core.c | 6 ++++++ 1 file changed, 6 insertions(+)
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c index 2c66b52..5dbfdba 100644 --- a/drivers/regulator/core.c +++ b/drivers/regulator/core.c @@ -239,6 +239,7 @@ static void regulator_unlock_supply(struct regulator_dev *rdev) static struct device_node *of_get_regulator(struct device *dev, const char *supply) { struct device_node *regnode = NULL; + struct device_node *child = NULL; char prop_name[32]; /* 32 is max size of property name */ dev_dbg(dev, "Looking up %s-supply from device tree\n", supply); @@ -247,6 +248,11 @@ static struct device_node *of_get_regulator(struct device *dev, const char *supp regnode = of_parse_phandle(dev->of_node, prop_name, 0); if (!regnode) { + for_each_child_of_node(dev->of_node, child) { + regnode = of_parse_phandle(child, prop_name, 0); + if (regnode) + return regnode; + } dev_dbg(dev, "Looking up %s property in node %pOF failed\n", prop_name, dev->of_node); return NULL; -- 1.7.9.5
| |