xref: /linux/drivers/net/wireless/mediatek/mt76/mt7615/pci.c (revision 65c93628599dff4cd7cfb70130d1f6a2203731ea)
1 // SPDX-License-Identifier: ISC
2 /* Copyright (C) 2019 MediaTek Inc.
3  *
4  * Author: Ryder Lee <ryder.lee@mediatek.com>
5  *         Felix Fietkau <nbd@nbd.name>
6  */
7 
8 #include <linux/kernel.h>
9 #include <linux/module.h>
10 #include <linux/pci.h>
11 
12 #include "mt7615.h"
13 
14 static const struct pci_device_id mt7615_pci_device_table[] = {
15 	{ PCI_DEVICE(0x14c3, 0x7615) },
16 	{ },
17 };
18 
19 static int mt7615_pci_probe(struct pci_dev *pdev,
20 			    const struct pci_device_id *id)
21 {
22 	int ret;
23 
24 	ret = pcim_enable_device(pdev);
25 	if (ret)
26 		return ret;
27 
28 	ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
29 	if (ret)
30 		return ret;
31 
32 	pci_set_master(pdev);
33 
34 	ret = pci_set_dma_mask(pdev, DMA_BIT_MASK(32));
35 	if (ret)
36 		return ret;
37 
38 	return mt7615_mmio_probe(&pdev->dev, pcim_iomap_table(pdev)[0], pdev->irq);
39 }
40 
41 static void mt7615_pci_remove(struct pci_dev *pdev)
42 {
43 	struct mt76_dev *mdev = pci_get_drvdata(pdev);
44 	struct mt7615_dev *dev = container_of(mdev, struct mt7615_dev, mt76);
45 
46 	mt7615_unregister_device(dev);
47 }
48 
49 struct pci_driver mt7615_pci_driver = {
50 	.name		= KBUILD_MODNAME,
51 	.id_table	= mt7615_pci_device_table,
52 	.probe		= mt7615_pci_probe,
53 	.remove		= mt7615_pci_remove,
54 };
55 
56 MODULE_DEVICE_TABLE(pci, mt7615_pci_device_table);
57 MODULE_FIRMWARE(MT7615_FIRMWARE_CR4);
58 MODULE_FIRMWARE(MT7615_FIRMWARE_N9);
59 MODULE_FIRMWARE(MT7615_ROM_PATCH);
60