Path: blob/main/sys/contrib/dev/mediatek/mt76/mt7603/soc.c
48525 views
// SPDX-License-Identifier: ISC12#include <linux/kernel.h>3#include <linux/module.h>4#include <linux/platform_device.h>56#include "mt7603.h"78static int9mt76_wmac_probe(struct platform_device *pdev)10{11struct mt7603_dev *dev;12void __iomem *mem_base;13struct mt76_dev *mdev;14int irq;15int ret;1617irq = platform_get_irq(pdev, 0);18if (irq < 0)19return irq;2021mem_base = devm_platform_ioremap_resource(pdev, 0);22if (IS_ERR(mem_base))23return PTR_ERR(mem_base);2425mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7603_ops,26&mt7603_drv_ops);27if (!mdev)28return -ENOMEM;2930dev = container_of(mdev, struct mt7603_dev, mt76);31mt76_mmio_init(mdev, mem_base);3233mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |34(mt76_rr(dev, MT_HW_REV) & 0xff);35dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);3637mt76_wr(dev, MT_INT_MASK_CSR, 0);3839ret = devm_request_irq(mdev->dev, irq, mt7603_irq_handler,40IRQF_SHARED, KBUILD_MODNAME, dev);41if (ret)42goto error;4344ret = mt7603_register_device(dev);45if (ret)46goto error;4748return 0;49error:50ieee80211_free_hw(mt76_hw(dev));51return ret;52}5354static void mt76_wmac_remove(struct platform_device *pdev)55{56struct mt76_dev *mdev = platform_get_drvdata(pdev);57struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);5859mt7603_unregister_device(dev);60}6162static const struct of_device_id of_wmac_match[] = {63{ .compatible = "mediatek,mt7628-wmac" },64{},65};6667MODULE_DEVICE_TABLE(of, of_wmac_match);68MODULE_FIRMWARE(MT7628_FIRMWARE_E1);69MODULE_FIRMWARE(MT7628_FIRMWARE_E2);7071struct platform_driver mt76_wmac_driver = {72.probe = mt76_wmac_probe,73.remove = mt76_wmac_remove,74.driver = {75.name = "mt76_wmac",76.of_match_table = of_wmac_match,77},78};798081