mt76: mt7615: implement probing and firmware loading on MT7622
[linux-2.6-microblaze.git] / drivers / net / wireless / mediatek / mt76 / mt7615 / pci.c
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);