On Thu, 20 May 2021 19:53:14 +0800 Tian Tao tiantao6@hisilicon.com wrote:
Found using coccicheck script under review at: https://lore.kernel.org/lkml/20210427141946.2478411-1-Julia.Lawall@inria.fr/
Signed-off-by: Tian Tao tiantao6@hisilicon.com
Seemed odd that this only called this in remove, so I took a closer look.
There is another call in probe. Do something similar for that one by adding an additional label in the error path.
The general approach in this driver is a bit of a mess because I think they will call clk_prepare_enable() twice in probe if pm_runtime is enabled. (once directly and once due to the pm_runtime_get_sync() call) It should probably be calling pm_runtime_get_noresume() in probe + a pm_runtime_set_active() call.
However that's a more complex patch set to attempt without hardware. You could try it though.
Jonathan
drivers/spi/spi-sprd.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/drivers/spi/spi-sprd.c b/drivers/spi/spi-sprd.c index 28e70db..65b8075 100644 --- a/drivers/spi/spi-sprd.c +++ b/drivers/spi/spi-sprd.c @@ -1008,9 +1008,8 @@ static int sprd_spi_remove(struct platform_device *pdev) struct sprd_spi *ss = spi_controller_get_devdata(sctlr); int ret;
- ret = pm_runtime_get_sync(ss->dev);
- ret = pm_runtime_resume_and_get(ss->dev); if (ret < 0) {
dev_err(ss->dev, "failed to resume SPI controller\n"); return ret; }pm_runtime_put_noidle(ss->dev);