Loading sound/soc/sof/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ if SND_SOC_SOF_TOPLEVEL config SND_SOC_SOF_PCI tristate "SOF PCI enumeration support" depends on PCI depends on PCI || COMPILE_TEST select SND_SOC_SOF select SND_SOC_ACPI if ACPI select SND_SOC_SOF_OPTIONS Loading sound/soc/sof/intel/hda.c +11 −2 Original line number Diff line number Diff line Loading @@ -506,7 +506,9 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) * TODO: support interrupt mode selection with kernel parameter * support msi multiple vectors */ #if IS_ENABLED(CONFIG_PCI) ret = pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_MSI); #endif if (ret < 0) { dev_info(sdev->dev, "use legacy interrupt mode\n"); /* Loading @@ -518,7 +520,9 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) sdev->msi_enabled = 0; } else { dev_info(sdev->dev, "use msi interrupt mode\n"); #if IS_ENABLED(CONFIG_PCI) hdev->irq = pci_irq_vector(pci, 0); #endif /* ipc irq number is the same of hda irq */ sdev->ipc_irq = hdev->irq; sdev->msi_enabled = 1; Loading Loading @@ -622,8 +626,10 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) free_hda_irq: free_irq(hdev->irq, bus); free_irq_vector: #if IS_ENABLED(CONFIG_PCI) if (sdev->msi_enabled) pci_free_irq_vectors(pci); #endif free_streams: hda_dsp_stream_free(sdev); /* dsp_unmap: not currently used */ Loading @@ -638,7 +644,6 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) { struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; struct hdac_bus *bus = sof_to_bus(sdev); struct pci_dev *pci = to_pci_dev(sdev->dev); const struct sof_intel_dsp_desc *chip = hda->desc; #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) Loading Loading @@ -667,8 +672,12 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) free_irq(sdev->ipc_irq, sdev); free_irq(hda->irq, bus); if (sdev->msi_enabled) #if IS_ENABLED(CONFIG_PCI) if (sdev->msi_enabled) { struct pci_dev *pci = to_pci_dev(sdev->dev); pci_free_irq_vectors(pci); } #endif hda_dsp_stream_free(sdev); #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) Loading sound/soc/sof/sof-pci-dev.c +4 −0 Original line number Diff line number Diff line Loading @@ -251,9 +251,11 @@ static int sof_pci_probe(struct pci_dev *pci, if (!sof_pdata) return -ENOMEM; #if IS_ENABLED(CONFIG_PCI) ret = pcim_enable_device(pci); if (ret < 0) return ret; #endif ret = pci_request_regions(pci, "Audio DSP"); if (ret < 0) Loading Loading @@ -386,6 +388,7 @@ static const struct pci_device_id sof_pci_ids[] = { }; MODULE_DEVICE_TABLE(pci, sof_pci_ids); #if IS_ENABLED(CONFIG_PCI) /* pci_driver definition */ static struct pci_driver snd_sof_pci_driver = { .name = "sof-audio-pci", Loading @@ -397,5 +400,6 @@ static struct pci_driver snd_sof_pci_driver = { }, }; module_pci_driver(snd_sof_pci_driver); #endif MODULE_LICENSE("Dual BSD/GPL"); Loading
sound/soc/sof/Kconfig +1 −1 Original line number Diff line number Diff line Loading @@ -10,7 +10,7 @@ if SND_SOC_SOF_TOPLEVEL config SND_SOC_SOF_PCI tristate "SOF PCI enumeration support" depends on PCI depends on PCI || COMPILE_TEST select SND_SOC_SOF select SND_SOC_ACPI if ACPI select SND_SOC_SOF_OPTIONS Loading
sound/soc/sof/intel/hda.c +11 −2 Original line number Diff line number Diff line Loading @@ -506,7 +506,9 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) * TODO: support interrupt mode selection with kernel parameter * support msi multiple vectors */ #if IS_ENABLED(CONFIG_PCI) ret = pci_alloc_irq_vectors(pci, 1, 1, PCI_IRQ_MSI); #endif if (ret < 0) { dev_info(sdev->dev, "use legacy interrupt mode\n"); /* Loading @@ -518,7 +520,9 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) sdev->msi_enabled = 0; } else { dev_info(sdev->dev, "use msi interrupt mode\n"); #if IS_ENABLED(CONFIG_PCI) hdev->irq = pci_irq_vector(pci, 0); #endif /* ipc irq number is the same of hda irq */ sdev->ipc_irq = hdev->irq; sdev->msi_enabled = 1; Loading Loading @@ -622,8 +626,10 @@ int hda_dsp_probe(struct snd_sof_dev *sdev) free_hda_irq: free_irq(hdev->irq, bus); free_irq_vector: #if IS_ENABLED(CONFIG_PCI) if (sdev->msi_enabled) pci_free_irq_vectors(pci); #endif free_streams: hda_dsp_stream_free(sdev); /* dsp_unmap: not currently used */ Loading @@ -638,7 +644,6 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) { struct sof_intel_hda_dev *hda = sdev->pdata->hw_pdata; struct hdac_bus *bus = sof_to_bus(sdev); struct pci_dev *pci = to_pci_dev(sdev->dev); const struct sof_intel_dsp_desc *chip = hda->desc; #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) Loading Loading @@ -667,8 +672,12 @@ int hda_dsp_remove(struct snd_sof_dev *sdev) free_irq(sdev->ipc_irq, sdev); free_irq(hda->irq, bus); if (sdev->msi_enabled) #if IS_ENABLED(CONFIG_PCI) if (sdev->msi_enabled) { struct pci_dev *pci = to_pci_dev(sdev->dev); pci_free_irq_vectors(pci); } #endif hda_dsp_stream_free(sdev); #if IS_ENABLED(CONFIG_SND_SOC_SOF_HDA) Loading
sound/soc/sof/sof-pci-dev.c +4 −0 Original line number Diff line number Diff line Loading @@ -251,9 +251,11 @@ static int sof_pci_probe(struct pci_dev *pci, if (!sof_pdata) return -ENOMEM; #if IS_ENABLED(CONFIG_PCI) ret = pcim_enable_device(pci); if (ret < 0) return ret; #endif ret = pci_request_regions(pci, "Audio DSP"); if (ret < 0) Loading Loading @@ -386,6 +388,7 @@ static const struct pci_device_id sof_pci_ids[] = { }; MODULE_DEVICE_TABLE(pci, sof_pci_ids); #if IS_ENABLED(CONFIG_PCI) /* pci_driver definition */ static struct pci_driver snd_sof_pci_driver = { .name = "sof-audio-pci", Loading @@ -397,5 +400,6 @@ static struct pci_driver snd_sof_pci_driver = { }, }; module_pci_driver(snd_sof_pci_driver); #endif MODULE_LICENSE("Dual BSD/GPL");