linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH] clk: provide prepare/unprepare functions
@ 2011-09-22 10:10 Russell King - ARM Linux
  2011-09-22 17:39 ` Saravana Kannan
  0 siblings, 1 reply; 3+ messages in thread
From: Russell King - ARM Linux @ 2011-09-22 10:10 UTC (permalink / raw)
  To: linux-arm-kernel

As discussed previously, there's the need on some platforms to run some
parts of clk_enable() in contexts which can schedule.  The solution
which was agreed upon was to provide clk_prepare() and clk_unprepare()
to contain this parts, while clk_enable() and clk_disable() perform
the atomic part.

This patch provides a common definition for clk_prepare() and
clk_unprepare() in linux/clk.h, and provides an upgrade path for
existing implementation and drivers: drivers can start using
clk_prepare() and clk_unprepare() once this patch is merged without
having to wait for platform support.  Platforms can then start to
provide these additional functions.

Eventually, HAVE_CLK_PREPARE will be removed from the kernel, and
everyone will have to provide these new APIs.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
---
 include/linux/clk.h |   38 ++++++++++++++++++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/include/linux/clk.h b/include/linux/clk.h
index 1d37f42..c7eb17d 100644
--- a/include/linux/clk.h
+++ b/include/linux/clk.h
@@ -11,6 +11,8 @@
 #ifndef __LINUX_CLK_H
 #define __LINUX_CLK_H
 
+#include <linux/kernel.h>
+
 struct device;
 
 /*
@@ -41,11 +43,29 @@ struct clk;
 struct clk *clk_get(struct device *dev, const char *id);
 
 /**
+ * clk_prepare - prepare a clock source
+ * @clk: clock source
+ *
+ * This prepares the clock source for use.
+ */
+#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
  *
  * If the clock can not be enabled/disabled, this should return success.
  *
+ * May be called from atomic contexts.
+ *
  * Returns success (0) or negative errno.
  */
 int clk_enable(struct clk *clk);
@@ -57,6 +77,8 @@ int clk_enable(struct clk *clk);
  * Inform the system that a clock source is no longer required by
  * a driver and may be shut down.
  *
+ * May be called from atomic contexts.
+ *
  * Implementation detail: if the clock source is shared between
  * multiple drivers, clk_enable() calls must be balanced by the
  * same number of clk_disable() calls for the clock source to be
@@ -64,6 +86,21 @@ int clk_enable(struct clk *clk);
  */
 void clk_disable(struct clk *clk);
 
+/**
+ * clk_unprepare - undo preparation of a clock source
+ * @clk: clock source
+ *
+ * This prepares the clock source for use.
+ */
+#ifdef CONFIG_HAVE_CLK_PREPARE
+void clk_unprepare(struct clk *clk);
+#else
+static inline void clk_unprepare(struct clk *clk)
+{
+	might_sleep();
+}
+#endif
+
 /**
  * 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.

^ permalink raw reply related	[flat|nested] 3+ messages in thread

* [PATCH] clk: provide prepare/unprepare functions
  2011-09-22 10:10 [PATCH] clk: provide prepare/unprepare functions Russell King - ARM Linux
@ 2011-09-22 17:39 ` Saravana Kannan
  2011-09-27  8:26   ` Russell King - ARM Linux
  0 siblings, 1 reply; 3+ messages in thread
From: Saravana Kannan @ 2011-09-22 17:39 UTC (permalink / raw)
  To: linux-arm-kernel

On 09/22/2011 03:10 AM, Russell King - ARM Linux wrote:
> As discussed previously, there's the need on some platforms to run some
> parts of clk_enable() in contexts which can schedule.  The solution
> which was agreed upon was to provide clk_prepare() and clk_unprepare()
> to contain this parts, while clk_enable() and clk_disable() perform
> the atomic part.
>
> This patch provides a common definition for clk_prepare() and
> clk_unprepare() in linux/clk.h, and provides an upgrade path for
> existing implementation and drivers: drivers can start using
> clk_prepare() and clk_unprepare() once this patch is merged without
> having to wait for platform support.  Platforms can then start to
> provide these additional functions.
>
> Eventually, HAVE_CLK_PREPARE will be removed from the kernel, and
> everyone will have to provide these new APIs.

Glad to see this. Now the drivers and individual arch's can start moving 
to these new APIs before we settle on the common infrastructure. Once 
the common infrastructure is in, it should hopefully be trivial to move 
each arch to it.

> Signed-off-by: Russell King<rmk+kernel@arm.linux.org.uk>
> ---
>   include/linux/clk.h |   38 ++++++++++++++++++++++++++++++++++++++
>   1 file changed, 38 insertions(+)
>
> diff --git a/include/linux/clk.h b/include/linux/clk.h
> index 1d37f42..c7eb17d 100644
> --- a/include/linux/clk.h
> +++ b/include/linux/clk.h
> @@ -11,6 +11,8 @@
>   #ifndef __LINUX_CLK_H
>   #define __LINUX_CLK_H
>
> +#include<linux/kernel.h>
> +
>   struct device;
>
>   /*
> @@ -41,11 +43,29 @@ struct clk;
>   struct clk *clk_get(struct device *dev, const char *id);
>
>   /**
> + * clk_prepare - prepare a clock source
> + * @clk: clock source
> + *
> + * This prepares the clock source for use.

Do you want to add a "May NOT be called from atomic context"? Yeah, the 
stub makes it obvious, but I think it would be consistent to add the 
comment in. No strong opinion though.

Not sure if you care, but LGTM/Ack.

Thanks,
Saravana
-- 
Sent by an employee of the Qualcomm Innovation Center, Inc.
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [PATCH] clk: provide prepare/unprepare functions
  2011-09-22 17:39 ` Saravana Kannan
@ 2011-09-27  8:26   ` Russell King - ARM Linux
  0 siblings, 0 replies; 3+ messages in thread
From: Russell King - ARM Linux @ 2011-09-27  8:26 UTC (permalink / raw)
  To: linux-arm-kernel

On Thu, Sep 22, 2011 at 10:39:14AM -0700, Saravana Kannan wrote:
>>   /**
>> + * clk_prepare - prepare a clock source
>> + * @clk: clock source
>> + *
>> + * This prepares the clock source for use.
>
> Do you want to add a "May NOT be called from atomic context"? Yeah, the  
> stub makes it obvious, but I think it would be consistent to add the  
> comment in. No strong opinion though.

The might_sleep() is sufficient to enforce that, but adding the comment
for when the helper goes away would be a good idea.

> Not sure if you care, but LGTM/Ack.

Thanks.

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2011-09-27  8:26 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2011-09-22 10:10 [PATCH] clk: provide prepare/unprepare functions Russell King - ARM Linux
2011-09-22 17:39 ` Saravana Kannan
2011-09-27  8:26   ` Russell King - ARM Linux

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).