0001
0002
0003 #include <linux/kernel.h>
0004 #include <linux/module.h>
0005 #include <linux/pci.h>
0006
0007 #include "mt7603.h"
0008
0009 static const struct pci_device_id mt76pci_device_table[] = {
0010 { PCI_DEVICE(PCI_VENDOR_ID_MEDIATEK, 0x7603) },
0011 { },
0012 };
0013
0014 static int
0015 mt76pci_probe(struct pci_dev *pdev, const struct pci_device_id *id)
0016 {
0017 struct mt7603_dev *dev;
0018 struct mt76_dev *mdev;
0019 int ret;
0020
0021 ret = pcim_enable_device(pdev);
0022 if (ret)
0023 return ret;
0024
0025 ret = pcim_iomap_regions(pdev, BIT(0), pci_name(pdev));
0026 if (ret)
0027 return ret;
0028
0029 pci_set_master(pdev);
0030
0031 ret = dma_set_mask(&pdev->dev, DMA_BIT_MASK(32));
0032 if (ret)
0033 return ret;
0034
0035 mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7603_ops,
0036 &mt7603_drv_ops);
0037 if (!mdev)
0038 return -ENOMEM;
0039
0040 dev = container_of(mdev, struct mt7603_dev, mt76);
0041 mt76_mmio_init(mdev, pcim_iomap_table(pdev)[0]);
0042
0043 mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |
0044 (mt76_rr(dev, MT_HW_REV) & 0xff);
0045 dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);
0046
0047 mt76_wr(dev, MT_INT_MASK_CSR, 0);
0048
0049 ret = devm_request_irq(mdev->dev, pdev->irq, mt7603_irq_handler,
0050 IRQF_SHARED, KBUILD_MODNAME, dev);
0051 if (ret)
0052 goto error;
0053
0054 ret = mt7603_register_device(dev);
0055 if (ret)
0056 goto error;
0057
0058 return 0;
0059 error:
0060 mt76_free_device(&dev->mt76);
0061
0062 return ret;
0063 }
0064
0065 static void
0066 mt76pci_remove(struct pci_dev *pdev)
0067 {
0068 struct mt76_dev *mdev = pci_get_drvdata(pdev);
0069 struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);
0070
0071 mt7603_unregister_device(dev);
0072 }
0073
0074 MODULE_DEVICE_TABLE(pci, mt76pci_device_table);
0075 MODULE_FIRMWARE(MT7603_FIRMWARE_E1);
0076 MODULE_FIRMWARE(MT7603_FIRMWARE_E2);
0077
0078 struct pci_driver mt7603_pci_driver = {
0079 .name = KBUILD_MODNAME,
0080 .id_table = mt76pci_device_table,
0081 .probe = mt76pci_probe,
0082 .remove = mt76pci_remove,
0083 };