dma: ste_dma40: Fixup system suspend/resume
authorUlf Hansson <ulf.hansson@linaro.org>
Wed, 23 Apr 2014 19:52:04 +0000 (21:52 +0200)
committerVinod Koul <vinod.koul@intel.com>
Wed, 7 May 2014 06:20:27 +0000 (11:50 +0530)
Make sure to handle register context save/restore when needed from
system PM callbacks.

Previously we solely trusted the device to reside in in-active state
while the system suspend callback were invoked, which is just too
optimistic.

Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org>
Acked-by: Linus Walleij <linus.walleij@linaro.org>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
drivers/dma/ste_dma40.c

index 0b29af3..b539fc9 100644 (file)
@@ -2945,7 +2945,11 @@ static int dma40_suspend(struct device *dev)
 {
        struct platform_device *pdev = to_platform_device(dev);
        struct d40_base *base = platform_get_drvdata(pdev);
-       int ret = 0;
+       int ret;
+
+       ret = pm_runtime_force_suspend(dev);
+       if (ret)
+               return ret;
 
        if (base->lcpa_regulator)
                ret = regulator_disable(base->lcpa_regulator);
@@ -2958,10 +2962,13 @@ static int dma40_resume(struct device *dev)
        struct d40_base *base = platform_get_drvdata(pdev);
        int ret = 0;
 
-       if (base->lcpa_regulator)
+       if (base->lcpa_regulator) {
                ret = regulator_enable(base->lcpa_regulator);
+               if (ret)
+                       return ret;
+       }
 
-       return ret;
+       return pm_runtime_force_resume(dev);
 }
 #endif