Merge branch 'next' of git://git.kernel.org/pub/scm/linux/kernel/git/djbw/async_tx
[sfrench/cifs-2.6.git] / drivers / dma / intel_mid_dma.c
index 3d4ec38b9b62879ea9175b9ddf59b5f7ea07f3a2..f653517ef7445c484580ef140b64315781c05d13 100644 (file)
@@ -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)