mt7621-qtn-rgmii: enable RGMII connected Quantenna QV840
[openwrt/staging/neocturne.git] / package / kernel / mt7621-qtn-rgmii / src / mt7621-qtn-rgmii.c
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3 * Copyright (c) 2020 Bjørn Mork <bjorn@mork.no>
4 */
5 #include <linux/io.h>
6 #include <linux/module.h>
7
8 #define MODULE_NAME "mt7621-qtn-rgmii"
9 #define RGMII_REG_BASE 0x1e110008
10 #define RGMII_REG_SIZE 4
11 #define RGMII_REG_VALUE 0x9000c
12
13 static u32 oldval;
14
15 static int __init mt7621_qtn_rgmii_init(void)
16 {
17 void __iomem *base = ioremap(RGMII_REG_BASE, RGMII_REG_SIZE);
18
19 if (!base)
20 return -ENOMEM;
21 oldval = ioread32(base);
22 if (oldval != RGMII_REG_VALUE) {
23 iowrite32(RGMII_REG_VALUE, base);
24 pr_info(MODULE_NAME ": changed register 0x%08x value from 0x%08x to 0x%08x\n", RGMII_REG_BASE, oldval, RGMII_REG_VALUE);
25 }
26 iounmap(base);
27 return 0;
28 }
29
30 static void __exit mt7621_qtn_rgmii_exit(void)
31 {
32 void __iomem *base = ioremap(RGMII_REG_BASE, RGMII_REG_SIZE);
33
34 if (!base)
35 return;
36 if (oldval != RGMII_REG_VALUE) {
37 iowrite32(oldval, base);
38 pr_info(MODULE_NAME ": reset register 0x%08x back to 0x%08x\n", RGMII_REG_BASE, oldval);
39 }
40 iounmap(base);
41 }
42
43 module_init(mt7621_qtn_rgmii_init);
44 module_exit(mt7621_qtn_rgmii_exit);
45
46 MODULE_LICENSE("GPL");
47 MODULE_AUTHOR("Bjørn Mork <bjorn@mork.no>");
48 MODULE_DESCRIPTION("Enable RGMII connected Quantenna module on MT7621");