1 // SPDX-License-Identifier: GPL-2.0+
3 // AMD Vangogh ACP PCI Driver
5 // Copyright (C) 2021 Advanced Micro Devices, Inc. All rights reserved.
8 #include <linux/module.h>
13 struct acp5x_dev_data {
14 void __iomem *acp5x_base;
17 static int snd_acp5x_probe(struct pci_dev *pci,
18 const struct pci_device_id *pci_id)
20 struct acp5x_dev_data *adata;
24 if (pci->revision != 0x50)
27 if (pci_enable_device(pci)) {
28 dev_err(&pci->dev, "pci_enable_device failed\n");
32 ret = pci_request_regions(pci, "AMD ACP5x audio");
34 dev_err(&pci->dev, "pci_request_regions failed\n");
38 adata = devm_kzalloc(&pci->dev, sizeof(struct acp5x_dev_data),
44 addr = pci_resource_start(pci, 0);
45 adata->acp5x_base = devm_ioremap(&pci->dev, addr,
46 pci_resource_len(pci, 0));
47 if (!adata->acp5x_base) {
52 pci_set_drvdata(pci, adata);
55 pci_release_regions(pci);
57 pci_disable_device(pci);
62 static void snd_acp5x_remove(struct pci_dev *pci)
64 pci_release_regions(pci);
65 pci_disable_device(pci);
68 static const struct pci_device_id snd_acp5x_ids[] = {
69 { PCI_DEVICE(PCI_VENDOR_ID_AMD, ACP_DEVICE_ID),
70 .class = PCI_CLASS_MULTIMEDIA_OTHER << 8,
71 .class_mask = 0xffffff },
74 MODULE_DEVICE_TABLE(pci, snd_acp5x_ids);
76 static struct pci_driver acp5x_driver = {
77 .name = KBUILD_MODNAME,
78 .id_table = snd_acp5x_ids,
79 .probe = snd_acp5x_probe,
80 .remove = snd_acp5x_remove,
83 module_pci_driver(acp5x_driver);
85 MODULE_AUTHOR("Vijendar.Mukunda@amd.com");
86 MODULE_DESCRIPTION("AMD Vangogh ACP PCI driver");
87 MODULE_LICENSE("GPL v2");