mirror of https://github.com/hak5/openwrt.git
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>master
parent
20c7abd4b7
commit
d512657195
|
@ -0,0 +1,45 @@
|
|||
#
|
||||
# Copyright (C) 2020 OpenWrt.org
|
||||
#
|
||||
# This is free software, licensed under the GNU General Public License v2.
|
||||
# See /LICENSE for more information.
|
||||
#
|
||||
|
||||
include $(TOPDIR)/rules.mk
|
||||
include $(INCLUDE_DIR)/kernel.mk
|
||||
|
||||
PKG_NAME:=mt7621-qtn-rgmii
|
||||
PKG_RELEASE:=1
|
||||
PKG_LICENSE:=GPL-2.0
|
||||
|
||||
PKG_MAINTAINER:=Bjørn Mork <bjorn@mork.no>
|
||||
|
||||
include $(INCLUDE_DIR)/package.mk
|
||||
|
||||
define KernelPackage/mt7621-qtn-rgmii
|
||||
SECTION:=kernel
|
||||
SUBMENU:=Other modules
|
||||
TITLE:=Enable RGMII connected Quantenna module on MT7621
|
||||
DEPENDS:=@TARGET_ramips_mt7621
|
||||
HIDDEN:=1
|
||||
FILES:=$(PKG_BUILD_DIR)/mt7621-qtn-rgmii.ko
|
||||
AUTOLOAD:=$(call AutoLoad,30,mt7621-qtn-rgmii,1)
|
||||
endef
|
||||
|
||||
define KernelPackage/mt7621-qtn-rgmii/description
|
||||
Enable RGMII connected Quantenna module on MT7621.
|
||||
|
||||
The Mitrastar designed ZyXEL WAP6805 has a Quantenna QV840
|
||||
module connected to the RGMII pins of the MT7621 SoC. For
|
||||
unknown reasons, it is necessary to change the value of
|
||||
the register at 0x1e110008 from default (usually 0xc000c)
|
||||
to 0x9000c for this connection wo work.
|
||||
|
||||
This driver simply does that without much fuzz.
|
||||
endef
|
||||
|
||||
define Build/Compile
|
||||
$(KERNEL_MAKE) M=$(PKG_BUILD_DIR) modules
|
||||
endef
|
||||
|
||||
$(eval $(call KernelPackage,mt7621-qtn-rgmii))
|
|
@ -0,0 +1 @@
|
|||
obj-m += mt7621-qtn-rgmii.o
|
|
@ -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");
|
Loading…
Reference in New Issue