Merge branch 'x86-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git...
[pandora-kernel.git] / arch / arm / mach-pxa / clock.c
1 /*
2  *  linux/arch/arm/mach-sa1100/clock.c
3  */
4 #include <linux/module.h>
5 #include <linux/kernel.h>
6 #include <linux/clk.h>
7 #include <linux/spinlock.h>
8 #include <linux/delay.h>
9 #include <linux/clkdev.h>
10
11 #include "clock.h"
12
13 static DEFINE_SPINLOCK(clocks_lock);
14
15 int clk_enable(struct clk *clk)
16 {
17         unsigned long flags;
18
19         spin_lock_irqsave(&clocks_lock, flags);
20         if (clk->enabled++ == 0)
21                 clk->ops->enable(clk);
22         spin_unlock_irqrestore(&clocks_lock, flags);
23
24         if (clk->delay)
25                 udelay(clk->delay);
26
27         return 0;
28 }
29 EXPORT_SYMBOL(clk_enable);
30
31 void clk_disable(struct clk *clk)
32 {
33         unsigned long flags;
34
35         WARN_ON(clk->enabled == 0);
36
37         spin_lock_irqsave(&clocks_lock, flags);
38         if (--clk->enabled == 0)
39                 clk->ops->disable(clk);
40         spin_unlock_irqrestore(&clocks_lock, flags);
41 }
42 EXPORT_SYMBOL(clk_disable);
43
44 unsigned long clk_get_rate(struct clk *clk)
45 {
46         unsigned long rate;
47
48         rate = clk->rate;
49         if (clk->ops->getrate)
50                 rate = clk->ops->getrate(clk);
51
52         return rate;
53 }
54 EXPORT_SYMBOL(clk_get_rate);
55
56 void clk_dummy_enable(struct clk *clk)
57 {
58 }
59
60 void clk_dummy_disable(struct clk *clk)
61 {
62 }
63
64 const struct clkops clk_dummy_ops = {
65         .enable         = clk_dummy_enable,
66         .disable        = clk_dummy_disable,
67 };
68
69 struct clk clk_dummy = {
70         .ops            = &clk_dummy_ops,
71 };