ramips: mt7620a: add support for LCX LCX-ZJ1200-03
Snapped All
snappedall at hotmail.com
Sun Jan 4 18:58:44 PST 2026
Original date: Tue, 15 Apr 2025 11:32:36 -0400
This is a cheap (25$) WiFi repeater made by a company called Shenzen-LinChuangXun (LCX)
Mine's from Edtiske, but it's likely not a real company and simply a trademark for their amazon (an identical device is listed as "NeaLia").
Therefore, it's branded after the actual OEM (which specializes in networking equipment).
** SPECS: **
- MT7620a SoC w/2.4Ghz 802.11b/g/n
- MT7612e WLAN for 5Ghz 802.11ac (WiFi5)
- 128MB RAM
- 8MB MX25L6406E SPI NOR
- UART TXD/RXD, 57600
- 4 antennas (2 FAKE)
** Installation: **
This device ships with CleanWRT (u-boot_mt7620), a fork of pepe2k's ath79 u-boot_mod. Very bizarre.
However, this means that it's compatible with OpenWRT sysupgrade.
- Hold WPS/Reset button right after connecting to power
- Set static IP to 192.168.1.2, netmask 255.255.255.0, gateway 192.168.1.1
- Access CleanWRT page at 192.168.1.1
- Upload sysupgrade.bin file and flash
** TFTP recovery: **
You shouldn't ever need this since CleanWRT's httpd is built into u-boot.
However, if for whatever reason (eg. different bootloader) this doesn't work, you'll need the serial console. (57600 baudrate)
- Rename the initramfs-kernel.bin to test.bin and serve it via tftp (eg. using tftpd-hpa, serving at /srv/tftp, file in /srv/tftp/test.bin)
- Repeat static IP steps from regular CleanWRT method.
- Then hold "4" while booting until you dropdown to a console.
- Run the command "tftpboot" and then you'll boot into OpenWRT.
Now you can run sysupgrade from OpenWRT.
** Extra: **
Stock firmware is unknown and seems to redirect to some suspicious chinese websites.
No interaction with it is required to flash OpenWRT, though it may be a future venue for firmware flashing on certain firmwares.
Signed-off-by: Rayan Farzaneh <snappedall at hotmail.com>
---
.../ramips/dts/mt7620a_lcx_lcx-zj1200-03.dts | 159 ++++++++++++++++++
target/linux/ramips/image/mt7620.mk | 9 +
.../mt7620/base-files/etc/board.d/02_network | 1 +
3 files changed, 169 insertions(+)
create mode 100644 target/linux/ramips/dts/mt7620a_lcx_lcx-zj1200-03.dts
diff --git a/target/linux/ramips/dts/mt7620a_lcx_lcx-zj1200-03.dts b/target/linux/ramips/dts/mt7620a_lcx_lcx-zj1200-03.dts
new file mode 100644
index 0000000000..3c7afb892e
--- /dev/null
+++ b/target/linux/ramips/dts/mt7620a_lcx_lcx-zj1200-03.dts
@@ -0,0 +1,159 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+#include "mt7620a.dtsi"
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/leds/common.h>
+
+/ {
+ compatible = "lcx,lcx-zj1200-03", "ralink,mt7620a-soc";
+ model = "LCX LCX-ZJ1200-03";
+
+ aliases {
+ led-boot = &led_power;
+ led-failsafe = &led_power;
+ led-running = &led_power;
+ led-upgrade = &led_power;
+ };
+
+ keys {
+ compatible = "gpio-keys";
+
+ wps {
+ label = "wps";
+ gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
+ linux,code = <KEY_WPS_BUTTON>;
+ };
+ };
+
+ leds {
+ compatible = "gpio-leds";
+
+ led_power: led_internet {
+ function = LED_FUNCTION_POWER;
+ label = "green:internet";
+ gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
+ };
+
+ led_wlan1 {
+ function = LED_FUNCTION_WLAN_5GHZ;
+ label = "green:wlan1";
+ gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "phy0tpt";
+ };
+
+ led_wlan2 {
+ function = LED_FUNCTION_WLAN_2GHZ;
+ label = "green:wlan2";
+ gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
+ linux,default-trigger = "phy1tpt";
+ };
+
+ };
+};
+
+&spi0 {
+ status = "okay";
+
+ mx25l6406e at 0 {
+ compatible = "jedec,spi-nor";
+ reg = <0>;
+ spi-max-frequency = <50000000>;
+
+ partitions {
+ compatible = "fixed-partitions";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ partition at 0 {
+ label = "u-boot";
+ reg = <0x0 0x30000>;
+ read-only;
+ };
+
+ partition at 30000 {
+ label = "u-boot-env";
+ reg = <0x30000 0x10000>;
+ read-only;
+ };
+
+ factory: partition at 40000 {
+ label = "factory";
+ reg = <0x40000 0x10000>;
+ read-only;
+
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ macaddr_factory_4: macaddr at 4 {
+ reg = <0x4 0x6>;
+ };
+
+ macaddr_factory_2e: macaddr at 2e {
+ reg = <0x2e 0x6>;
+ };
+
+ eeprom_radio_0: eeprom at 0 {
+ reg = <0x0 0x200>;
+ };
+
+ eeprom_radio_8000: eeprom at 8000 {
+ reg = <0x8000 0x200>;
+ };
+ };
+ };
+
+ partition at 50000 {
+ compatible = "denx,uimage";
+ label = "firmware";
+ reg = <0x50000 0x7a0000>;
+ };
+
+ partition at 7f0000 {
+ label = "backup_config";
+ reg = <0x7f0000 0x10000>;
+ read-only;
+ };
+ };
+ };
+};
+
+ðernet {
+ pinctrl-names = "default";
+ pinctrl-0 = <&rgmii2_pins>, <&ephy_pins>, <&mdio_pins>;
+
+ nvmem-cells = <&macaddr_factory_4>;
+ nvmem-cell-names = "mac-address";
+};
+
+&pcie {
+ status = "okay";
+};
+
+&pcie0 {
+ mt76 at 0,0 {
+ compatible = "mediatek,mt76";
+ reg = <0x0000 0 0 0 0>;
+ nvmem-cells = <&eeprom_radio_8000>;
+ nvmem-cell-names = "eeprom";
+ ieee80211-freq-limit = <5000000 6000000>;
+ };
+};
+
+&gsw {
+ mediatek,port4-gmac;
+};
+
+&wmac {
+ nvmem-cells = <&eeprom_radio_0>;
+ nvmem-cell-names = "eeprom";
+};
+
+&state_default {
+ gpio {
+ groups = "i2c", "uartf";
+ function = "gpio";
+ };
+};
diff --git a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network
index 208cb64..1212603 100644
--- a/target/linux/ramips/mt7620/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt7620/base-files/etc/board.d/02_network
@@ -171,6 +171,7 @@ ramips_setup_interfaces()
"5:lan" "6 at eth0"
ucidef_add_switch_attr "switch1" "enable" "false"
;;
+ lcx,lcx-zj1200-03|\
fon,fon2601|\
vonets,var11n-300)
ucidef_add_switch "switch0" \
--
2.43.0
More information about the openwrt-devel
mailing list