Thread (126 messages) 126 messages, 18 authors, 2011-04-20

Re: [RFC,PATCH 1/3] Add a common struct clk

From: Ryan Mallon <hidden>
Date: 2011-02-15 01:42:36
Also in: linux-arm-kernel, lkml

On 02/15/2011 02:36 PM, Jeremy Kerr wrote:
Hi Ryan,
quoted
quoted
+int clk_enable(struct clk *clk)
+{
+	unsigned long flags;
+	int ret = 0;
+
+	spin_lock_irqsave(&clk->enable_lock, flags);
	WARN_ON(clk->prepare_count = 0); ?
Added later, but yes.
Okay, but still failing to understand why this isn't it the first patch.
You are introducing a new file after all.
quoted
quoted
+	if (clk->enable_count = 0 && clk->ops->enable)
+		ret = clk->ops->enable(clk);
Does it make sense to have a clock with no enable function which still
returns success from clk_enable? Do we have any platforms which have
NULL clk_enable functions?
It does, yes. Driver code should be always be calling clk_enable before using 
a clock, regardless of the implementation (which it shouldn't have to care 
abut), and should abort their initialisation if the clk_enable() fails.

Some clocks are always running, so the enable op will be empty. This is not an 
error, so the driver is free to continue.
quoted
I think that for enable/disable at least we should require platforms to
provide functions and oops if they have failed to do so. In the rare
case that a platform doesn't need to do anything for enable/disable they
can just supply empty functions.
Sounds like useless boilerplate - it's not an error to not need 
enable/disable, so I don't see why we need to add extra effort to handle this 
case.
I have been convinced that enable/prepare potentially being NULL
callbacks is valid :-).
quoted
quoted
+/**
+ * __clk_get - acquire a reference to a clock
+ *
+ * @clk: The clock to refcount
+ *
+ * Before a clock is returned from clk_get, this function should be
called + * to update any clock-specific refcounting.
This is a bit misleading. It's not "should be called", it "is called". I
think you should just remove the documentation for __clk_get/__clk_put
or move it into clk.c since the functions are only used internally by
the common clock code.
It'd be nice to remove this from the header, but this means we'll need extern 
prototypes in clkdev.c. Might be a reasonable compromise though.
That's probably a better approach anyway, since that makes it blatantly
obvious that the __clk_get and __clk_put functions should not be called
from anywhere except clkdev.c.
quoted
quoted
+/**
+ * clk_prepare - prepare clock for atomic enabling.
+ *
+ * @clk: The clock to prepare
+ *
+ * Do any blocking initialisation on @clk, allowing the clock to be
later + * enabled atomically (via clk_enable). This function may sleep.
"Possibly blocking" as below?
Yep, will unify these (and spell "possibly" correctly :) )
:-)

~Ryan

-- 
Bluewater Systems Ltd - ARM Technology Solution Centre

Ryan Mallon         		5 Amuri Park, 404 Barbadoes St
ryan@bluewatersys.com         	PO Box 13 889, Christchurch 8013
http://www.bluewatersys.com	New Zealand
Phone: +64 3 3779127		Freecall: Australia 1800 148 751
Fax:   +64 3 3779135			  USA 1800 261 2934
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help