]> asedeno.scripts.mit.edu Git - linux.git/blobdiff - drivers/clk/ti/clk.c
clk: ti: fix OF child-node lookup
[linux.git] / drivers / clk / ti / clk.c
index 7d22e1af224770d7084cd7d8ec29e24d3f87368f..27e0979b315860dbddf032d11e7826891ede1bd9 100644 (file)
@@ -129,7 +129,7 @@ int ti_clk_setup_ll_ops(struct ti_clk_ll_ops *ops)
 void __init ti_dt_clocks_register(struct ti_dt_clk oclks[])
 {
        struct ti_dt_clk *c;
-       struct device_node *node;
+       struct device_node *node, *parent;
        struct clk *clk;
        struct of_phandle_args clkspec;
        char buf[64];
@@ -164,8 +164,12 @@ void __init ti_dt_clocks_register(struct ti_dt_clk oclks[])
                        continue;
 
                node = of_find_node_by_name(NULL, buf);
-               if (num_args)
-                       node = of_find_node_by_name(node, "clk");
+               if (num_args) {
+                       parent = node;
+                       node = of_get_child_by_name(parent, "clk");
+                       of_node_put(parent);
+               }
+
                clkspec.np = node;
                clkspec.args_count = num_args;
                for (i = 0; i < num_args; i++) {
@@ -173,11 +177,12 @@ void __init ti_dt_clocks_register(struct ti_dt_clk oclks[])
                        if (ret) {
                                pr_warn("Bad tag in %s at %d: %s\n",
                                        c->node_name, i, tags[i]);
+                               of_node_put(node);
                                return;
                        }
                }
                clk = of_clk_get_from_provider(&clkspec);
-
+               of_node_put(node);
                if (!IS_ERR(clk)) {
                        c->lk.clk = clk;
                        clkdev_add(&c->lk);