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 <bigunclemax@gmail.com>
Reviewed-by: Miquel Raynal <miquel.raynal@bootlin.com>
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);