ramips: add support for ALFA Network R36M-E4G
authorPiotr Dymacz <pepe2k@gmail.com>
Tue, 29 Oct 2019 23:10:40 +0000 (00:10 +0100)
committerPiotr Dymacz <pepe2k@gmail.com>
Sun, 24 Nov 2019 20:45:27 +0000 (21:45 +0100)
ALFA Network R36M-E4G is a dual-SIM, N300 Wi-Fi, compact size platform
based on MediaTek MT7620A WiSoC. This product is designed for operation
with 4G modem (can be bought in bundle with Quectel EC25, EG25 or EP06)
but supports also Wi-Fi modules (miniPCIe slot has USB and PCIe buses).

Specification:

- MT7620A (580 MHz)
- 64/128/256 MB of RAM (DDR2)
- 16/32+ MB of FLASH (SPI NOR)
- 2x 10/100 Mbps Ethernet, with passive PoE support (24 V)
- 2T2R 2.4 GHz (MT7620A), with ext. LNA (RFFM4227)
- 1x miniPCIe slot (with PCIe and USB 2.0 buses and optional 5 V)
- 2x SIM slot (mini, micro) with detect and switch driven by GPIO
- 2x u.fl antenna connectors (for Wi-Fi)
- 8x LED (7 driven by GPIO)
- 2x button (reset, wifi)
- 2x UART (4-pin/2.54 mm pitch, 10-pin/1.27 mm pitch) headers on PCB
- 1x I2C (4-pin, 1.27 mm pitch) header on PCB
- 1x LED (8-pin, 1.27 mm pitch) header on PCB
- 1x DC jack with lock (12 V)

Other:

- there is a dedicated, 4-pin connector for optional RTC module (Holtek
  HT138x) with 'enable' input, not available at the time of preparing
  support for this board
- miniPCIe slot supports additional 5 V supply on pins 47 and 49 but a
  jumper resistor (R174) is not installed by default
- U-Boot selects default SIM slot, based on value of 'default_sim' env
  variable: '1' or unset -> SIM1 (mini), '2' -> SIM2 (micro). This will
  work only if both slots are occupied, otherwise U-Boot will always
  select slot with SIM card inside (user can override it later, in
  user-space)
- U-Boot resets the modem, using PERSTn signal, before starting kernel
- this board supports 'dual image' feature (controlled by 'dual_image'
  U-Boot environment variable)

Flash instruction:

You can use the 'sysupgrade' image directly in vendor firmware which is
based on OpenWrt (make sure to not preserve settings - use 'sysupgrade
-n -F ...' command). Alternatively, use web recovery mode in U-Boot:

1. Power the device with reset button pressed, the modem LED will start
   blinking slowly and after ~3 seconds, when it starts blinking faster,
   you can release the button.
2. Setup static IP 192.168.1.2/24 on your PC.
3. Go to 192.168.1.1 in browser and upload 'sysupgrade' image.

Signed-off-by: Piotr Dymacz <pepe2k@gmail.com>
(backported from commit dfecf94c2059998411f95067de3866aa7cdf5ec9)

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/init.d/bootcount
target/linux/ramips/base-files/lib/upgrade/platform.sh
target/linux/ramips/dts/R36M-E4G.dts [new file with mode: 0644]
target/linux/ramips/image/mt7620.mk

index f5e914c518d311b9f8b4e2f4650a0841334ccce5..83cb88ad5c2d3e10d83c48bedaa574db969214ff 100755 (executable)
@@ -38,6 +38,11 @@ alfa-network,awusfree1|\
 edimax,br-6478ac-v2)
        set_wifi_led "$boardname:blue:wlan"
        ;;
+alfa-network,r36m-e4g)
+       ucidef_set_led_netdev "4g" "4g" "$boardname:orange:4g" "wwan0"
+       ucidef_set_led_switch "lan" "lan" "$boardname:green:lan" "switch0" "0x8"
+       ucidef_set_led_switch "wan" "wan" "$boardname:green:wan" "switch0" "0x10"
+       ;;
 alfa-network,tube-e4g)
        ucidef_set_led_netdev "4g" "4g" "$boardname:green:4g" "wwan0"
        ucidef_set_led_netdev "lan" "lan" "$boardname:blue:lan" "eth0"
index 95692327848c5c3dabdc0f8b6af1365e7a2cfe1e..f91a8248e5189af3c8409abb3f9cdac6e574a479 100755 (executable)
@@ -171,6 +171,11 @@ ramips_setup_interfaces()
        wrh-300cr)
                ucidef_set_interface_lan "eth0"
                ;;
+       alfa-network,r36m-e4g|\
+       wcr-1166ds)
+               ucidef_add_switch "switch0" \
+                       "3:lan" "4:wan" "6@eth0"
+               ;;
        dlink,dwr-118-a1)
                ucidef_add_switch "switch0" \
                        "1:lan:2" "2:lan:3" "3:lan:1" "4:lan:0" "5:wan" "6@eth0"
@@ -425,10 +430,6 @@ ramips_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "1:lan" "2:lan" "3:lan" "4:lan" "0:wan" "5@eth0"
                ;;
-       wcr-1166ds)
-               ucidef_add_switch "switch0" \
-                       "3:lan" "4:wan" "6@eth0"
-               ;;
        wcr-150gn|\
        we1026-5g-16m)
                ucidef_add_switch "switch0" \
@@ -500,6 +501,7 @@ ramips_setup_macs()
                lan_mac=$(mtd_get_mac_binary factory 57344)
                wan_mac=$(mtd_get_mac_binary factory 57350)
                ;;
+       alfa-network,r36m-e4g|\
        carambola|\
        freestation5|\
        w502u|\
index 12326de0e3ad3a49a81ecba44c78fd1297d2d411..251d8ddf65fbed9b48935b8f56a13413195fa739 100755 (executable)
@@ -8,6 +8,7 @@ start() {
        case $(board_name) in
        alfa-network,ac1200rm|\
        alfa-network,awusfree1|\
+       alfa-network,r36m-e4g|\
        alfa-network,tube-e4g)
                [ -n "$(fw_printenv bootcount bootchanged 2>/dev/null)" ] &&\
                        echo -e "bootcount\nbootchanged\n" | /usr/sbin/fw_setenv -s -
index eff2ba967cdcc7b8395b0ebcf260915d97503352..b2214e011336842638137cb33f141da26fb6cb78 100755 (executable)
@@ -41,6 +41,7 @@ platform_do_upgrade() {
        case "$board" in
        alfa-network,ac1200rm|\
        alfa-network,awusfree1|\
+       alfa-network,r36m-e4g|\
        alfa-network,tube-e4g)
                [ "$(fw_printenv -n dual_image 2>/dev/null)" = "1" ] &&\
                [ -n "$(find_mtd_part backup)" ] && {
diff --git a/target/linux/ramips/dts/R36M-E4G.dts b/target/linux/ramips/dts/R36M-E4G.dts
new file mode 100644 (file)
index 0000000..8d7d512
--- /dev/null
@@ -0,0 +1,217 @@
+// 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 = "alfa-network,r36m-e4g", "ralink,mt7620a-soc";
+       model = "ALFA Network R36M-E4G";
+
+       aliases {
+               led-boot = &led_system;
+               led-failsafe = &led_system;
+               led-running = &led_system;
+               led-upgrade = &led_system;
+       };
+
+       chosen {
+               bootargs = "console=ttyS1,115200";
+       };
+
+       gpio-export {
+               compatible = "gpio-export";
+               #size-cells = <0>;
+
+               modem-enable {
+                       gpio-export,name = "modem-enable";
+                       gpio-export,output = <1>;
+                       gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
+               };
+
+               modem-rf-enable {
+                       gpio-export,name = "modem-rf-enable";
+                       gpio-export,output = <1>;
+                       gpios = <&gpio1 1 GPIO_ACTIVE_HIGH>;
+               };
+
+               rtc-enable {
+                       gpio-export,name = "rtc-enable";
+                       gpio-export,output = <1>;
+                       gpio-export,direction_may_change = <1>;
+                       gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>;
+               };
+
+               sim-select {
+                       gpio-export,name = "sim-select";
+                       gpio-export,output = <0>;
+                       gpios = <&gpio1 0 GPIO_ACTIVE_HIGH>;
+               };
+
+               sim1-detect {
+                       gpio-export,name = "sim1-detect";
+                       gpios = <&gpio1 4 GPIO_ACTIVE_HIGH>;
+               };
+
+               sim2-detect {
+                       gpio-export,name = "sim2-detect";
+                       gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
+               };
+       };
+
+       keys {
+               compatible = "gpio-keys";
+
+               reset {
+                       label = "reset";
+                       gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RESTART>;
+               };
+
+               rfkill {
+                       label = "rfkill";
+                       gpios = <&gpio1 7 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_RFKILL>;
+               };
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               4g {
+                       label = "r36m-e4g:orange:4g";
+                       gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
+               };
+
+               lan {
+                       label = "r36m-e4g:green:lan";
+                       gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
+               };
+
+               led_system: system {
+                       label = "r36m-e4g:green:system";
+                       gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
+                       default-state = "keep";
+               };
+
+               sim1 {
+                       label = "r36m-e4g:green:sim1";
+                       gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
+                       default-state = "keep";
+               };
+
+               sim2 {
+                       label = "r36m-e4g:green:sim2";
+                       gpios = <&gpio2 2 GPIO_ACTIVE_LOW>;
+                       default-state = "keep";
+               };
+
+               wan {
+                       label = "r36m-e4g:green:wan";
+                       gpios = <&gpio2 4 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan {
+                       label = "r36m-e4g:orange:wlan";
+                       gpios = <&gpio3 0 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy0radio";
+               };
+       };
+};
+
+&ehci {
+       status = "okay";
+};
+
+&ethernet {
+       mtd-mac-address = <&factory 0x28>;
+};
+
+&gpio1 {
+       status = "okay";
+};
+
+&gpio2 {
+       status = "okay";
+};
+
+&gpio3 {
+       status = "okay";
+};
+
+&gsw {
+       mediatek,port4 = "ephy";
+};
+
+&i2c {
+       status = "okay";
+};
+
+&ohci {
+       status = "okay";
+};
+
+&pinctrl {
+       state_default: pinctrl0 {
+               gpio {
+                       ralink,group = "ephy", "pcie", "rgmii1", "wled";
+                       ralink,function = "gpio";
+               };
+       };
+};
+
+&spi0 {
+       status = "okay";
+
+       flash@0 {
+               compatible = "jedec,spi-nor";
+               reg = <0>;
+               spi-max-frequency = <50000000>;
+               m25p,fast-read;
+
+               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 0x1000>;
+                       };
+
+                       partition@31000 {
+                               label = "config";
+                               reg = <0x31000 0xf000>;
+                               read-only;
+                       };
+
+                       factory: partition@40000 {
+                               label = "factory";
+                               reg = <0x40000 0x10000>;
+                               read-only;
+                       };
+
+                       partition@50000 {
+                               compatible = "denx,uimage";
+                               label = "firmware";
+                               reg = <0x50000 0xfb0000>;
+                       };
+               };
+       };
+};
+
+&uart {
+       status = "okay";
+};
+
+&wmac {
+       ralink,mtd-eeprom = <&factory 0>;
+};
index dc1fa09fe07fb1c108a423212288830d23e2ad62..fff10425a7fdfeebaa749cdfb165891076d6df33 100644 (file)
@@ -51,6 +51,14 @@ define Device/alfa-network_ac1200rm
 endef
 TARGET_DEVICES += alfa-network_ac1200rm
 
+define Device/alfa-network_r36m-e4g
+  DTS := R36M-E4G
+  IMAGE_SIZE := 16064k
+  DEVICE_TITLE := ALFA Network R36M-E4G
+  DEVICE_PACKAGES := kmod-i2c-ralink kmod-usb2 kmod-usb-ohci uboot-envtools uqmi
+endef
+TARGET_DEVICES += alfa-network_r36m-e4g
+
 define Device/alfa-network_tube-e4g
   DTS := TUBE-E4G
   IMAGE_SIZE := 16064k