diff options
author | Kristen Carlson Accardi <kristen@linux.intel.com> | 2011-03-31 11:02:43 -0700 |
---|---|---|
committer | Vinod Koul <vinod.koul@intel.com> | 2011-04-01 16:49:05 +0530 |
commit | e2142df7ec7184ed4a77ada686bc1eb41075490f (patch) | |
tree | d6f2f0cb5a3c68bc82a10716c968307a9315b9d4 /drivers/dma | |
parent | 427cdf19b97e509e21e5d347e18d8b0b34723dfc (diff) | |
download | kernel_samsung_smdk4412-e2142df7ec7184ed4a77ada686bc1eb41075490f.zip kernel_samsung_smdk4412-e2142df7ec7184ed4a77ada686bc1eb41075490f.tar.gz kernel_samsung_smdk4412-e2142df7ec7184ed4a77ada686bc1eb41075490f.tar.bz2 |
intel_mid_dma: fix runtime pm issues
Use the correct api in probe to enable runtime pm for this driver.
Additionally, do not just call legacy suspend for runtime_suspend,
as this duplicates some work the pci core does for you.
Signed-off-by: Kristen Carlson Accardi <kristen@linux.intel.com>
Signed-off-by: Vinod Koul <vinod.koul@intel.com>
Diffstat (limited to 'drivers/dma')
-rw-r--r-- | drivers/dma/intel_mid_dma.c | 17 |
1 files changed, 13 insertions, 4 deletions
diff --git a/drivers/dma/intel_mid_dma.c b/drivers/dma/intel_mid_dma.c index 798f46a..f153adf 100644 --- a/drivers/dma/intel_mid_dma.c +++ b/drivers/dma/intel_mid_dma.c @@ -1292,8 +1292,7 @@ static int __devinit intel_mid_dma_probe(struct pci_dev *pdev, if (err) goto err_dma; - pm_runtime_set_active(&pdev->dev); - pm_runtime_enable(&pdev->dev); + pm_runtime_put_noidle(&pdev->dev); pm_runtime_allow(&pdev->dev); return 0; @@ -1322,6 +1321,9 @@ err_enable_device: static void __devexit intel_mid_dma_remove(struct pci_dev *pdev) { struct middma_device *device = pci_get_drvdata(pdev); + + pm_runtime_get_noresume(&pdev->dev); + pm_runtime_forbid(&pdev->dev); middma_shutdown(pdev); pci_dev_put(pdev); kfree(device); @@ -1385,13 +1387,20 @@ int dma_resume(struct pci_dev *pci) static int dma_runtime_suspend(struct device *dev) { struct pci_dev *pci_dev = to_pci_dev(dev); - return dma_suspend(pci_dev, PMSG_SUSPEND); + struct middma_device *device = pci_get_drvdata(pci_dev); + + device->state = SUSPENDED; + return 0; } static int dma_runtime_resume(struct device *dev) { struct pci_dev *pci_dev = to_pci_dev(dev); - return dma_resume(pci_dev); + struct middma_device *device = pci_get_drvdata(pci_dev); + + device->state = RUNNING; + iowrite32(REG_BIT0, device->dma_base + DMA_CFG); + return 0; } static int dma_runtime_idle(struct device *dev) |