ramips: Add support for Head Weblink HDRM200
authorKristian Evensen <kristian.evensen@gmail.com>
Wed, 15 May 2019 18:50:45 +0000 (20:50 +0200)
committerPetr Štetiar <ynezz@true.cz>
Fri, 17 May 2019 19:41:43 +0000 (21:41 +0200)
Head Weblink HDRM200 is a dual-sim router based on MT7620A. The detailed
specifications are:

- MT7620A (580MHz)
- 64MB RAM
- 16MB of flash (SPI NOR)
- 6x 10/100Mbps Ethernet (MT7620A built-in switch)
- 1x microSD slot
- 1x miniPCIe slot (only USB2.0 bus). Device is shipped with a SIMCOM
SIM7100E LTE modem.
- 2x SIM slots (standard size)
- 1x USB2.0 port
- 1x 2.4GHz wifi (rt2800)
- 1x 5GHz wifi (mt7612)
- 1x reset button
- 1x WPS button
- 3x GPIO-controllable LEDs
- 1x 10 pin terminal block (RS232, RS485, 4 x GPIO)

Tested:
- Ethernet switch
- Wifi
- USB slot
- SD card slot
- miniPCIe-slot
- sysupgrade
- reset button

Installation instructions:

Installing OpenWRT for the first time requires a bit of work, as the
board does not ship with OpenWRT. In addition, the bootloader
automatically reboots when installing an image over tftp. In order to
install OpenWRT on the HDRM200, you need to do the following:

* Copy the initramfs-image to your tftp-root (default filename is
test.bin) and configure networking accordingly (default server IP is
10.10.10.3, client 10.10.10.123). Start your tftp server.
* Open the board and connect to UART. The pins are exposed and clearly
marked.
* Boot the board and press 1.
* Either use the default filename and client/server IP-addresses, or
specify your own.

The image should now be loaded to memory and board boot. If the router
reboots while the image is loading, you need to try again. Once the
board has booted, copy the sysupgrade-image to the router and run
sysupgrade in order to install OpenWRT to the flash.

Notes:

- You control which SIM slot to use by writing 0/1 to
/sys/class/gpio/gpio0/value. In order for the change to take
effect, you can either use AT-commands (AT+CFUN) or power-cycle the
modem (write 0/1 to /sys/class/gpio/gpio21/value).
- RS485 is available on /dev/ttyS0.
- RS232 is available on /dev/ttyS1.
- The name of the ioX-gpios map to the labels on the casing.

Signed-off-by: Kristian Evensen <kristian.evensen@gmail.com>
[fixed whitespace issue and merge conflict in target.mk]
Signed-off-by: Petr Štetiar <ynezz@true.cz>
target/linux/ramips/base-files/etc/board.d/01_leds
target/linux/ramips/base-files/etc/board.d/02_network
target/linux/ramips/base-files/etc/board.d/03_gpio_switches
target/linux/ramips/dts/HDRM200.dts [new file with mode: 0644]
target/linux/ramips/image/mt7620.mk
target/linux/ramips/mt7620/target.mk

index fa20ab0714c96cc08a463c74a33201b11c01b64e..9d42720c600938cc108341efdb058acfbe31053f 100755 (executable)
@@ -119,6 +119,7 @@ dir-615-h1)
        ;;
 dir-620-d1|\
 dlink,dwr-116-a1|\
+head-weblink,hdrm200|\
 mzk-ex300np)
        set_wifi_led "$boardname:green:wifi"
        ;;
index c2646876a27c145241dd91294dd58076ce639ea7..b0037a0ce21e71bd4b5585993fe42fdf0190871e 100755 (executable)
@@ -314,6 +314,7 @@ ramips_setup_interfaces()
                        "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "6@eth0"
                ;;
        hc5661|\
+       head-weblink,hdrm200|\
        y1s)
                ucidef_add_switch "switch0" \
                        "1:lan" "2:lan" "3:lan" "4:lan" "5:lan" "0:wan" "6@eth0"
index 80e3c4c41f0378b290d1b754c812e349b7c2a02e..fc376a4d1faca435993f84f9de173a260ab08857 100755 (executable)
@@ -11,6 +11,14 @@ dlink,dir-510l)
        ucidef_add_gpio_switch "usb_enable1" "USB 1A enable" "12" "0"
        ucidef_add_gpio_switch "usb_enable05" "USB 0.5A enable" "13" "1"
        ;;
+head-weblink,hdrm200)
+       ucidef_add_gpio_switch "sim_switch" "SIM slot switch" "0"
+       ucidef_add_gpio_switch "io1" "I/O 1" "1"
+       ucidef_add_gpio_switch "io2" "I/O 2" "2"
+       ucidef_add_gpio_switch "io3" "I/O 3" "11"
+       ucidef_add_gpio_switch "io4" "I/O 4" "14"
+       ucidef_add_gpio_switch "power_mpcie" "mPCIe power" "21" "1"
+       ;;
 mikrotik,rb750gr3)
        ucidef_add_gpio_switch "poe_passthrough" "PoE Passthrough" "17"
        ;;
diff --git a/target/linux/ramips/dts/HDRM200.dts b/target/linux/ramips/dts/HDRM200.dts
new file mode 100644 (file)
index 0000000..ad16d02
--- /dev/null
@@ -0,0 +1,188 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "mt7620a.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+       compatible = "head-weblink,hdrm200", "ralink,mt7620a-soc";
+       model = "Head Weblink HDRM200";
+
+       aliases {
+               led-boot = &led_system;
+               led-failsafe = &led_system;
+               led-running = &led_system;
+               led-upgrade = &led_system;
+       };
+
+       chosen {
+               bootargs = "console=ttyS1,57600";
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               rssi {
+                       label = "hdrm200:red:rssi";
+                       gpios = <&gpio0 19 GPIO_ACTIVE_LOW>;
+               };
+
+               led_system: system {
+                       label = "hdrm200:green:system";
+                       gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>;
+               };
+
+               air {
+                       label = "hdrm200:green:wifi";
+                       gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys-polled";
+               poll-interval = <20>;
+
+               wps {
+                       label = "wps";
+                       gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_WPS_BUTTON>;
+               };
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <10000000>;
+
+               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;
+                       };
+
+                       firmware: partition@50000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x50000 0xfb0000>;
+                       };
+               };
+       };
+};
+
+&gpio0 {
+       status = "okay";
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&gpio3 {
+       status = "okay";
+};
+
+&sdhci {
+       status = "okay";
+};
+
+&ehci {
+       status = "okay";
+};
+
+&ohci {
+       status = "okay";
+};
+
+&ethernet {
+       status = "okay";
+
+       mtd-mac-address = <&factory 0x4>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&rgmii1_pins &rgmii2_pins &mdio_pins>;
+
+       port@4 {
+               status = "okay";
+               phy-handle = <&phy4>;
+               phy-mode = "rgmii";
+       };
+
+       port@5 {
+               status = "okay";
+               phy-handle = <&phy5>;
+               phy-mode = "rgmii";
+       };
+
+       mdio-bus {
+               status = "okay";
+
+               phy4: ethernet-phy@4 {
+                       reg = <4>;
+                       phy-mode = "rgmii";
+               };
+
+               phy5: ethernet-phy@5 {
+                       reg = <5>;
+                       phy-mode = "rgmii";
+               };
+       };
+};
+
+&wmac {
+       ralink,mtd-eeprom = <&factory 0>;
+};
+
+&pinctrl {
+       state_default: pinctrl0 {
+               default {
+                       ralink,group = "i2c", "uartf", "pa", "spi refclk",
+                                      "wled";
+                       ralink,function = "gpio";
+               };
+       };
+};
+
+&pcie {
+       status = "okay";
+};
+
+&pcie0 {
+       wifi@0,0 {
+               compatible = "mediatek,mt76";
+               reg = <0x0000 0 0 0 0>;
+               mediatek,mtd-eeprom = <&factory 0x8000>;
+               ieee80211-freq-limit = <5000000 6000000>;
+       };
+};
+
+&uart {
+    status = "okay";
+};
index da90568df0de9860af2ed5d64206df2291f38198..bad92ca0b9e4cf538f83f2213ac5babb789c8f1e 100644 (file)
@@ -358,6 +358,15 @@ define Device/hc5861
 endef
 TARGET_DEVICES += hc5861
 
+define Device/head-weblink_hdrm200
+  DTS := HDRM200
+  IMAGE_SIZE := 16064k
+  DEVICE_TITLE := Head Weblink HDRM2000
+  DEVICE_PACKAGES := kmod-mt76x2 kmod-usb2 kmod-usb-ohci kmod-sdhci-mt7620 \
+                    uqmi kmod-usb-serial kmod-usb-serial-option
+endef
+TARGET_DEVICES += head-weblink_hdrm200
+
 define Device/iodata_wn-ac1167gr
   DTS := WN-AC1167GR
   DEVICE_TITLE := I-O DATA WN-AC1167GR
index 788c9a1dfc1a7a831c9f09337cdd2f219b35aa0a..f3d450edf4aba37690b6faaa09f3735b0c875bc2 100644 (file)
@@ -4,7 +4,7 @@
 
 SUBTARGET:=mt7620
 BOARDNAME:=MT7620 based boards
-FEATURES+=usb
+FEATURES+=usb ramdisk
 CPU_TYPE:=24kc
 
 DEFAULT_PACKAGES += kmod-rt2800-soc wpad-basic