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