blob: 5599bceff738341344ca0f1041371453423e41e2 [file] [log] [blame]
Russell King8c3abc72008-11-08 20:25:21 +00001#include <asm/clkdev.h>
Russell Kinga6dba202007-08-20 10:18:02 +01002
3struct clkops {
4 void (*enable)(struct clk *);
5 void (*disable)(struct clk *);
6 unsigned long (*getrate)(struct clk *);
7};
8
9struct clk {
Russell Kinga6dba202007-08-20 10:18:02 +010010 const struct clkops *ops;
11 unsigned long rate;
12 unsigned int cken;
13 unsigned int delay;
14 unsigned int enabled;
Russell Kingbdb08cb2008-06-30 19:47:59 +010015 struct clk *other;
Russell Kinga6dba202007-08-20 10:18:02 +010016};
17
Russell King8c3abc72008-11-08 20:25:21 +000018#define INIT_CLKREG(_clk,_devname,_conname) \
Russell Kinga6dba202007-08-20 10:18:02 +010019 { \
Russell King8c3abc72008-11-08 20:25:21 +000020 .clk = _clk, \
21 .dev_id = _devname, \
22 .con_id = _conname, \
23 }
24
25#define DEFINE_CKEN(_name, _cken, _rate, _delay) \
26struct clk clk_##_name = { \
Russell Kinga6dba202007-08-20 10:18:02 +010027 .ops = &clk_cken_ops, \
28 .rate = _rate, \
29 .cken = CKEN_##_cken, \
30 .delay = _delay, \
31 }
32
Russell King8c3abc72008-11-08 20:25:21 +000033#define DEFINE_CK(_name, _cken, _ops) \
34struct clk clk_##_name = { \
Russell Kinga6dba202007-08-20 10:18:02 +010035 .ops = _ops, \
36 .cken = CKEN_##_cken, \
37 }
38
Russell King8c3abc72008-11-08 20:25:21 +000039#define DEFINE_CLK(_name, _ops, _rate, _delay) \
40struct clk clk_##_name = { \
41 .ops = _ops, \
42 .rate = _rate, \
Ian Moltoned847782008-07-08 10:32:08 +010043 .delay = _delay, \
44 }
45
Russell Kinga6dba202007-08-20 10:18:02 +010046extern const struct clkops clk_cken_ops;
47
48void clk_cken_enable(struct clk *clk);
49void clk_cken_disable(struct clk *clk);
50
eric miao7a2c5cb2008-02-19 11:13:31 +080051#ifdef CONFIG_PXA3xx
Russell King8c3abc72008-11-08 20:25:21 +000052#define DEFINE_PXA3_CKEN(_name, _cken, _rate, _delay) \
53struct clk clk_##_name = { \
eric miao7a2c5cb2008-02-19 11:13:31 +080054 .ops = &clk_pxa3xx_cken_ops, \
55 .rate = _rate, \
56 .cken = CKEN_##_cken, \
57 .delay = _delay, \
58 }
59
Russell King8c3abc72008-11-08 20:25:21 +000060#define DEFINE_PXA3_CK(_name, _cken, _ops) \
61struct clk clk_##_name = { \
eric miao7a2c5cb2008-02-19 11:13:31 +080062 .ops = _ops, \
63 .cken = CKEN_##_cken, \
64 }
65
66extern const struct clkops clk_pxa3xx_cken_ops;
67extern void clk_pxa3xx_cken_enable(struct clk *);
68extern void clk_pxa3xx_cken_disable(struct clk *);
69#endif
70
Russell King8c3abc72008-11-08 20:25:21 +000071void clks_register(struct clk_lookup *clks, size_t num);
Dmitry Eremin-Solenikovc68ffdd2009-03-05 18:17:53 +030072int clk_add_alias(const char *alias, const char *alias_name, char *id,
Ian Molton5fedd0a2008-07-25 12:02:31 +010073 struct device *dev);
74