From: Maksim Kiselev <biguncle...@gmail.com> The current implementation of clk_set_parent() unconditionally enables the new parent clock, even if the target clock was not previously enabled.
To avoid this implicit behavior, this patch adds a check for whether the target clock has been enabled before parent enabling.. Fixes: ac30d90f336 ("clk: Ensure the parent clocks are enabled while reparenting") Signed-off-by: Maksim Kiselev <biguncle...@gmail.com> --- drivers/clk/clk-uclass.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/clk/clk-uclass.c b/drivers/clk/clk-uclass.c index 4f35b90382f..0f6bf3e02ed 100644 --- a/drivers/clk/clk-uclass.c +++ b/drivers/clk/clk-uclass.c @@ -631,10 +631,12 @@ int clk_set_parent(struct clk *clk, struct clk *parent) if (!ops->set_parent) return -ENOSYS; - ret = clk_enable(parent); - if (ret && ret != -ENOSYS) { - printf("Cannot enable parent %s\n", parent->dev->name); - return ret; + if (clk->enable_count) { + ret = clk_enable(parent); + if (ret && ret != -ENOSYS) { + printf("Cannot enable parent %s\n", parent->dev->name); + return ret; + } } ret = ops->set_parent(clk, parent); -- 2.48.1