brintos

brintos / linux-shallow public Read only

0
0
Text · 1.7 KiB · ec02148 Raw
80 lines · c
1// SPDX-License-Identifier: ISC2 3#include <linux/kernel.h>4#include <linux/module.h>5#include <linux/platform_device.h>6 7#include "mt7603.h"8 9static int10mt76_wmac_probe(struct platform_device *pdev)11{12	struct mt7603_dev *dev;13	void __iomem *mem_base;14	struct mt76_dev *mdev;15	int irq;16	int ret;17 18	irq = platform_get_irq(pdev, 0);19	if (irq < 0)20		return irq;21 22	mem_base = devm_platform_ioremap_resource(pdev, 0);23	if (IS_ERR(mem_base))24		return PTR_ERR(mem_base);25 26	mdev = mt76_alloc_device(&pdev->dev, sizeof(*dev), &mt7603_ops,27				 &mt7603_drv_ops);28	if (!mdev)29		return -ENOMEM;30 31	dev = container_of(mdev, struct mt7603_dev, mt76);32	mt76_mmio_init(mdev, mem_base);33 34	mdev->rev = (mt76_rr(dev, MT_HW_CHIPID) << 16) |35		    (mt76_rr(dev, MT_HW_REV) & 0xff);36	dev_info(mdev->dev, "ASIC revision: %04x\n", mdev->rev);37 38	mt76_wr(dev, MT_INT_MASK_CSR, 0);39 40	ret = devm_request_irq(mdev->dev, irq, mt7603_irq_handler,41			       IRQF_SHARED, KBUILD_MODNAME, dev);42	if (ret)43		goto error;44 45	ret = mt7603_register_device(dev);46	if (ret)47		goto error;48 49	return 0;50error:51	ieee80211_free_hw(mt76_hw(dev));52	return ret;53}54 55static void mt76_wmac_remove(struct platform_device *pdev)56{57	struct mt76_dev *mdev = platform_get_drvdata(pdev);58	struct mt7603_dev *dev = container_of(mdev, struct mt7603_dev, mt76);59 60	mt7603_unregister_device(dev);61}62 63static const struct of_device_id of_wmac_match[] = {64	{ .compatible = "mediatek,mt7628-wmac" },65	{},66};67 68MODULE_DEVICE_TABLE(of, of_wmac_match);69MODULE_FIRMWARE(MT7628_FIRMWARE_E1);70MODULE_FIRMWARE(MT7628_FIRMWARE_E2);71 72struct platform_driver mt76_wmac_driver = {73	.probe		= mt76_wmac_probe,74	.remove_new	= mt76_wmac_remove,75	.driver = {76		.name = "mt76_wmac",77		.of_match_table = of_wmac_match,78	},79};80