diff mbox series

ramips: add support for Wavlink WL-WN578A2

Message ID 20210422192402.92782-1-dev.aldrian@gmail.com
State Superseded
Headers show
Series ramips: add support for Wavlink WL-WN578A2 | expand

Commit Message

Thomas Aldrian April 22, 2021, 7:24 p.m. UTC
From: Thomas Aldrian <dev.aldrian@gmail.com>

This commit adds support for the Wavlink WL-WN578A2 dual-band wall-plug
wireless router. This device is also sold under the name SilverCrest
SWV 733 A2.

Device Specifications:

- CPU: MediaTek MT7628AN (580MHz)
- Flash: 8MB
- RAM: 64MB
- Bootloader: U-Boot
- Ethernet: 2x 10/100 Mbps
- 2.4 GHz: 802.11b/g/n SoC
- 5 GHz: 802.11a/n/ac MT7610E
- Antennas: internal
- 4 green LEDs: WPS/Power, LAN, WAN, wifi-low, wifi-med, wifi-high
- Buttons: Reset, WPS
- Sliding mode switch: AP, repeater, client
- Small sliding power switch

Flashing instructions:

U-Boot launches TFTP client if WPS button is pressed during power-on.
Configure as follows:

- Server IP: 192.168.10.100
- Filename (rename sysupgrade file to this): firmware.bin

Flashing should not take more than a minute, device will reboot
automatically.

Signed-off-by: Thomas Aldrian <dev.aldrian@gmail.com>
---
 .../dts/mt7628an_wavlink_wl-wn578a2.dts       | 165 ++++++++++++++++++
 target/linux/ramips/image/mt76x8.mk           |  10 ++
 .../mt76x8/base-files/etc/board.d/01_leds     |   8 +
 .../mt76x8/base-files/etc/board.d/02_network  |   6 +-
 4 files changed, 187 insertions(+), 2 deletions(-)
 create mode 100644 target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts

Comments

Adrian Schmutzler April 25, 2021, 8:27 p.m. UTC | #1
Hi,

comments inline. Nothing really serious ...

> -----Original Message-----
> From: openwrt-devel [mailto:openwrt-devel-bounces@lists.openwrt.org]
> On Behalf Of dev.aldrian@gmail.com
> Sent: Donnerstag, 22. April 2021 21:24
> To: openwrt-devel@lists.openwrt.org
> Cc: Thomas Aldrian <dev.aldrian@gmail.com>
> Subject: [PATCH] ramips: add support for Wavlink WL-WN578A2
> 
> From: Thomas Aldrian <dev.aldrian@gmail.com>
> 
> This commit adds support for the Wavlink WL-WN578A2 dual-band wall-plug
> wireless router. This device is also sold under the name SilverCrest SWV 733
> A2.
> 
> Device Specifications:
> 
> - CPU: MediaTek MT7628AN (580MHz)
> - Flash: 8MB
> - RAM: 64MB
> - Bootloader: U-Boot
> - Ethernet: 2x 10/100 Mbps
> - 2.4 GHz: 802.11b/g/n SoC
> - 5 GHz: 802.11a/n/ac MT7610E
> - Antennas: internal
> - 4 green LEDs: WPS/Power, LAN, WAN, wifi-low, wifi-med, wifi-high
> - Buttons: Reset, WPS
> - Sliding mode switch: AP, repeater, client
> - Small sliding power switch
> 
> Flashing instructions:
> 
> U-Boot launches TFTP client if WPS button is pressed during power-on.
> Configure as follows:
> 
> - Server IP: 192.168.10.100
> - Filename (rename sysupgrade file to this): firmware.bin
> 
> Flashing should not take more than a minute, device will reboot
> automatically.
> 
> Signed-off-by: Thomas Aldrian <dev.aldrian@gmail.com>
> ---
>  .../dts/mt7628an_wavlink_wl-wn578a2.dts       | 165 ++++++++++++++++++
>  target/linux/ramips/image/mt76x8.mk           |  10 ++
>  .../mt76x8/base-files/etc/board.d/01_leds     |   8 +
>  .../mt76x8/base-files/etc/board.d/02_network  |   6 +-
>  4 files changed, 187 insertions(+), 2 deletions(-)  create mode 100644
> target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts
> 
> diff --git a/target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts
> b/target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts
> new file mode 100644
> index 0000000000..69a54c297b
> --- /dev/null
> +++ b/target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts
> @@ -0,0 +1,165 @@
> +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
> +
> +#include "mt7628an.dtsi"
> +
> +#include <dt-bindings/input/input.h>
> +#include <dt-bindings/gpio/gpio.h>
> +
> +/ {
> +	compatible = "wavlink,wl-wn578a2", "mediatek,mt7628an-soc";
> +	model = "Wavlink WL-WN578A2";
> +
> +	aliases {
> +		led-boot = &led_wps;
> +		led-failsafe = &led_wps;
> +		led-running = &led_wps;
> +		led-upgrade = &led_wps;
> +	};
> +
> +	keys {
> +		compatible = "gpio-keys";
> +
> +		reset {
> +			label = "reset";
> +			gpios = <&gpio 43 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_RESTART>;
> +		};
> +
> +		wps {
> +			label = "wps";
> +			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
> +			linux,code = <KEY_WPS_BUTTON>;
> +		};
> +
> +		ap {
> +			label = "ap";
> +			gpios = <&gpio 41 GPIO_ACTIVE_LOW>;
> +			linux,code = <BTN_0>;
> +			linux,input-type = <EV_SW>;
> +		};
> +
> +		repeater {
> +			label = "repeater";
> +			gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
> +			linux,code = <BTN_1>;
> +			linux,input-type = <EV_SW>;
> +		};
> +	};
> +
> +	leds {
> +		compatible = "gpio-leds";
> +
> +		wifi-high {
> +			label = "green:wifi-high";
> +			gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wifi-med {
> +			label = "green:wifi-med";
> +			gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wifi-low {
> +			label = "green:wifi-low";
> +			gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		lan {
> +			label = "green:lan";
> +			gpios = <&gpio 40 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		wan {
> +			label = "green:wan";
> +			gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
> +		};
> +
> +		led_wps: wps {
> +			label = "green:wps";
> +			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
> +		};
> +	};
> +};
> +
> +&state_default {
> +	gpio {
> +		groups = "i2c", "wdt", "wled_an", "p0led_an", "p1led_an",
> "p2_led", "p3led_an", "p4led_an", "refclk";
> +		function = "gpio";
> +	};

p2led_an (typo)
Apart from that, gpio 11 is missing ...
And please wrap this long line.

> +};
> +
> +&pcie {
> +	status = "okay";
> +};
> +
> +&pcie0 {
> +	mt76@0,0 {

wifi@0,0

> +		reg = <0x0000 0 0 0 0>;
> +		mediatek,mtd-eeprom = <&factory 0x8000>;
> +		ieee80211-freq-limit = <5000000 6000000>;
> +	};
> +};
> +
> +&spi0 {
> +	status = "okay";
> +
> +	flash@0 {
> +		compatible = "jedec,spi-nor";
> +		reg = <0>;
> +		spi-max-frequency = <40000000>;
> +
> +		partitions {
> +			compatible = "fixed-partitions";
> +			#address-cells = <1>;
> +			#size-cells = <1>;
> +
> +			partition@0 {
> +				label = "u-boot";
> +				reg = <0x0 0x30000>;
> +				read-only;
> +			};
> +
> +			partition@30000 {
> +				label = "u-boot-env";
> +				reg = <0x30000 0x10000>;
> +				read-only;
> +			};
> +
> +			factory: partition@40000 {
> +				label = "factory";
> +				reg = <0x40000 0x10000>;
> +				read-only;
> +			};
> +
> +			partition@50000 {
> +				compatible = "denx,uimage";
> +				label = "firmware";
> +				reg = <0x50000 0x7b0000>;
> +			};
> +		};
> +	};
> +};
> +
> +&wmac {
> +	status = "okay";
> +};
> +
> +&ethernet {
> +	mtd-mac-address = <&factory 0x28>;
> +};
> +
> +&esw {
> +	mediatek,portmap = <0x2f>;
> +};
> +
> +&usbphy {
> +	status = "disabled";
> +};
> +
> +&ehci {
> +	status = "disabled";
> +};
> +
> +&ohci {
> +	status = "disabled";
> +};
> diff --git a/target/linux/ramips/image/mt76x8.mk
> b/target/linux/ramips/image/mt76x8.mk
> index d5a9684dba..79221239e9 100644
> --- a/target/linux/ramips/image/mt76x8.mk
> +++ b/target/linux/ramips/image/mt76x8.mk
> @@ -733,6 +733,16 @@ define Device/wavlink_wl-wn577a2  endef
> TARGET_DEVICES += wavlink_wl-wn577a2
> 
> +define Device/wavlink_wl-wn578a2
> +  IMAGE_SIZE := 7872k
> +  DEVICE_VENDOR := Wavlink
> +  DEVICE_MODEL := WL-WN578A2
> +  DEVICE_ALT0_VENDOR := SilverCrest
> +  DEVICE_ALT0_MODEL := SWV 733 A2
> +  DEVICE_PACKAGES := rssileds kmod-mt76x0e endef TARGET_DEVICES +=
> +wavlink_wl-wn578a2
> +
>  define Device/widora_neo-16m
>    IMAGE_SIZE := 16064k
>    DEVICE_VENDOR := Widora
> diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> index fdef158ea8..00093a7cd7 100644
> --- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> +++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
> @@ -133,6 +133,14 @@ wavlink,wl-wn577a2)
>  	ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x8"
>  	ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x10"
>  	;;
> +wavlink,wl-wn578a2)
> +	ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x8"
> +	ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x10"
> +	ucidef_set_rssimon "wlan1" "200000" "1"
> +	ucidef_set_led_rssi "wifi-low" "wifi-low" "green:wifi-low" "wlan1"
> "1" "49"
> +	ucidef_set_led_rssi "wifi-med" "wifi-med" "green:wifi-med" "wlan1"
> "50" "84"
> +	ucidef_set_led_rssi "wifi-high" "wifi-high" "green:wifi-high" "wlan1"
> "85" "100"
> +	;;

Why wlan1? Is this chosen arbitrarily (than please drop the default setup), or is the vendor really also using only one specific radio for the RSSI leds?

Best

Adrian

>  zbtlink,zbt-we1226)
>  	ucidef_set_led_netdev "wifi_led" "wifi" "green:wlan" "wlan0"
>  	ucidef_set_led_switch "lan1" "LAN1" "green:lan1" "switch0" "0x01"
> diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> index 5ce44d0e9b..d61a60591c 100644
> --- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> +++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
> @@ -46,7 +46,8 @@ ramips_setup_interfaces()
>  		;;
>  	buffalo,wcr-1166ds|\
>  	elecom,wrc-1167fs|\
> -	wavlink,wl-wn577a2)
> +	wavlink,wl-wn577a2|\
> +	wavlink,wl-wn578a2)
>  		ucidef_add_switch "switch0" \
>  			"3:lan" "4:wan" "6@eth0"
>  		;;
> @@ -168,7 +169,8 @@ ramips_setup_macs()
>  		;;
>  	cudy,wr1000|\
>  	hilink,hlk-7688a|\
> -	wavlink,wl-wn577a2)
> +	wavlink,wl-wn577a2|\
> +	wavlink,wl-wn578a2)
>  		wan_mac=$(mtd_get_mac_binary factory 0x2e)
>  		label_mac=$(mtd_get_mac_binary factory 0x4)
>  		;;
> --
> 2.31.1
> 
> 
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
Thomas Aldrian April 26, 2021, 6:41 p.m. UTC | #2
On Sun, 2021-04-25 at 22:27 +0200, Adrian Schmutzler wrote:
> Why wlan1? Is this chosen arbitrarily (than please drop the default
> setup), or is the vendor really also using only one specific radio
> for the RSSI leds?
> 
> Best
> 
> Adrian

Hi Adrian,

The stock firmware does use some sort of RSSI LEDs, but I was unable to
properly test this. The choice of wlan1 is rather arbitrary, yes. I
would have changed the default config to use both radios as this makes
the most sense to me, but I am unsure how to do so. Is there a way to
set both? or should I drop the rssileds setup entirely?

As for the other changes, I will send a new patch soon.

Best,
Thomas
>
Adrian Schmutzler April 26, 2021, 8:10 p.m. UTC | #3
Hi,

> -----Original Message-----
> From: Thomas Aldrian [mailto:dev.aldrian@gmail.com]
> Sent: Montag, 26. April 2021 20:41
> To: Adrian Schmutzler <mail@adrianschmutzler.de>; openwrt-
> devel@lists.openwrt.org
> Subject: Re: [PATCH] ramips: add support for Wavlink WL-WN578A2
> 
> On Sun, 2021-04-25 at 22:27 +0200, Adrian Schmutzler wrote:
> > Why wlan1? Is this chosen arbitrarily (than please drop the default
> > setup), or is the vendor really also using only one specific radio for
> > the RSSI leds?
> >
> > Best
> >
> > Adrian
> 
> Hi Adrian,
> 
> The stock firmware does use some sort of RSSI LEDs, but I was unable to
> properly test this. The choice of wlan1 is rather arbitrary, yes. I would have
> changed the default config to use both radios as this makes the most sense
> to me, but I am unsure how to do so. Is there a way to set both? or should I
> drop the rssileds setup entirely?

Linking one set of LEDs to two interfaces is not possible (with usual means).

In cases like this, I typically prefer to drop the setup, since anything else is likely to cause confusion to the users.

Anybody who wants to configure rssileds can still do it, with the added benefit that he will know what he configured afterwards.

Best

Adrian

> 
> As for the other changes, I will send a new patch soon.
> 
> Best,
> Thomas
> >
diff mbox series

Patch

diff --git a/target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts b/target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts
new file mode 100644
index 0000000000..69a54c297b
--- /dev/null
+++ b/target/linux/ramips/dts/mt7628an_wavlink_wl-wn578a2.dts
@@ -0,0 +1,165 @@ 
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "mt7628an.dtsi"
+
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+	compatible = "wavlink,wl-wn578a2", "mediatek,mt7628an-soc";
+	model = "Wavlink WL-WN578A2";
+
+	aliases {
+		led-boot = &led_wps;
+		led-failsafe = &led_wps;
+		led-running = &led_wps;
+		led-upgrade = &led_wps;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			gpios = <&gpio 43 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_RESTART>;
+		};
+
+		wps {
+			label = "wps";
+			gpios = <&gpio 38 GPIO_ACTIVE_LOW>;
+			linux,code = <KEY_WPS_BUTTON>;
+		};
+
+		ap {
+			label = "ap";
+			gpios = <&gpio 41 GPIO_ACTIVE_LOW>;
+			linux,code = <BTN_0>;
+			linux,input-type = <EV_SW>;
+		};
+
+		repeater {
+			label = "repeater";
+			gpios = <&gpio 42 GPIO_ACTIVE_LOW>;
+			linux,code = <BTN_1>;
+			linux,input-type = <EV_SW>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		wifi-high {
+			label = "green:wifi-high";
+			gpios = <&gpio 37 GPIO_ACTIVE_LOW>;
+		};
+
+		wifi-med {
+			label = "green:wifi-med";
+			gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+		};
+
+		wifi-low {
+			label = "green:wifi-low";
+			gpios = <&gpio 44 GPIO_ACTIVE_LOW>;
+		};
+
+		lan {
+			label = "green:lan";
+			gpios = <&gpio 40 GPIO_ACTIVE_LOW>;
+		};
+
+		wan {
+			label = "green:wan";
+			gpios = <&gpio 39 GPIO_ACTIVE_LOW>;
+		};
+
+		led_wps: wps {
+			label = "green:wps";
+			gpios = <&gpio 4 GPIO_ACTIVE_LOW>;
+		};
+	};
+};
+
+&state_default {
+	gpio {
+		groups = "i2c", "wdt", "wled_an", "p0led_an", "p1led_an", "p2_led", "p3led_an", "p4led_an", "refclk";
+		function = "gpio";
+	};
+};
+
+&pcie {
+	status = "okay";
+};
+
+&pcie0 {
+	mt76@0,0 {
+		reg = <0x0000 0 0 0 0>;
+		mediatek,mtd-eeprom = <&factory 0x8000>;
+		ieee80211-freq-limit = <5000000 6000000>;
+	};
+};
+
+&spi0 {
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <40000000>;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			partition@0 {
+				label = "u-boot";
+				reg = <0x0 0x30000>;
+				read-only;
+			};
+
+			partition@30000 {
+				label = "u-boot-env";
+				reg = <0x30000 0x10000>;
+				read-only;
+			};
+
+			factory: partition@40000 {
+				label = "factory";
+				reg = <0x40000 0x10000>;
+				read-only;
+			};
+
+			partition@50000 {
+				compatible = "denx,uimage";
+				label = "firmware";
+				reg = <0x50000 0x7b0000>;
+			};
+		};
+	};
+};
+
+&wmac {
+	status = "okay";
+};
+
+&ethernet {
+	mtd-mac-address = <&factory 0x28>;
+};
+
+&esw {
+	mediatek,portmap = <0x2f>;
+};
+
+&usbphy {
+	status = "disabled";
+};
+
+&ehci {
+	status = "disabled";
+};
+
+&ohci {
+	status = "disabled";
+};
diff --git a/target/linux/ramips/image/mt76x8.mk b/target/linux/ramips/image/mt76x8.mk
index d5a9684dba..79221239e9 100644
--- a/target/linux/ramips/image/mt76x8.mk
+++ b/target/linux/ramips/image/mt76x8.mk
@@ -733,6 +733,16 @@  define Device/wavlink_wl-wn577a2
 endef
 TARGET_DEVICES += wavlink_wl-wn577a2
 
+define Device/wavlink_wl-wn578a2
+  IMAGE_SIZE := 7872k
+  DEVICE_VENDOR := Wavlink
+  DEVICE_MODEL := WL-WN578A2
+  DEVICE_ALT0_VENDOR := SilverCrest
+  DEVICE_ALT0_MODEL := SWV 733 A2
+  DEVICE_PACKAGES := rssileds kmod-mt76x0e
+endef
+TARGET_DEVICES += wavlink_wl-wn578a2
+
 define Device/widora_neo-16m
   IMAGE_SIZE := 16064k
   DEVICE_VENDOR := Widora
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
index fdef158ea8..00093a7cd7 100644
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/01_leds
@@ -133,6 +133,14 @@  wavlink,wl-wn577a2)
 	ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x8"
 	ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x10"
 	;;
+wavlink,wl-wn578a2)
+	ucidef_set_led_switch "lan" "lan" "green:lan" "switch0" "0x8"
+	ucidef_set_led_switch "wan" "wan" "green:wan" "switch0" "0x10"
+	ucidef_set_rssimon "wlan1" "200000" "1"
+	ucidef_set_led_rssi "wifi-low" "wifi-low" "green:wifi-low" "wlan1" "1" "49"
+	ucidef_set_led_rssi "wifi-med" "wifi-med" "green:wifi-med" "wlan1" "50" "84"
+	ucidef_set_led_rssi "wifi-high" "wifi-high" "green:wifi-high" "wlan1" "85" "100"
+	;;
 zbtlink,zbt-we1226)
 	ucidef_set_led_netdev "wifi_led" "wifi" "green:wlan" "wlan0"
 	ucidef_set_led_switch "lan1" "LAN1" "green:lan1" "switch0" "0x01"
diff --git a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
index 5ce44d0e9b..d61a60591c 100644
--- a/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/mt76x8/base-files/etc/board.d/02_network
@@ -46,7 +46,8 @@  ramips_setup_interfaces()
 		;;
 	buffalo,wcr-1166ds|\
 	elecom,wrc-1167fs|\
-	wavlink,wl-wn577a2)
+	wavlink,wl-wn577a2|\
+	wavlink,wl-wn578a2)
 		ucidef_add_switch "switch0" \
 			"3:lan" "4:wan" "6@eth0"
 		;;
@@ -168,7 +169,8 @@  ramips_setup_macs()
 		;;
 	cudy,wr1000|\
 	hilink,hlk-7688a|\
-	wavlink,wl-wn577a2)
+	wavlink,wl-wn577a2|\
+	wavlink,wl-wn578a2)
 		wan_mac=$(mtd_get_mac_binary factory 0x2e)
 		label_mac=$(mtd_get_mac_binary factory 0x4)
 		;;