/* single page (at least 4096 bytes) must suffice for both ringbuffes */
        err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
-                                 snd_dma_pci_data(chip->pci),
+                                 chip->card->dev,
                                  PAGE_SIZE, &chip->rb);
        if (err < 0) {
                dev_err(chip->card->dev, "cannot allocate CORB/RIRB\n");
 
 #ifdef CONFIG_PM_RUNTIME
        if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
-               if (chip->pci->dev.power.runtime_status != RPM_ACTIVE)
+               if (chip->card->dev->power.runtime_status != RPM_ACTIVE)
                        return IRQ_NONE;
 #endif
 
        if (size > MAX_PREALLOC_SIZE)
                size = MAX_PREALLOC_SIZE;
        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
-                                             snd_dma_pci_data(chip->pci),
+                                             chip->card->dev,
                                              size, MAX_PREALLOC_SIZE);
        /* link to codec */
        pcm->dev = &codec->dev;
        spin_unlock_irq(&chip->reg_lock);
 
        err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG,
-                                 snd_dma_pci_data(chip->pci),
+                                 chip->card->dev,
                                  byte_size, bufp);
        if (err < 0)
                goto err_alloc;
                return;
 
        if (power_up)
-               pm_runtime_get_sync(&chip->pci->dev);
+               pm_runtime_get_sync(chip->card->dev);
        else
-               pm_runtime_put_sync(&chip->pci->dev);
+               pm_runtime_put_sync(chip->card->dev);
 }
 
 static DEFINE_MUTEX(card_list_lock);
                dev_info(chip->card->dev, "%s via VGA-switcheroo\n",
                         disabled ? "Disabling" : "Enabling");
                if (disabled) {
-                       pm_runtime_put_sync_suspend(&pci->dev);
-                       azx_suspend(&pci->dev);
+                       pm_runtime_put_sync_suspend(card->dev);
+                       azx_suspend(card->dev);
                        /* when we get suspended by vga switcheroo we end up in D3cold,
                         * however we have no ACPI handle, so pci/acpi can't put us there,
                         * put ourselves there */
                                         "Cannot lock devices!\n");
                } else {
                        snd_hda_unlock_devices(chip->bus);
-                       pm_runtime_get_noresume(&pci->dev);
+                       pm_runtime_get_noresume(card->dev);
                        chip->disabled = false;
-                       azx_resume(&pci->dev);
+                       azx_resume(card->dev);
                }
        }
 }
        chip->vga_switcheroo_registered = 1;
 
        /* register as an optimus hdmi audio power domain */
-       vga_switcheroo_init_domain_pm_optimus_hdmi_audio(&chip->pci->dev, &chip->hdmi_pm_domain);
+       vga_switcheroo_init_domain_pm_optimus_hdmi_audio(chip->card->dev,
+                                                        &chip->hdmi_pm_domain);
        return 0;
 }
 #else
                dsp_lock_init(&chip->azx_dev[i]);
                /* allocate memory for the BDL for each stream */
                err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
-                                         snd_dma_pci_data(chip->pci),
+                                         chip->card->dev,
                                          BDL_SIZE, &chip->azx_dev[i].bdl);
                if (err < 0) {
                        dev_err(card->dev, "cannot allocate BDL\n");
        }
        /* allocate memory for the position buffer */
        err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
-                                 snd_dma_pci_data(chip->pci),
+                                 chip->card->dev,
                                  chip->num_streams * 8, &chip->posbuf);
        if (err < 0) {
                dev_err(card->dev, "cannot allocate posbuf\n");