Back to home page

OSCL-LXR

 
 

    


0001 // SPDX-License-Identifier: ISC
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 };