So others can find out what depends on regulators, as specified
in bindings/regulator/regulator.txt.

Signed-off-by: Tomeu Vizoso <tomeu.vizoso at collabora.com>
---

Changes in v2: None

 drivers/regulator/core.c | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index c9f7201..535cad0 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -4112,6 +4112,31 @@ static const struct file_operations 
regulator_summary_fops = {
 #endif
 };

+static void regulator_get_dependencies(struct fwnode_handle *fwnode,
+                                      struct list_head *deps)
+{
+       struct device_node *np;
+       struct property *pp;
+       struct device_node *dep;
+
+       np = to_of_node(fwnode);
+       if (!np)
+               return;
+
+       for_each_property_of_node(np, pp) {
+               if (!strends(pp->name, "-supply"))
+                       continue;
+
+               dep = of_parse_phandle(np, pp->name, 0);
+               if (!dep)
+                       continue;
+
+               fwnode_add_dependency(&dep->fwnode, deps);
+
+               of_node_put(dep);
+       }
+}
+
 static int __init regulator_init(void)
 {
        int ret;
@@ -4130,6 +4155,8 @@ static int __init regulator_init(void)

        regulator_dummy_init();

+       fwnode_add_dependency_parser(regulator_get_dependencies);
+
        return ret;
 }

-- 
2.4.1

Reply via email to