Skip to content

Commit

Permalink
sh: clkfwk: Provide a generic clk_set_rate_ex() path for root clocks.
Browse files Browse the repository at this point in the history
In the case of root clocks (such as clkin oscillators, extal, etc.), the
rate information is entirely platform dependent and needs to be lazily
set and propagated from the platform code. This provides a method for
establishing the rate update on these types of clocks that define no
set_rate() op of their own.

Signed-off-by: Paul Mundt <lethal@linux-sh.org>
  • Loading branch information
Paul Mundt committed May 13, 2009
1 parent d672fef commit 100890c
Showing 1 changed file with 16 additions and 9 deletions.
25 changes: 16 additions & 9 deletions arch/sh/kernel/cpu/clock.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,20 +265,27 @@ EXPORT_SYMBOL_GPL(clk_set_rate);
int clk_set_rate_ex(struct clk *clk, unsigned long rate, int algo_id)
{
int ret = -EOPNOTSUPP;
unsigned long flags;

if (likely(clk->ops && clk->ops->set_rate)) {
unsigned long flags;
spin_lock_irqsave(&clock_lock, flags);

spin_lock_irqsave(&clock_lock, flags);
if (likely(clk->ops && clk->ops->set_rate)) {
ret = clk->ops->set_rate(clk, rate, algo_id);
if (ret == 0) {
if (clk->ops->recalc)
clk->rate = clk->ops->recalc(clk);
propagate_rate(clk);
}
spin_unlock_irqrestore(&clock_lock, flags);
if (ret != 0)
goto out_unlock;
} else {
clk->rate = rate;
ret = 0;
}

if (clk->ops && clk->ops->recalc)
clk->rate = clk->ops->recalc(clk);

propagate_rate(clk);

out_unlock:
spin_unlock_irqrestore(&clock_lock, flags);

return ret;
}
EXPORT_SYMBOL_GPL(clk_set_rate_ex);
Expand Down

0 comments on commit 100890c

Please sign in to comment.