blob: 1ec8f9178aaf48e41cde86c1c534d76f51283422 [file] [log] [blame]
Russell Kinga6dba202007-08-20 10:18:02 +01001struct clk;
2
3struct clkops {
4 void (*enable)(struct clk *);
5 void (*disable)(struct clk *);
6 unsigned long (*getrate)(struct clk *);
7};
8
9struct clk {
10 struct list_head node;
11 const char *name;
12 struct device *dev;
13 const struct clkops *ops;
14 unsigned long rate;
15 unsigned int cken;
16 unsigned int delay;
17 unsigned int enabled;
Russell Kingbdb08cb2008-06-30 19:47:59 +010018 struct clk *other;
Russell Kinga6dba202007-08-20 10:18:02 +010019};
20
21#define INIT_CKEN(_name, _cken, _rate, _delay, _dev) \
22 { \
23 .name = _name, \
24 .dev = _dev, \
25 .ops = &clk_cken_ops, \
26 .rate = _rate, \
27 .cken = CKEN_##_cken, \
28 .delay = _delay, \
29 }
30
31#define INIT_CK(_name, _cken, _ops, _dev) \
32 { \
33 .name = _name, \
34 .dev = _dev, \
35 .ops = _ops, \
36 .cken = CKEN_##_cken, \
37 }
38
Russell Kingbdb08cb2008-06-30 19:47:59 +010039/*
40 * This is a placeholder to alias one clock device+name pair
41 * to another struct clk.
42 */
43#define INIT_CKOTHER(_name, _other, _dev) \
44 { \
45 .name = _name, \
46 .dev = _dev, \
47 .other = _other, \
48 }
49
Ian Moltoned847782008-07-08 10:32:08 +010050#define INIT_CLK(_name, _ops, _rate, _delay, _dev) \
51 { \
52 .name = _name, \
53 .dev = _dev, \
54 .ops = _ops, \
55 .rate = _rate, \
56 .delay = _delay, \
57 }
58
Russell Kinga6dba202007-08-20 10:18:02 +010059extern const struct clkops clk_cken_ops;
60
61void clk_cken_enable(struct clk *clk);
62void clk_cken_disable(struct clk *clk);
63
eric miao7a2c5cb2008-02-19 11:13:31 +080064#ifdef CONFIG_PXA3xx
65#define PXA3xx_CKEN(_name, _cken, _rate, _delay, _dev) \
66 { \
67 .name = _name, \
68 .dev = _dev, \
69 .ops = &clk_pxa3xx_cken_ops, \
70 .rate = _rate, \
71 .cken = CKEN_##_cken, \
72 .delay = _delay, \
73 }
74
75#define PXA3xx_CK(_name, _cken, _ops, _dev) \
76 { \
77 .name = _name, \
78 .dev = _dev, \
79 .ops = _ops, \
80 .cken = CKEN_##_cken, \
81 }
82
83extern const struct clkops clk_pxa3xx_cken_ops;
84extern void clk_pxa3xx_cken_enable(struct clk *);
85extern void clk_pxa3xx_cken_disable(struct clk *);
86#endif
87
Russell Kinga6dba202007-08-20 10:18:02 +010088void clks_register(struct clk *clks, size_t num);