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