提交 f97b98d6 编写于 作者: D Daniel Mack 提交者: Vinod Koul

dma: cppi41: add support for suspend and resume

This patch adds support for suspend/resume functionality to the cppi41
DMA driver. The steps necessary to make the system resume properly were
figured out by trial-and-error. The code as it stands now is the
minimum that has to be done to put the musb host system on an AM33xx
system into an operable state after resume.
Signed-off-by: NDaniel Mack <zonque@gmail.com>
Signed-off-by: NVinod Koul <vinod.koul@intel.com>
上级 c95905a6
...@@ -1045,12 +1045,41 @@ static int cppi41_dma_remove(struct platform_device *pdev) ...@@ -1045,12 +1045,41 @@ static int cppi41_dma_remove(struct platform_device *pdev)
return 0; return 0;
} }
#ifdef CONFIG_PM_SLEEP
static int cppi41_suspend(struct device *dev)
{
struct cppi41_dd *cdd = dev_get_drvdata(dev);
cppi_writel(0, cdd->usbss_mem + USBSS_IRQ_CLEARR);
disable_sched(cdd);
return 0;
}
static int cppi41_resume(struct device *dev)
{
struct cppi41_dd *cdd = dev_get_drvdata(dev);
int i;
for (i = 0; i < DESCS_AREAS; i++)
cppi_writel(cdd->descs_phys, cdd->qmgr_mem + QMGR_MEMBASE(i));
init_sched(cdd);
cppi_writel(USBSS_IRQ_PD_COMP, cdd->usbss_mem + USBSS_IRQ_ENABLER);
return 0;
}
#endif
static SIMPLE_DEV_PM_OPS(cppi41_pm_ops, cppi41_suspend, cppi41_resume);
static struct platform_driver cpp41_dma_driver = { static struct platform_driver cpp41_dma_driver = {
.probe = cppi41_dma_probe, .probe = cppi41_dma_probe,
.remove = cppi41_dma_remove, .remove = cppi41_dma_remove,
.driver = { .driver = {
.name = "cppi41-dma-engine", .name = "cppi41-dma-engine",
.owner = THIS_MODULE, .owner = THIS_MODULE,
.pm = &cppi41_pm_ops,
.of_match_table = of_match_ptr(cppi41_dma_ids), .of_match_table = of_match_ptr(cppi41_dma_ids),
}, },
}; };
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册