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