16c92544dSBjoern A. Zeeb // SPDX-License-Identifier: ISC
26c92544dSBjoern A. Zeeb /* Copyright (C) 2019 MediaTek Inc.
36c92544dSBjoern A. Zeeb *
46c92544dSBjoern A. Zeeb * Author: Ryder Lee <ryder.lee@mediatek.com>
56c92544dSBjoern A. Zeeb * Felix Fietkau <nbd@nbd.name>
66c92544dSBjoern A. Zeeb */
76c92544dSBjoern A. Zeeb
86c92544dSBjoern A. Zeeb #include <linux/kernel.h>
96c92544dSBjoern A. Zeeb #include <linux/module.h>
106c92544dSBjoern A. Zeeb #include <linux/platform_device.h>
116c92544dSBjoern A. Zeeb #include <linux/regmap.h>
126c92544dSBjoern A. Zeeb #include <linux/mfd/syscon.h>
136c92544dSBjoern A. Zeeb #include <linux/of.h>
146c92544dSBjoern A. Zeeb #include "mt7615.h"
156c92544dSBjoern A. Zeeb
mt7622_wmac_init(struct mt7615_dev * dev)166c92544dSBjoern A. Zeeb int mt7622_wmac_init(struct mt7615_dev *dev)
176c92544dSBjoern A. Zeeb {
186c92544dSBjoern A. Zeeb struct device_node *np = dev->mt76.dev->of_node;
196c92544dSBjoern A. Zeeb
206c92544dSBjoern A. Zeeb if (!is_mt7622(&dev->mt76))
216c92544dSBjoern A. Zeeb return 0;
226c92544dSBjoern A. Zeeb
236c92544dSBjoern A. Zeeb dev->infracfg = syscon_regmap_lookup_by_phandle(np, "mediatek,infracfg");
246c92544dSBjoern A. Zeeb if (IS_ERR(dev->infracfg)) {
256c92544dSBjoern A. Zeeb dev_err(dev->mt76.dev, "Cannot find infracfg controller\n");
266c92544dSBjoern A. Zeeb return PTR_ERR(dev->infracfg);
276c92544dSBjoern A. Zeeb }
286c92544dSBjoern A. Zeeb
296c92544dSBjoern A. Zeeb return 0;
306c92544dSBjoern A. Zeeb }
316c92544dSBjoern A. Zeeb
mt7622_wmac_probe(struct platform_device * pdev)326c92544dSBjoern A. Zeeb static int mt7622_wmac_probe(struct platform_device *pdev)
336c92544dSBjoern A. Zeeb {
346c92544dSBjoern A. Zeeb void __iomem *mem_base;
356c92544dSBjoern A. Zeeb int irq;
366c92544dSBjoern A. Zeeb
376c92544dSBjoern A. Zeeb irq = platform_get_irq(pdev, 0);
386c92544dSBjoern A. Zeeb if (irq < 0)
396c92544dSBjoern A. Zeeb return irq;
406c92544dSBjoern A. Zeeb
416c92544dSBjoern A. Zeeb mem_base = devm_platform_get_and_ioremap_resource(pdev, 0, NULL);
426c92544dSBjoern A. Zeeb if (IS_ERR(mem_base))
436c92544dSBjoern A. Zeeb return PTR_ERR(mem_base);
446c92544dSBjoern A. Zeeb
456c92544dSBjoern A. Zeeb return mt7615_mmio_probe(&pdev->dev, mem_base, irq, mt7615e_reg_map);
466c92544dSBjoern A. Zeeb }
476c92544dSBjoern A. Zeeb
mt7622_wmac_remove(struct platform_device * pdev)48*8ba4d145SBjoern A. Zeeb static void mt7622_wmac_remove(struct platform_device *pdev)
496c92544dSBjoern A. Zeeb {
506c92544dSBjoern A. Zeeb struct mt7615_dev *dev = platform_get_drvdata(pdev);
516c92544dSBjoern A. Zeeb
526c92544dSBjoern A. Zeeb mt7615_unregister_device(dev);
536c92544dSBjoern A. Zeeb }
546c92544dSBjoern A. Zeeb
556c92544dSBjoern A. Zeeb static const struct of_device_id mt7622_wmac_of_match[] = {
566c92544dSBjoern A. Zeeb { .compatible = "mediatek,mt7622-wmac" },
576c92544dSBjoern A. Zeeb {},
586c92544dSBjoern A. Zeeb };
596c92544dSBjoern A. Zeeb
606c92544dSBjoern A. Zeeb struct platform_driver mt7622_wmac_driver = {
616c92544dSBjoern A. Zeeb .driver = {
626c92544dSBjoern A. Zeeb .name = "mt7622-wmac",
636c92544dSBjoern A. Zeeb .of_match_table = mt7622_wmac_of_match,
646c92544dSBjoern A. Zeeb },
656c92544dSBjoern A. Zeeb .probe = mt7622_wmac_probe,
666c92544dSBjoern A. Zeeb .remove = mt7622_wmac_remove,
676c92544dSBjoern A. Zeeb };
686c92544dSBjoern A. Zeeb
696c92544dSBjoern A. Zeeb MODULE_FIRMWARE(MT7622_FIRMWARE_N9);
706c92544dSBjoern A. Zeeb MODULE_FIRMWARE(MT7622_ROM_PATCH);
71