]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
spi: dw: Move runtime PM enable/disable from common to platform driver part
authorJarkko Nikula <jarkko.nikula@linux.intel.com>
Fri, 18 Oct 2019 13:21:29 +0000 (16:21 +0300)
committerMark Brown <broonie@kernel.org>
Tue, 22 Oct 2019 16:56:21 +0000 (17:56 +0100)
After commit 1e6959832510 ("spi: dw: Add basic runtime PM support")
there is following warning from PCI enumerated DesignWare SPI controller
during probe:

dw_spi_pci 0000:00:13.0: Unbalanced pm_runtime_enable!

Runtime PM is already enabled for PCI devices by the PCI core and doing
it again in common DW SPI code leads to unbalanced enable calls.

Fix this by moving the runtime PM enable/disable calls to the platform
driver part of the driver.

Cc: Phil Edworthy <phil.edworthy@renesas.com>
Signed-off-by: Jarkko Nikula <jarkko.nikula@linux.intel.com>
Reviewed-by: Andy Shevchenko <andy.shevchenko@gmail.com>
Link: https://lore.kernel.org/r/20191018132131.31608-1-jarkko.nikula@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-dw-mmio.c

index bd46fca3f0944aa81d1958f6f0015d9262d3b3a5..db896475b8d110b7f014dcd6df27e25860d747db 100644 (file)
@@ -9,6 +9,7 @@
 #include <linux/err.h>
 #include <linux/interrupt.h>
 #include <linux/platform_device.h>
+#include <linux/pm_runtime.h>
 #include <linux/slab.h>
 #include <linux/spi/spi.h>
 #include <linux/scatterlist.h>
@@ -193,6 +194,8 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)
                        goto out;
        }
 
+       pm_runtime_enable(&pdev->dev);
+
        ret = dw_spi_add_host(&pdev->dev, dws);
        if (ret)
                goto out;
@@ -201,6 +204,7 @@ static int dw_spi_mmio_probe(struct platform_device *pdev)
        return 0;
 
 out:
+       pm_runtime_disable(&pdev->dev);
        clk_disable_unprepare(dwsmmio->pclk);
 out_clk:
        clk_disable_unprepare(dwsmmio->clk);
@@ -212,6 +216,7 @@ static int dw_spi_mmio_remove(struct platform_device *pdev)
        struct dw_spi_mmio *dwsmmio = platform_get_drvdata(pdev);
 
        dw_spi_remove_host(&dwsmmio->dws);
+       pm_runtime_disable(&pdev->dev);
        clk_disable_unprepare(dwsmmio->pclk);
        clk_disable_unprepare(dwsmmio->clk);