The DMA doesn't support deep sleep before, here add relative interface in deep sleep framework. Signed-off-by: Kaiwei Liu <kaiwei.liu@xxxxxxxxxx> --- drivers/dma/sprd-dma.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/drivers/dma/sprd-dma.c b/drivers/dma/sprd-dma.c index 41d427df5098..b1dbbc5f4e70 100644 --- a/drivers/dma/sprd-dma.c +++ b/drivers/dma/sprd-dma.c @@ -1339,10 +1339,30 @@ static int __maybe_unused sprd_dma_runtime_resume(struct device *dev) return ret; } +static int sprd_dma_suspend_noirq(struct device *dev) +{ + if ((pm_runtime_status_suspended(dev)) || + (atomic_read(&(dev->power.usage_count)) > 1)) + return 0; + + return sprd_dma_runtime_suspend(dev); +} + +static int sprd_dma_resume_early(struct device *dev) +{ + if ((pm_runtime_status_suspended(dev)) || + (atomic_read(&(dev->power.usage_count)) > 1)) + return 0; + + return sprd_dma_runtime_resume(dev); +} + static const struct dev_pm_ops sprd_dma_pm_ops = { SET_RUNTIME_PM_OPS(sprd_dma_runtime_suspend, sprd_dma_runtime_resume, NULL) + SET_NOIRQ_SYSTEM_SLEEP_PM_OPS(sprd_dma_suspend_noirq, + sprd_dma_resume_early) }; static struct platform_driver sprd_dma_driver = { -- 2.17.1