diff options
Diffstat (limited to 'arch/sh/kernel/cpu/clock.c')
-rw-r--r-- | arch/sh/kernel/cpu/clock.c | 29 |
1 files changed, 29 insertions, 0 deletions
diff --git a/arch/sh/kernel/cpu/clock.c b/arch/sh/kernel/cpu/clock.c index 7b17137536d6..332a1798547c 100644 --- a/arch/sh/kernel/cpu/clock.c +++ b/arch/sh/kernel/cpu/clock.c | |||
@@ -239,6 +239,35 @@ void clk_recalc_rate(struct clk *clk) | |||
239 | } | 239 | } |
240 | EXPORT_SYMBOL_GPL(clk_recalc_rate); | 240 | EXPORT_SYMBOL_GPL(clk_recalc_rate); |
241 | 241 | ||
242 | int clk_set_parent(struct clk *clk, struct clk *parent) | ||
243 | { | ||
244 | int ret = -EINVAL; | ||
245 | struct clk *old; | ||
246 | |||
247 | if (!parent || !clk) | ||
248 | return ret; | ||
249 | |||
250 | old = clk->parent; | ||
251 | if (likely(clk->ops && clk->ops->set_parent)) { | ||
252 | unsigned long flags; | ||
253 | spin_lock_irqsave(&clock_lock, flags); | ||
254 | ret = clk->ops->set_parent(clk, parent); | ||
255 | spin_unlock_irqrestore(&clock_lock, flags); | ||
256 | clk->parent = (ret ? old : parent); | ||
257 | } | ||
258 | |||
259 | if (unlikely(clk->flags & CLK_RATE_PROPAGATES)) | ||
260 | propagate_rate(clk); | ||
261 | return ret; | ||
262 | } | ||
263 | EXPORT_SYMBOL_GPL(clk_set_parent); | ||
264 | |||
265 | struct clk *clk_get_parent(struct clk *clk) | ||
266 | { | ||
267 | return clk->parent; | ||
268 | } | ||
269 | EXPORT_SYMBOL_GPL(clk_get_parent); | ||
270 | |||
242 | long clk_round_rate(struct clk *clk, unsigned long rate) | 271 | long clk_round_rate(struct clk *clk, unsigned long rate) |
243 | { | 272 | { |
244 | if (likely(clk->ops && clk->ops->round_rate)) { | 273 | if (likely(clk->ops && clk->ops->round_rate)) { |