Thread (29 messages) 29 messages, 7 authors, 2010-08-03
STALE5826d

[PATCH v4] GPIO PL061: Adding Clk framework support

From: Kevin Wells <hidden>
Date: 2010-08-03 00:40:39

Cc: Viresh KUMAR; rabin at rab.in; Linus Walleij; baruch at tkos.co.il;
linux-arm-kernel at lists.infradead.org
Subject: Re: [PATCH v4] GPIO PL061: Adding Clk framework support

On Fri, Jul 30, 2010 at 01:22:58AM +0200, Kevin Wells wrote:
quoted
quoted
 /*
  * These are the device model conversion veneers; they convert the
  * device model structures to our more specific structures.
@@ -130,17 +155,33 @@ static int amba_probe(struct device *dev)
 {
 	struct amba_device *pcdev = to_amba_device(dev);
 	struct amba_driver *pcdrv = to_amba_driver(dev->driver);
-	struct amba_id *id;
+	struct amba_id *id = amba_lookup(pcdrv->id_table, pcdev);
+	int ret;

-	id = amba_lookup(pcdrv->id_table, pcdev);
+	do {
+		ret = amba_get_enable_pclk(pcdev);
+		if (ret)
+			break;
+
+		ret = pcdrv->probe(pcdev, id);
+		if (ret == 0)
+			break;

-	return pcdrv->probe(pcdev, id);
+		amba_put_disable_pclk(pcdev);
Should the AMBA clock be disabled if the probe() fails?
This is exactly what happens here.
I think I got my logic reversed..

One more item I noted. These changes want to keep the clock enabled
after the probe - only disabling the clock on amba_remove. Both the
AMBA peripheral driver (ie, the LCD or MMCI driver) and the amba_remove
function now disable the clocks.

Wouldn't drivers that use clk_disable in their xxx_suspend functions
have some problems with this as multiple clk_enables have been called?

ie,
AMBA enables clock in amba_probe() <<< clock use count = 1
pl022 driver enables clock in mmci_probe <<< clock use count = 2
...SPI stuff happens...
...Linux enters suspend mode...
pl022 driver enters suspend mode, disables clock <<< clock use count = 1

Because the AMBA driver enabled the clock, the clock driver would still
see a use count > 1 on suspend and keep the clock enabled. Should the
suspend and resume functions in bus.c also disable/enable clocks? Or
maybe the peripheral drivers should just handle clocking and the clock
enable in amba_probe should be removed?
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help