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 |
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.
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 --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);
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(-)