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
Reference in a new issue