clk: add non CONFIG_HAVE_CLK routines
Many drivers are shared between architectures that may or may not have HAVE_CLK selected for them. To remove compilation errors for them we enclose clk_*() calls in these drivers within #ifdef CONFIG_HAVE_CLK, #endif. This patch removes the need of these CONFIG_HAVE_CLK statements, by introducing dummy routines when HAVE_CLK is not selected by platforms. So, definition of these routines will always be available. These calls will return error for platforms that don't select HAVE_CLK. Signed-off-by: Viresh Kumar <viresh.kumar@st.com> Cc: Wolfram Sang <w.sang@pengutronix.de> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jeff Garzik <jgarzik@redhat.com> Cc: Andrew Lunn <andrew@lunn.ch> Cc: Bhupesh Sharma <bhupesh.sharma@st.com> Cc: Giuseppe Cavallaro <peppe.cavallaro@st.com> Cc: Russell King <rmk@arm.linux.org.uk> Cc: Mike Turquette <mturquette@linaro.org> Cc: Sergei Shtylyov <sshtylyov@ru.mvista.com> Cc: viresh kumar <viresh.linux@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
					parent
					
						
							
								bf7c27e988
							
						
					
				
			
			
				commit
				
					
						93abe8e4b1
					
				
			
		
					 1 changed files with 109 additions and 59 deletions
				
			
		|  | @ -84,6 +84,43 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb); | ||||||
| 
 | 
 | ||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
|  | /**
 | ||||||
|  |  * clk_prepare - prepare a clock source | ||||||
|  |  * @clk: clock source | ||||||
|  |  * | ||||||
|  |  * This prepares the clock source for use. | ||||||
|  |  * | ||||||
|  |  * Must not be called from within atomic context. | ||||||
|  |  */ | ||||||
|  | #ifdef CONFIG_HAVE_CLK_PREPARE | ||||||
|  | int clk_prepare(struct clk *clk); | ||||||
|  | #else | ||||||
|  | static inline int clk_prepare(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	might_sleep(); | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /**
 | ||||||
|  |  * clk_unprepare - undo preparation of a clock source | ||||||
|  |  * @clk: clock source | ||||||
|  |  * | ||||||
|  |  * This undoes a previously prepared clock.  The caller must balance | ||||||
|  |  * the number of prepare and unprepare calls. | ||||||
|  |  * | ||||||
|  |  * Must not be called from within atomic context. | ||||||
|  |  */ | ||||||
|  | #ifdef CONFIG_HAVE_CLK_PREPARE | ||||||
|  | void clk_unprepare(struct clk *clk); | ||||||
|  | #else | ||||||
|  | static inline void clk_unprepare(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	might_sleep(); | ||||||
|  | } | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | #ifdef CONFIG_HAVE_CLK | ||||||
| /**
 | /**
 | ||||||
|  * clk_get - lookup and obtain a reference to a clock producer. |  * clk_get - lookup and obtain a reference to a clock producer. | ||||||
|  * @dev: device for clock "consumer" |  * @dev: device for clock "consumer" | ||||||
|  | @ -121,24 +158,6 @@ struct clk *clk_get(struct device *dev, const char *id); | ||||||
|  */ |  */ | ||||||
| struct clk *devm_clk_get(struct device *dev, const char *id); | struct clk *devm_clk_get(struct device *dev, const char *id); | ||||||
| 
 | 
 | ||||||
| /**
 |  | ||||||
|  * clk_prepare - prepare a clock source |  | ||||||
|  * @clk: clock source |  | ||||||
|  * |  | ||||||
|  * This prepares the clock source for use. |  | ||||||
|  * |  | ||||||
|  * Must not be called from within atomic context. |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_HAVE_CLK_PREPARE |  | ||||||
| int clk_prepare(struct clk *clk); |  | ||||||
| #else |  | ||||||
| static inline int clk_prepare(struct clk *clk) |  | ||||||
| { |  | ||||||
| 	might_sleep(); |  | ||||||
| 	return 0; |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /**
 | /**
 | ||||||
|  * clk_enable - inform the system when the clock source should be running. |  * clk_enable - inform the system when the clock source should be running. | ||||||
|  * @clk: clock source |  * @clk: clock source | ||||||
|  | @ -167,47 +186,6 @@ int clk_enable(struct clk *clk); | ||||||
|  */ |  */ | ||||||
| void clk_disable(struct clk *clk); | void clk_disable(struct clk *clk); | ||||||
| 
 | 
 | ||||||
| 
 |  | ||||||
| /**
 |  | ||||||
|  * clk_unprepare - undo preparation of a clock source |  | ||||||
|  * @clk: clock source |  | ||||||
|  * |  | ||||||
|  * This undoes a previously prepared clock.  The caller must balance |  | ||||||
|  * the number of prepare and unprepare calls. |  | ||||||
|  * |  | ||||||
|  * Must not be called from within atomic context. |  | ||||||
|  */ |  | ||||||
| #ifdef CONFIG_HAVE_CLK_PREPARE |  | ||||||
| void clk_unprepare(struct clk *clk); |  | ||||||
| #else |  | ||||||
| static inline void clk_unprepare(struct clk *clk) |  | ||||||
| { |  | ||||||
| 	might_sleep(); |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| /* clk_prepare_enable helps cases using clk_enable in non-atomic context. */ |  | ||||||
| static inline int clk_prepare_enable(struct clk *clk) |  | ||||||
| { |  | ||||||
| 	int ret; |  | ||||||
| 
 |  | ||||||
| 	ret = clk_prepare(clk); |  | ||||||
| 	if (ret) |  | ||||||
| 		return ret; |  | ||||||
| 	ret = clk_enable(clk); |  | ||||||
| 	if (ret) |  | ||||||
| 		clk_unprepare(clk); |  | ||||||
| 
 |  | ||||||
| 	return ret; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */ |  | ||||||
| static inline void clk_disable_unprepare(struct clk *clk) |  | ||||||
| { |  | ||||||
| 	clk_disable(clk); |  | ||||||
| 	clk_unprepare(clk); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| /**
 | /**
 | ||||||
|  * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. |  * clk_get_rate - obtain the current clock rate (in Hz) for a clock source. | ||||||
|  *		  This is only valid once the clock source has been enabled. |  *		  This is only valid once the clock source has been enabled. | ||||||
|  | @ -298,6 +276,78 @@ struct clk *clk_get_parent(struct clk *clk); | ||||||
|  */ |  */ | ||||||
| struct clk *clk_get_sys(const char *dev_id, const char *con_id); | struct clk *clk_get_sys(const char *dev_id, const char *con_id); | ||||||
| 
 | 
 | ||||||
|  | #else /* !CONFIG_HAVE_CLK */ | ||||||
|  | 
 | ||||||
|  | static inline struct clk *clk_get(struct device *dev, const char *id) | ||||||
|  | { | ||||||
|  | 	return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline struct clk *devm_clk_get(struct device *dev, const char *id) | ||||||
|  | { | ||||||
|  | 	return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline void clk_put(struct clk *clk) {} | ||||||
|  | 
 | ||||||
|  | static inline void devm_clk_put(struct device *dev, struct clk *clk) {} | ||||||
|  | 
 | ||||||
|  | static inline int clk_enable(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline void clk_disable(struct clk *clk) {} | ||||||
|  | 
 | ||||||
|  | static inline unsigned long clk_get_rate(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int clk_set_rate(struct clk *clk, unsigned long rate) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline long clk_round_rate(struct clk *clk, unsigned long rate) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline int clk_set_parent(struct clk *clk, struct clk *parent) | ||||||
|  | { | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | static inline struct clk *clk_get_parent(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	return NULL; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | #endif | ||||||
|  | 
 | ||||||
|  | /* clk_prepare_enable helps cases using clk_enable in non-atomic context. */ | ||||||
|  | static inline int clk_prepare_enable(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	int ret; | ||||||
|  | 
 | ||||||
|  | 	ret = clk_prepare(clk); | ||||||
|  | 	if (ret) | ||||||
|  | 		return ret; | ||||||
|  | 	ret = clk_enable(clk); | ||||||
|  | 	if (ret) | ||||||
|  | 		clk_unprepare(clk); | ||||||
|  | 
 | ||||||
|  | 	return ret; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* clk_disable_unprepare helps cases using clk_disable in non-atomic context. */ | ||||||
|  | static inline void clk_disable_unprepare(struct clk *clk) | ||||||
|  | { | ||||||
|  | 	clk_disable(clk); | ||||||
|  | 	clk_unprepare(clk); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /**
 | /**
 | ||||||
|  * clk_add_alias - add a new clock alias |  * clk_add_alias - add a new clock alias | ||||||
|  * @alias: name for clock alias |  * @alias: name for clock alias | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Viresh Kumar
				Viresh Kumar