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