diff options
| author | Viresh Kumar <viresh.kumar@st.com> | 2012-07-30 14:39:27 -0700 | 
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-07-30 17:25:11 -0700 | 
| commit | 93abe8e4b13ae9a0428ce940a8a03ac72a7626f1 (patch) | |
| tree | 00ee23e5533c0bda7a76c2dc63e0bfcfcde7fa7f | |
| parent | bf7c27e9887af48952743753916f9cfbe900d0e9 (diff) | |
| download | olio-linux-3.10-93abe8e4b13ae9a0428ce940a8a03ac72a7626f1.tar.xz olio-linux-3.10-93abe8e4b13ae9a0428ce940a8a03ac72a7626f1.zip  | |
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>
| -rw-r--r-- | include/linux/clk.h | 168 | 
1 files changed, 109 insertions, 59 deletions
diff --git a/include/linux/clk.h b/include/linux/clk.h index 2fd6a423453..b3ac22d0fc1 100644 --- a/include/linux/clk.h +++ b/include/linux/clk.h @@ -85,6 +85,43 @@ int clk_notifier_unregister(struct clk *clk, struct notifier_block *nb);  #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.   * @dev: device for clock "consumer"   * @id: clock consumer ID @@ -122,24 +159,6 @@ struct clk *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: clock source   * @@ -167,47 +186,6 @@ int clk_enable(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.   *		  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); +#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   * @alias: name for clock alias  |