aboutsummaryrefslogtreecommitdiffstats
path: root/package/kernel/mt7621-qtn-rgmii/src
diff options
context:
space:
mode:
authorBjørn Mork <bjorn@mork.no>2020-04-05 16:17:11 +0200
committerPetr Štetiar <ynezz@true.cz>2020-07-08 16:07:05 +0200
commitd512657195de2f8062fc2354af1c3d96bf378d9b (patch)
treec29fb7cf965083863e7215a327400d10b111ffa8 /package/kernel/mt7621-qtn-rgmii/src
parent20c7abd4b7b9b4203b6858136b2c811b6dbd8dae (diff)
downloadupstream-d512657195de2f8062fc2354af1c3d96bf378d9b.tar.gz
upstream-d512657195de2f8062fc2354af1c3d96bf378d9b.tar.bz2
upstream-d512657195de2f8062fc2354af1c3d96bf378d9b.zip
mt7621-qtn-rgmii: enable RGMII connected Quantenna QV840
Write a magic value to a magic destination. This might be specific to the Mitrastar designed ZyXEL WAP6805. Signed-off-by: Bjørn Mork <bjorn@mork.no>
Diffstat (limited to 'package/kernel/mt7621-qtn-rgmii/src')
-rw-r--r--package/kernel/mt7621-qtn-rgmii/src/Makefile1
-rw-r--r--package/kernel/mt7621-qtn-rgmii/src/mt7621-qtn-rgmii.c48
2 files changed, 49 insertions, 0 deletions
diff --git a/package/kernel/mt7621-qtn-rgmii/src/Makefile b/package/kernel/mt7621-qtn-rgmii/src/Makefile
new file mode 100644
index 0000000000..c993ac45bd
--- /dev/null
+++ b/package/kernel/mt7621-qtn-rgmii/src/Makefile
@@ -0,0 +1 @@
+obj-m += mt7621-qtn-rgmii.o
diff --git a/package/kernel/mt7621-qtn-rgmii/src/mt7621-qtn-rgmii.c b/package/kernel/mt7621-qtn-rgmii/src/mt7621-qtn-rgmii.c
new file mode 100644
index 0000000000..5f223b5d75
--- /dev/null
+++ b/package/kernel/mt7621-qtn-rgmii/src/mt7621-qtn-rgmii.c
@@ -0,0 +1,48 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2020 Bjørn Mork <bjorn@mork.no>
+ */
+#include <linux/io.h>
+#include <linux/module.h>
+
+#define MODULE_NAME "mt7621-qtn-rgmii"
+#define RGMII_REG_BASE 0x1e110008
+#define RGMII_REG_SIZE 4
+#define RGMII_REG_VALUE 0x9000c
+
+static u32 oldval;
+
+static int __init mt7621_qtn_rgmii_init(void)
+{
+ void __iomem *base = ioremap(RGMII_REG_BASE, RGMII_REG_SIZE);
+
+ if (!base)
+ return -ENOMEM;
+ oldval = ioread32(base);
+ if (oldval != RGMII_REG_VALUE) {
+ iowrite32(RGMII_REG_VALUE, base);
+ pr_info(MODULE_NAME ": changed register 0x%08x value from 0x%08x to 0x%08x\n", RGMII_REG_BASE, oldval, RGMII_REG_VALUE);
+ }
+ iounmap(base);
+ return 0;
+}
+
+static void __exit mt7621_qtn_rgmii_exit(void)
+{
+ void __iomem *base = ioremap(RGMII_REG_BASE, RGMII_REG_SIZE);
+
+ if (!base)
+ return;
+ if (oldval != RGMII_REG_VALUE) {
+ iowrite32(oldval, base);
+ pr_info(MODULE_NAME ": reset register 0x%08x back to 0x%08x\n", RGMII_REG_BASE, oldval);
+ }
+ iounmap(base);
+}
+
+module_init(mt7621_qtn_rgmii_init);
+module_exit(mt7621_qtn_rgmii_exit);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Bjørn Mork <bjorn@mork.no>");
+MODULE_DESCRIPTION("Enable RGMII connected Quantenna module on MT7621");