diff --git a/drivers/clk/clk.c b/drivers/clk/clk.c index c79b3bcc18e3..22c2a3c673c5 100644 --- a/drivers/clk/clk.c +++ b/drivers/clk/clk.c @@ -1198,6 +1198,10 @@ static void clk_unprepare_unused_subtree(struct clk_core *core) hlist_for_each_entry(child, &core->children, child_node) clk_unprepare_unused_subtree(child); + if (dev_has_sync_state(core->dev) && + !(core->flags & CLK_DONT_HOLD_STATE)) + return; + if (core->prepare_count) return; @@ -1229,6 +1233,10 @@ static void clk_disable_unused_subtree(struct clk_core *core) hlist_for_each_entry(child, &core->children, child_node) clk_disable_unused_subtree(child); + if (dev_has_sync_state(core->dev) && + !(core->flags & CLK_DONT_HOLD_STATE)) + return; + if (core->flags & CLK_OPS_PARENT_ENABLE) clk_core_prepare_enable(core->parent);