diff options
author | Ulf Hansson <ulf.hansson@linaro.org> | 2014-04-23 15:52:04 -0400 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2014-05-07 02:20:27 -0400 |
commit | c906a3ec458742c95850c0c1cde9e8b68df25c01 (patch) | |
tree | 94a116287bf87c8dbd1bbfd94f91862ff5c70c1c /drivers/dma | |
parent | 123e4ca172707267eef5fbe9f0c58bd4c412685c (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.c | 13 |
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 | ||