| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 1 | #include <asm/clkdev.h> | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 2 |  | 
 | 3 | struct clkops { | 
 | 4 | 	void			(*enable)(struct clk *); | 
 | 5 | 	void			(*disable)(struct clk *); | 
 | 6 | 	unsigned long		(*getrate)(struct clk *); | 
 | 7 | }; | 
 | 8 |  | 
 | 9 | struct clk { | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 10 | 	const struct clkops	*ops; | 
 | 11 | 	unsigned long		rate; | 
 | 12 | 	unsigned int		cken; | 
 | 13 | 	unsigned int		delay; | 
 | 14 | 	unsigned int		enabled; | 
| Russell King | bdb08cb | 2008-06-30 19:47:59 +0100 | [diff] [blame] | 15 | 	struct clk		*other; | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 16 | }; | 
 | 17 |  | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 18 | #define INIT_CLKREG(_clk,_devname,_conname)		\ | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 19 | 	{						\ | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 20 | 		.clk		= _clk,			\ | 
 | 21 | 		.dev_id		= _devname,		\ | 
 | 22 | 		.con_id		= _conname,		\ | 
 | 23 | 	} | 
 | 24 |  | 
 | 25 | #define DEFINE_CKEN(_name, _cken, _rate, _delay)	\ | 
 | 26 | struct clk clk_##_name = {				\ | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 27 | 		.ops	= &clk_cken_ops,		\ | 
 | 28 | 		.rate	= _rate,			\ | 
 | 29 | 		.cken	= CKEN_##_cken,			\ | 
 | 30 | 		.delay	= _delay,			\ | 
 | 31 | 	} | 
 | 32 |  | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 33 | #define DEFINE_CK(_name, _cken, _ops)			\ | 
 | 34 | struct clk clk_##_name = {				\ | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 35 | 		.ops	= _ops,				\ | 
 | 36 | 		.cken	= CKEN_##_cken,			\ | 
 | 37 | 	} | 
 | 38 |  | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 39 | #define DEFINE_CLK(_name, _ops, _rate, _delay)		\ | 
 | 40 | struct clk clk_##_name = {				\ | 
 | 41 | 		.ops	= _ops, 			\ | 
 | 42 | 		.rate	= _rate,			\ | 
| Ian Molton | ed84778 | 2008-07-08 10:32:08 +0100 | [diff] [blame] | 43 | 		.delay	= _delay,			\ | 
 | 44 | 	} | 
 | 45 |  | 
| Russell King | a6dba20 | 2007-08-20 10:18:02 +0100 | [diff] [blame] | 46 | extern const struct clkops clk_cken_ops; | 
 | 47 |  | 
 | 48 | void clk_cken_enable(struct clk *clk); | 
 | 49 | void clk_cken_disable(struct clk *clk); | 
 | 50 |  | 
| eric miao | 7a2c5cb | 2008-02-19 11:13:31 +0800 | [diff] [blame] | 51 | #ifdef CONFIG_PXA3xx | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 52 | #define DEFINE_PXA3_CKEN(_name, _cken, _rate, _delay)	\ | 
 | 53 | struct clk clk_##_name = {				\ | 
| eric miao | 7a2c5cb | 2008-02-19 11:13:31 +0800 | [diff] [blame] | 54 | 		.ops	= &clk_pxa3xx_cken_ops,		\ | 
 | 55 | 		.rate	= _rate,			\ | 
 | 56 | 		.cken	= CKEN_##_cken,			\ | 
 | 57 | 		.delay	= _delay,			\ | 
 | 58 | 	} | 
 | 59 |  | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 60 | #define DEFINE_PXA3_CK(_name, _cken, _ops)		\ | 
 | 61 | struct clk clk_##_name = {				\ | 
| eric miao | 7a2c5cb | 2008-02-19 11:13:31 +0800 | [diff] [blame] | 62 | 		.ops	= _ops,				\ | 
 | 63 | 		.cken	= CKEN_##_cken,			\ | 
 | 64 | 	} | 
 | 65 |  | 
 | 66 | extern const struct clkops clk_pxa3xx_cken_ops; | 
 | 67 | extern void clk_pxa3xx_cken_enable(struct clk *); | 
 | 68 | extern void clk_pxa3xx_cken_disable(struct clk *); | 
 | 69 | #endif | 
 | 70 |  | 
| Russell King | 8c3abc7 | 2008-11-08 20:25:21 +0000 | [diff] [blame] | 71 | void clks_register(struct clk_lookup *clks, size_t num); | 
| Dmitry Eremin-Solenikov | c68ffdd | 2009-03-05 18:17:53 +0300 | [diff] [blame] | 72 | int clk_add_alias(const char *alias, const char *alias_name, char *id, | 
| Ian Molton | 5fedd0a | 2008-07-25 12:02:31 +0100 | [diff] [blame] | 73 | 	struct device *dev); | 
 | 74 |  |