of_clk_get_by_name() is used by clk_bulk_get_optional() => clk_get() function, so in case some clocks are missing we should return -ENOENT error code, as this is normal for optional clocks. The current implementation of of_clk_get_by_name() returns the -EINVAL error that comes from of_clk_get() with index <0 if the clock is not described in the device tree. Signed-off-by: Alexander Shiyan <eagle.alexander923@xxxxxxxxx> --- drivers/clk/clkdev.c | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/drivers/clk/clkdev.c b/drivers/clk/clkdev.c index dbe998b6af..f6c2fcdf10 100644 --- a/drivers/clk/clkdev.c +++ b/drivers/clk/clkdev.c @@ -52,10 +52,9 @@ EXPORT_SYMBOL(of_clk_get); */ struct clk *of_clk_get_by_name(struct device_node *np, const char *name) { - struct clk *clk = ERR_PTR(-ENOENT); - /* Walk up the tree of devices looking for a clock that matches */ while (np) { + struct clk *clk; int index = 0; /* @@ -68,11 +67,12 @@ struct clk *of_clk_get_by_name(struct device_node *np, const char *name) name); clk = of_clk_get(np, index); if (!IS_ERR(clk)) - break; - else if (name && index >= 0) { + return clk; + + if (name && index >= 0) { pr_err("ERROR: could not get clock %pOF:%s(%i)\n", np, name ? name : "", index); - return clk; + return ERR_PTR(-ENOENT); } /* @@ -85,7 +85,7 @@ struct clk *of_clk_get_by_name(struct device_node *np, const char *name) break; } - return clk; + return ERR_PTR(-ENOENT); } EXPORT_SYMBOL(of_clk_get_by_name); #endif -- 2.39.1