ath79: add support for Teltonika RUT955 H7V3C0
authorDaniel Golle <daniel@makrotopia.org>
Wed, 29 Apr 2020 19:59:04 +0000 (20:59 +0100)
committerDaniel Golle <daniel@makrotopia.org>
Wed, 29 Apr 2020 20:32:35 +0000 (21:32 +0100)
This board was previously supported in ar71xx as 'RUT9XX'. The
difference between that and the other RUT955 board already supported in
ath79 is that instead of the SPI shift registers driving the LEDs and
digital outputs that model got an I2C GPIO expander instead.

To support LEDs during early boot and interrupt-driven digital inputs,
I2C support as well as support for PCA953x has to be built-in and
cannot be kernel modules, hence select those symbols for ath79/generic.

Specification:

- 550/400/200 MHz (CPU/DDR/AHB)
- 128 MB of RAM (DDR2)
- 16 MB of FLASH (SPI NOR)
- 4x 10/100 Mbps Ethernet, with passive PoE support on LAN1
- 2T2R 2,4 GHz (AR9344)
- built-in 4G/3G module (example: Quectel EC-25EU)
- internal microSD slot (spi-mmc, buggy and disabled for now)
- RS232 on D-Sub9 port (Cypress ACM via USB, /dev/ttyACM0)
- RS422/RS485 (AR934x high speed UART, /dev/ttyATH1)
- analog 0-24V input (MCP3221)
- various digital inputs and outputs incl. a relay
- 11x LED (4 are driven by AR9344, 7 by PCA9539)
- 2x miniSIM slot (can be swapped via GPIO)
- 2x RP-SMA/F (Wi-Fi), 3x SMA/F (2x WWAN, GPS)
- 1x button (reset)
- DC jack for main power input (9-30 V)
- debugging UART available on PCB edge connector

Serial console (/dev/ttyS0) pinout:

- RX: pin1 (square) on top side of the main PCB (AR9344 is on top)
- TX: pin1 (square) on bottom side

Flash instruction:

Vendor firmware is based on OpenWrt CC release. Use the "factory" image
directly in GUI (make sure to uncheck "keep settings") or in U-Boot web
based recovery. To avoid any problems, make sure to first update vendor
firmware to latest version - "factory" image was successfully tested on
device running "RUT9XX_R_00.06.051" firmware and U-Boot "3.0.1".

Signed-off-by: Daniel Golle <daniel@makrotopia.org>
target/linux/ath79/dts/ar9344_teltonika_rut955-h7v3c0.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/board.d/03_gpio_switches
target/linux/ath79/generic/config-default
target/linux/ath79/image/generic.mk

diff --git a/target/linux/ath79/dts/ar9344_teltonika_rut955-h7v3c0.dts b/target/linux/ath79/dts/ar9344_teltonika_rut955-h7v3c0.dts
new file mode 100644 (file)
index 0000000..426c6ac
--- /dev/null
@@ -0,0 +1,197 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include "ar9344_teltonika_rut9xx.dtsi"
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       model = "Teltonika RUT955 H7V3C0";
+       compatible = "teltonika,rut955-h7v3c0", "teltonika,rut9xx", "qca,ar9344";
+
+       aliases {
+               led-boot = &led_system_green;
+               led-failsafe = &led_system_red;
+               led-running = &led_system_green;
+               led-upgrade = &led_system_red;
+       };
+
+       leds {
+               compatible = "gpio-leds";
+
+               signal0 {
+                       label = "rut955:green:signal0";
+                       gpios = <&gpio_ext 0 GPIO_ACTIVE_HIGH>;
+               };
+
+               signal1 {
+                       label = "rut955:green:signal1";
+                       gpios = <&gpio_ext 1 GPIO_ACTIVE_HIGH>;
+               };
+
+               signal2 {
+                       label = "rut955:green:signal2";
+                       gpios = <&gpio_ext 2 GPIO_ACTIVE_HIGH>;
+               };
+
+               signal3 {
+                       label = "rut955:green:signal3";
+                       gpios = <&gpio_ext 3 GPIO_ACTIVE_HIGH>;
+               };
+
+               signal4 {
+                       label = "rut955:green:signal4";
+                       gpios = <&gpio_ext 4 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_system_red: system_red {
+                       label = "rut955:red:system";
+                       gpios = <&gpio_ext 5 GPIO_ACTIVE_HIGH>;
+               };
+
+               led_system_green: system_green {
+                       label = "rut955:green:system";
+                       gpios = <&gpio_ext 6 GPIO_ACTIVE_HIGH>;
+                       default-state = "on";
+               };
+       };
+};
+
+&gpio {
+       pinctrl-names = "default";
+       pinctrl-0 = <&jtag_disable_pins>;
+
+       gpio-line-names = "RS485_D", "led_wan", "wmac_lna", "mmc_cs",
+               "EXT_INT", "", "", "",
+               "", "", "", "",
+               "", "led_lan2", "led_lan1", "",
+               "i2c_scl", "i2c_sda", "", "",
+               "", "", "led_lan3", "",
+               "", "", "", "",
+               "", "", "", "";
+
+       ext_lna {
+               gpio-hog;
+               gpios = <2 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:wmac:ext_lna";
+       };
+
+       mmc_cs {
+               gpio-hog;
+               gpios = <3 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:mmc:cs";
+       };
+
+       ext_int {
+               gpio-hog;
+               gpios = <4 GPIO_ACTIVE_LOW>;
+               input;
+               line-name = "rut955:ext:int";
+       };
+
+       uart1_td {
+               gpio-hog;
+               gpios = <18 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:uart1:td";
+       };
+
+       uart1_rd {
+               gpio-hog;
+               gpios = <11 GPIO_ACTIVE_LOW>;
+               input;
+               line-name = "rut955:uart1:rd";
+       };
+
+       led_wan {
+               gpio-hog;
+               gpios = <1 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:led:wan";
+       };
+
+       led_lan2 {
+               gpio-hog;
+               gpios = <13 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:led:lan2";
+       };
+
+       led_lan1 {
+               gpio-hog;
+               gpios = <14 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:led:lan1";
+       };
+
+       led_lan3 {
+               gpio-hog;
+               gpios = <22 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "rut955:led:lan3";
+       };
+};
+
+&i2c0 {
+       gpio_ext: gpio_ext@74 {
+               status = "okay";
+
+               compatible = "nxp,pca9539";
+               reg = <0x74>;
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               gpio-controller;
+               #gpio-cells = <2>;
+
+               reset-gpios = <&gpio 21 GPIO_ACTIVE_HIGH>;
+
+               interrupt-parent = <&gpio>;
+               interrupts = <4 IRQ_TYPE_EDGE_FALLING>;
+               interrupt-controller;
+               #interrupt-cells = <2>;
+
+               gpio-line-names = "signal_bar0", "signal_bar1", "signal_bar2", "signal_bar3",
+                       "signal_bar4", "status_red", "status_green", "sim_sel",
+                       "DOUT1", "DOUT2", "DIN2", "DIN1",
+                       "MON", "MRST", "SDCD", "RS485_R";
+       };
+};
+
+&hs_uart {
+       dtr-gpios = <&gpio_ext 15 GPIO_ACTIVE_HIGH>;
+}
+
+&eth0 {
+       status = "okay";
+
+       phy-handle = <&swphy4>;
+
+       mtd-mac-address = <&config 0x0>;
+       mtd-mac-address-increment = <1>;
+};
+
+&eth1 {
+       status = "okay";
+
+       mtd-mac-address = <&config 0x0>;
+};
+
+&builtin_switch {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pmx_leds_switch>;
+};
+
+&wmac {
+       pinctrl-names = "default";
+       pinctrl-0 = <&pmx_ext_lna>;
+};
+
+&pinmux {
+       pmx_ext_lna: ext_lna {
+               // EXT_LNA0 on GPIO 2
+               pinctrl-single,bits = <0x0 0x002e0000 0x00ff0000>;
+       };
+};
index d7f7eed82978893b7aaba34958be307c76a54340..9768e4e07604e0e7bb6408d1559eb171ed4bd66f 100755 (executable)
@@ -228,7 +228,8 @@ ath79_setup_interfaces()
                ucidef_add_switch "switch0" \
                        "0@eth0" "1:lan" "2:lan" "3:wan"
                ;;
-       teltonika,rut955)
+       teltonika,rut955|\
+       teltonika,rut955-h7v3c0)
                ucidef_set_interface_wan "eth1"
                ucidef_add_switch "switch0" \
                        "0@eth0" "2:lan:3" "3:lan:2" "4:lan:1"
index 051c468f87bbdc645d6baf9e60ceed37086617b4..66b2a3e1d8ba47d532d4368587e21d500e499f55 100755 (executable)
@@ -50,6 +50,14 @@ teltonika,rut955)
        ucidef_add_gpio_switch "modem_rst" "Modem reset" "507" "0"
        ucidef_add_gpio_switch "DOUT3" "DOUT3" "508" "0"
        ;;
+teltonika,rut955-h7v3c0)
+       ucidef_add_gpio_switch "sim_sel" "SIM select" "503" "1"
+       ucidef_add_gpio_switch "DOUT1" "DOUT1 (OC)" "504" "0"
+       ucidef_add_gpio_switch "DOUT2" "DOUT2 (Relay)" "505" "0"
+       ucidef_add_gpio_switch "modem_vbus" "Modem enable" "508" "1"
+       ucidef_add_gpio_switch "modem_rst" "Modem reset" "509" "0"
+       ;;
+
 tplink,archer-c25-v1)
        ucidef_add_gpio_switch "led_control" "LED control" "21" "0"
        ucidef_add_gpio_switch "led_reset" "LED reset" "19" "1"
index 5459bafd7d5e3b03e5fc3ad81f10656c8f7aca62..d49df6bbee95f6e38f1e0ad393ba60bed2c77d60 100644 (file)
@@ -1,8 +1,14 @@
 CONFIG_AT803X_PHY=y
 CONFIG_BCM_NET_PHYLIB=y
 CONFIG_BROADCOM_PHY=y
+CONFIG_GPIO_PCA953X=y
+CONFIG_GPIO_PCA953X_IRQ=y
 CONFIG_GPIO_WATCHDOG=y
 CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y
+CONFIG_I2C=y
+CONFIG_I2C_ALGOBIT=y
+CONFIG_I2C_CHARDEV=y
+CONFIG_I2C_GPIO=y
 CONFIG_INTEL_XWAY_PHY=y
 CONFIG_IP17XX_PHY=y
 CONFIG_LEDS_RESET=y
index 321615f014755b63b18d3f01f53719699275a117..8d8767ddf6bcb562d0c12570a5849d0cad8b650d 100644 (file)
@@ -1158,6 +1158,12 @@ define Device/teltonika_rut955
 endef
 TARGET_DEVICES += teltonika_rut955
 
+define Device/teltonika_rut955-h7v3c0
+  $(Device/teltonika_rut955)
+  DEVICE_VARIANT := H7V3C0
+endef
+TARGET_DEVICES += teltonika_rut955-h7v3c0
+
 define Device/trendnet_tew-823dru
   SOC := qca9558
   DEVICE_VENDOR := Trendnet