|
@@ -144,13 +144,16 @@ int clk_set_parent(struct clk *clk, struct clk *parent)
|
|
|
return ret;
|
|
|
|
|
|
spin_lock_irqsave(&clockfw_lock, flags);
|
|
|
- if (arch_clock->clk_set_parent)
|
|
|
- ret = arch_clock->clk_set_parent(clk, parent);
|
|
|
- if (ret == 0) {
|
|
|
- if (clk->recalc)
|
|
|
- clk->rate = clk->recalc(clk);
|
|
|
- propagate_rate(clk);
|
|
|
- }
|
|
|
+ if (clk->usecount == 0) {
|
|
|
+ if (arch_clock->clk_set_parent)
|
|
|
+ ret = arch_clock->clk_set_parent(clk, parent);
|
|
|
+ if (ret == 0) {
|
|
|
+ if (clk->recalc)
|
|
|
+ clk->rate = clk->recalc(clk);
|
|
|
+ propagate_rate(clk);
|
|
|
+ }
|
|
|
+ } else
|
|
|
+ ret = -EBUSY;
|
|
|
spin_unlock_irqrestore(&clockfw_lock, flags);
|
|
|
|
|
|
return ret;
|