spi: qup: Handle clocks in pm_runtime suspend and resume
authorPramod Gurav <pramod.gurav@linaro.org>
Mon, 2 May 2016 12:14:03 +0000 (17:44 +0530)
committerMark Brown <broonie@kernel.org>
Mon, 2 May 2016 14:27:28 +0000 (15:27 +0100)
Clocks must ne disabled in pm_runtime to achieve some power saving.
Enable the clocks when the device is runtime resumed during a transfer.

Signed-off-by: Pramod Gurav <pramod.gurav@linaro.org>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-qup.c

index 810a7fa..e42ff61 100644 (file)
@@ -937,6 +937,10 @@ static int spi_qup_pm_suspend_runtime(struct device *device)
        config = readl(controller->base + QUP_CONFIG);
        config |= QUP_CONFIG_CLOCK_AUTO_GATE;
        writel_relaxed(config, controller->base + QUP_CONFIG);
+
+       clk_disable_unprepare(controller->cclk);
+       clk_disable_unprepare(controller->iclk);
+
        return 0;
 }
 
@@ -945,6 +949,15 @@ static int spi_qup_pm_resume_runtime(struct device *device)
        struct spi_master *master = dev_get_drvdata(device);
        struct spi_qup *controller = spi_master_get_devdata(master);
        u32 config;
+       int ret;
+
+       ret = clk_prepare_enable(controller->iclk);
+       if (ret)
+               return ret;
+
+       ret = clk_prepare_enable(controller->cclk);
+       if (ret)
+               return ret;
 
        /* Disable clocks auto gaiting */
        config = readl_relaxed(controller->base + QUP_CONFIG);