2 * linux/arch/arm/mach-sa1100/clock.c
4 #include <linux/module.h>
5 #include <linux/kernel.h>
7 #include <linux/spinlock.h>
8 #include <linux/delay.h>
10 #include <asm/clkdev.h>
14 static DEFINE_SPINLOCK(clocks_lock);
16 int clk_enable(struct clk *clk)
20 spin_lock_irqsave(&clocks_lock, flags);
21 if (clk->enabled++ == 0)
22 clk->ops->enable(clk);
23 spin_unlock_irqrestore(&clocks_lock, flags);
30 EXPORT_SYMBOL(clk_enable);
32 void clk_disable(struct clk *clk)
36 WARN_ON(clk->enabled == 0);
38 spin_lock_irqsave(&clocks_lock, flags);
39 if (--clk->enabled == 0)
40 clk->ops->disable(clk);
41 spin_unlock_irqrestore(&clocks_lock, flags);
43 EXPORT_SYMBOL(clk_disable);
45 unsigned long clk_get_rate(struct clk *clk)
50 if (clk->ops->getrate)
51 rate = clk->ops->getrate(clk);
55 EXPORT_SYMBOL(clk_get_rate);
57 void clk_dummy_enable(struct clk *clk)
61 void clk_dummy_disable(struct clk *clk)
65 const struct clkops clk_dummy_ops = {
66 .enable = clk_dummy_enable,
67 .disable = clk_dummy_disable,
70 struct clk clk_dummy = {
71 .ops = &clk_dummy_ops,