blob: 83cbfaba485de9a96badbc4107e228979f8e4497 [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
Russell Kinga6dba202007-08-20 10:18:02 +010050extern const struct clkops clk_cken_ops;
51
52void clk_cken_enable(struct clk *clk);
53void clk_cken_disable(struct clk *clk);
54
55void clks_register(struct clk *clks, size_t num);