*/
 static int azx_free(struct azx *chip)
 {
+       struct pci_dev *pci = chip->pci;
        int i;
 
+       if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
+                       && chip->running)
+               pm_runtime_get_noresume(&pci->dev);
+
        azx_del_card_list(chip);
 
        azx_notifier_unregister(chip);
                        goto out_free;
        }
 
-       if (pci_dev_run_wake(pci))
-               pm_runtime_put_noidle(&pci->dev);
-
        dev++;
        complete_all(&chip->probe_wait);
        return 0;
 
 static int azx_probe_continue(struct azx *chip)
 {
+       struct pci_dev *pci = chip->pci;
        int dev = chip->dev_index;
        int err;
 
        power_down_all_codecs(chip);
        azx_notifier_register(chip);
        azx_add_card_list(chip);
+       if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
+               pm_runtime_put_noidle(&pci->dev);
 
        return 0;
 
 {
        struct snd_card *card = pci_get_drvdata(pci);
 
-       if (pci_dev_run_wake(pci))
-               pm_runtime_get_noresume(&pci->dev);
-
        if (card)
                snd_card_free(card);
        pci_set_drvdata(pci, NULL);