aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/dma
diff options
context:
space:
mode:
authorUlf Hansson <ulf.hansson@linaro.org>2014-04-23 15:52:04 -0400
committerVinod Koul <vinod.koul@intel.com>2014-05-07 02:20:27 -0400
commitc906a3ec458742c95850c0c1cde9e8b68df25c01 (patch)
tree94a116287bf87c8dbd1bbfd94f91862ff5c70c1c /drivers/dma
parent123e4ca172707267eef5fbe9f0c58bd4c412685c (diff)
dma: ste_dma40: Fixup system suspend/resume
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>
Diffstat (limited to 'drivers/dma')
-rw-r--r--drivers/dma/ste_dma40.c13
1 files changed, 10 insertions, 3 deletions
diff --git a/drivers/dma/ste_dma40.c b/drivers/dma/ste_dma40.c
index 0b29af321873..b539fc9b469a 100644
--- a/drivers/dma/ste_dma40.c
+++ b/drivers/dma/ste_dma40.c
@@ -2945,7 +2945,11 @@ static int dma40_suspend(struct device *dev)
2945{ 2945{
2946 struct platform_device *pdev = to_platform_device(dev); 2946 struct platform_device *pdev = to_platform_device(dev);
2947 struct d40_base *base = platform_get_drvdata(pdev); 2947 struct d40_base *base = platform_get_drvdata(pdev);
2948 int ret = 0; 2948 int ret;
2949
2950 ret = pm_runtime_force_suspend(dev);
2951 if (ret)
2952 return ret;
2949 2953
2950 if (base->lcpa_regulator) 2954 if (base->lcpa_regulator)
2951 ret = regulator_disable(base->lcpa_regulator); 2955 ret = regulator_disable(base->lcpa_regulator);
@@ -2958,10 +2962,13 @@ static int dma40_resume(struct device *dev)
2958 struct d40_base *base = platform_get_drvdata(pdev); 2962 struct d40_base *base = platform_get_drvdata(pdev);
2959 int ret = 0; 2963 int ret = 0;
2960 2964
2961 if (base->lcpa_regulator) 2965 if (base->lcpa_regulator) {
2962 ret = regulator_enable(base->lcpa_regulator); 2966 ret = regulator_enable(base->lcpa_regulator);
2967 if (ret)
2968 return ret;
2969 }
2963 2970
2964 return ret; 2971 return pm_runtime_force_resume(dev);
2965} 2972}
2966#endif 2973#endif
2967 2974