diff mbox series

spi: Gracefully handle power supplies with disabled PM

Message ID 20180917121041.21084-1-lkundrak@v3.sk (mailing list archive)
State New, archived
Headers show
Series spi: Gracefully handle power supplies with disabled PM | expand

Commit Message

Lubomir Rintel Sept. 17, 2018, 12:10 p.m. UTC
This allows use of SPI when power management is disables, such as on
early boot;

See also: commit 31eb74318054 ("PM / runtime: Fix handling of suppliers
with disabled runtime PM")

Cc: Mark Brown <broonie@kernel.org>
Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>
---
 drivers/spi/spi.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Mark Brown Sept. 17, 2018, 4:27 p.m. UTC | #1
On Mon, Sep 17, 2018 at 02:10:41PM +0200, Lubomir Rintel wrote:
> This allows use of SPI when power management is disables, such as on
> early boot;
> 
> See also: commit 31eb74318054 ("PM / runtime: Fix handling of suppliers
> with disabled runtime PM")

>  	if (!was_busy && ctlr->auto_runtime_pm) {
>  		ret = pm_runtime_get_sync(ctlr->dev.parent);
> -		if (ret < 0) {
> +		if (ret < 0 && ret != -EACCES) {

No, this is not at all clever.  If the device uses runtime PM and
doesn't get resumed then there is every likelyhood that the device won't
even be clocked.  If users want to disable power management it's going
to need rather more work than just setting a flag.
Pavel Machek Nov. 3, 2018, 7:12 p.m. UTC | #2
On Mon 2018-09-17 14:10:41, Lubomir Rintel wrote:
> This allows use of SPI when power management is disables, such as on
> early boot;

disabled
boot.

> See also: commit 31eb74318054 ("PM / runtime: Fix handling of suppliers
> with disabled runtime PM")
> 
> Cc: Mark Brown <broonie@kernel.org>
> Signed-off-by: Lubomir Rintel <lkundrak@v3.sk>

Plus.. I'm not sure.

I thought you'd cause imbalance between _put and _get, but that one is
probably ok.

On early boot, you probably need to proceed, but is ret == -EACCESS
the right test?
									Pavel

> index ec395a6baf9c..6546564e41d0 100644
> --- a/drivers/spi/spi.c
> +++ b/drivers/spi/spi.c
> @@ -1212,7 +1212,7 @@ static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
>  
>  	if (!was_busy && ctlr->auto_runtime_pm) {
>  		ret = pm_runtime_get_sync(ctlr->dev.parent);
> -		if (ret < 0) {
> +		if (ret < 0 && ret != -EACCES) {
>  			pm_runtime_put_noidle(ctlr->dev.parent);
>  			dev_err(&ctlr->dev, "Failed to power device: %d\n",
>  				ret);
diff mbox series

Patch

diff --git a/drivers/spi/spi.c b/drivers/spi/spi.c
index ec395a6baf9c..6546564e41d0 100644
--- a/drivers/spi/spi.c
+++ b/drivers/spi/spi.c
@@ -1212,7 +1212,7 @@  static void __spi_pump_messages(struct spi_controller *ctlr, bool in_kthread)
 
 	if (!was_busy && ctlr->auto_runtime_pm) {
 		ret = pm_runtime_get_sync(ctlr->dev.parent);
-		if (ret < 0) {
+		if (ret < 0 && ret != -EACCES) {
 			pm_runtime_put_noidle(ctlr->dev.parent);
 			dev_err(&ctlr->dev, "Failed to power device: %d\n",
 				ret);