|
@@ -1475,8 +1475,10 @@ static struct clk_core *__clk_set_parent_before(struct clk_core *clk,
|
|
|
*/
|
|
|
if (clk->prepare_count) {
|
|
|
clk_core_prepare(parent);
|
|
|
+ flags = clk_enable_lock();
|
|
|
clk_core_enable(parent);
|
|
|
clk_core_enable(clk);
|
|
|
+ clk_enable_unlock(flags);
|
|
|
}
|
|
|
|
|
|
/* update the clk tree topology */
|
|
@@ -1491,13 +1493,17 @@ static void __clk_set_parent_after(struct clk_core *core,
|
|
|
struct clk_core *parent,
|
|
|
struct clk_core *old_parent)
|
|
|
{
|
|
|
+ unsigned long flags;
|
|
|
+
|
|
|
/*
|
|
|
* Finish the migration of prepare state and undo the changes done
|
|
|
* for preventing a race with clk_enable().
|
|
|
*/
|
|
|
if (core->prepare_count) {
|
|
|
+ flags = clk_enable_lock();
|
|
|
clk_core_disable(core);
|
|
|
clk_core_disable(old_parent);
|
|
|
+ clk_enable_unlock(flags);
|
|
|
clk_core_unprepare(old_parent);
|
|
|
}
|
|
|
}
|
|
@@ -1525,8 +1531,10 @@ static int __clk_set_parent(struct clk_core *clk, struct clk_core *parent,
|
|
|
clk_enable_unlock(flags);
|
|
|
|
|
|
if (clk->prepare_count) {
|
|
|
+ flags = clk_enable_lock();
|
|
|
clk_core_disable(clk);
|
|
|
clk_core_disable(parent);
|
|
|
+ clk_enable_unlock(flags);
|
|
|
clk_core_unprepare(parent);
|
|
|
}
|
|
|
return ret;
|