xref: /freebsd/sys/contrib/dev/mediatek/mt76/mt7615/soc.c (revision 8ba4d145d351db26e07695b8e90697398c5dfec2)
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