ath79: add support for AVM FRITZ!WLAN Repeater DVB-C
authorNatalie Kagelmacher <nataliek@pm.me>
Thu, 14 May 2020 08:44:21 +0000 (10:44 +0200)
committerDavid Bauer <mail@david-bauer.net>
Thu, 25 Jun 2020 00:35:35 +0000 (02:35 +0200)
This commit adds support for the AVM FRITZ!WLAN Repeater DVB-C

SOC:   Qualcomm Atheros QCA9556
RAM:   64 MiB
FLASH: 16 MB SPI-NOR
WLAN:  QCA9556 3T3R 2.4 GHZ b/g/n and
       QCA9880 3T3R 5 GHz n/ac
ETH:   Atheros AR8033 1000 Base-T
DVB-C: EM28174 with MaxLinear MXL251 tuner
BTN:   WPS Button
LED:   Power, WLAN, TV, RSSI0-4

Tested and working:
 - Ethernet (correct MAC, gigabit, iperf3 about 200 Mbit/s)
 - 2.4 GHz Wi-Fi (correct MAC)
 - 5 GHz Wi-Fi (correct MAC)
 - WPS Button (tested using wifitoggle)
 - LEDs
 - Installation via EVA bootloader (FTP recovery)
 - OpenWrt sysupgrade (both CLI and LuCI)
 - Download of "urlader" (mtd0)

Not working:
 - Internal USB
 - DVB-C em28174+MxL251 (depends on internal USB)

Installation via EVA bootloader (FTP recovery):
Set NIC to 192.168.178.3/24 gateway 192.168.178.1 and power on the device,
connect to 192.168.178.1 through FTP and sign in with adam2/adam2:

ftp> quote USER adam2
ftp> quote PASS adam2
ftp> binary
ftp> debug
ftp> passive
ftp> quote MEDIA FLSH
ftp> put openwrt-sysupgrade.bin mtd1

Wait for "Transfer complete" together with the transfer details.
Wait two minutes to make sure flash is complete (just to be safe).

Then restart the device (power off and on) to boot into OpenWrt.
Revert your NIC settings to reach OpenWrt at 192.168.1.1

Signed-off-by: Natalie Kagelmacher <nataliek@pm.me>
[fixed sorting - removed change to other board -
prettified commit message]
Signed-off-by: David Bauer <mail@david-bauer.net>
target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts [new file with mode: 0644]
target/linux/ath79/generic/base-files/etc/board.d/01_leds
target/linux/ath79/generic/base-files/etc/board.d/02_network
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh
target/linux/ath79/image/generic.mk

diff --git a/target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts b/target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts
new file mode 100644 (file)
index 0000000..28b19f9
--- /dev/null
@@ -0,0 +1,111 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qca9556_avm_fritz-repeater.dtsi"
+
+/ {
+       compatible = "avm,fritzdvbc", "qca,qca9556";
+       model = "AVM FRITZ!WLAN Repeater DVB-C";
+
+       aliases {
+               led-boot = &led_power;
+               led-failsafe = &led_power;
+               led-running = &led_power;
+               led-upgrade = &led_power;
+       };
+
+       led_spi {
+               compatible = "spi-gpio";
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               sck-gpios = <&gpio 14 GPIO_ACTIVE_LOW>;
+               mosi-gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
+               num-chipselects = <0>;
+
+               spi_gpio: led_gpio@0 {
+                       compatible = "fairchild,74hc595";
+                       reg = <0>;
+                       gpio-controller;
+                       #gpio-cells = <2>;
+                       registers-number = <2>;
+                       spi-max-frequency = <10000000>;
+
+                       gpio_latch_bit {
+                               gpio-hog;
+                               gpios = <16 GPIO_ACTIVE_HIGH>;
+                               output-high;
+                               line-name = "gpio-latch-bit";
+                       };
+               };
+       };
+
+       /*
+        * GPIO pins 100 or greater in the vendor GPL dump are redirected
+        * to the shift register.
+        * So OEM source pin 100 becomes 0 on the SR and so forth.
+        */
+       leds {
+               compatible = "gpio-leds";
+
+               led_power: power {
+                       label = "fritzdvbc:green:power";
+                       gpios = <&spi_gpio 6 GPIO_ACTIVE_LOW>;
+               };
+
+               wlan {
+                       label = "fritzdvbc:green:wlan";
+                       gpios = <&spi_gpio 7 GPIO_ACTIVE_LOW>;
+                       linux,default-trigger = "phy1tpt";
+               };
+
+               tv {
+                       label = "fritzdvbc:green:tv";
+                       gpios = <&spi_gpio 5 GPIO_ACTIVE_LOW>;
+               };
+
+               rssihigh {
+                       label = "fritzdvbc:green:rssihigh";
+                       gpios = <&spi_gpio 1 GPIO_ACTIVE_LOW>;
+               };
+
+               rssimediumhigh {
+                       label = "fritzdvbc:green:rssimediumhigh";
+                       gpios = <&spi_gpio 2 GPIO_ACTIVE_LOW>;
+               };
+
+               rssimedium {
+                       label = "fritzdvbc:green:rssimedium";
+                       gpios = <&spi_gpio 3 GPIO_ACTIVE_LOW>;
+               };
+
+               rssimediumlow {
+                       label = "fritzdvbc:green:rssimediumlow";
+                       gpios = <&spi_gpio 4 GPIO_ACTIVE_LOW>;
+               };
+
+               rssilow {
+                       label = "fritzdvbc:green:rssilow";
+                       gpios = <&spi_gpio 0 GPIO_ACTIVE_LOW>;
+               };
+       };
+};
+
+&pcie0 {
+       status = "okay";
+};
+
+&gpio {
+       reset-pcie-ep {
+               gpio-hog;
+               gpios = <109 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "PCIE EP reset";
+       };
+
+       reset-pcie-bus {
+               gpio-hog;
+               gpios = <110 GPIO_ACTIVE_HIGH>;
+               output-high;
+               line-name = "PCIE Bus reset";
+       };
+};
index be0c3b1217768e07ed529cbd8e8fc9e4e5217327..398c9ed4953a1a77acaacf9905c48c8a3f3943ae 100755 (executable)
@@ -38,6 +38,14 @@ avm,fritz4020)
        ucidef_set_led_netdev "wan" "WAN" "$boardname:green:wan" "eth1"
        ucidef_set_led_switch "lan" "LAN" "$boardname:green:lan" "switch0" "0x1E"
        ;;
+avm,fritzdvbc)
+       ucidef_set_rssimon "wlan1" "200000" "1"
+       ucidef_set_led_rssi "rssilow" "RSSILOW" "$boardname:green:rssilow" "wlan1" "1" "100"
+       ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "$boardname:green:rssimediumlow" "wlan1" "20" "100"
+       ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "$boardname:green:rssimedium" "wlan1" "40" "100"
+       ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "$boardname:green:rssimediumhigh" "wlan1" "60" "100"
+       ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "$boardname:green:rssihigh" "wlan1" "80" "100"
+       ;;
 comfast,cf-e110n-v2)
        ucidef_set_led_netdev "lan" "LAN" "$boardname:green:lan" "eth1"
        ucidef_set_led_switch "wan" "WAN" "$boardname:green:wan" "switch0" "0x02"
index 02245031fa682e18d0a4ea9b1ecad583eb4a76b1..4b74565aa325e341830aa1c3d5f96fabc524865a 100755 (executable)
@@ -15,6 +15,7 @@ ath79_setup_interfaces()
        aruba,ap-105|\
        avm,fritz1750e|\
        avm,fritz300e|\
+       avm,fritzdvbc|\
        comfast,cf-wr752ac-v1|\
        comfast,cf-e130n-v2|\
        devolo,dvl1200i|\
@@ -352,7 +353,8 @@ ath79_setup_macs()
                label_mac=$(mtd_get_mac_binary art 0x1002)
                ;;
        avm,fritz1750e|\
-       avm,fritz450e)
+       avm,fritz450e|\
+       avm,fritzdvbc)
                label_mac=$(fritz_tffs -n macwlan -i $(find_mtd_part "tffs (1)"))
                ;;
        avm,fritz300e)
index 56d083b4bfc5be33d8e76df5665ab5f9b532257b..3db4d2a994826d75e8020307c5e39cb36dfa6ccc 100644 (file)
@@ -11,7 +11,8 @@ case "$FIRMWARE" in
        case $board in
        avm,fritz1750e|\
        avm,fritz4020|\
-       avm,fritz450e)
+       avm,fritz450e|\
+       avm,fritzdvbc)
                caldata_extract_reverse "urlader" 0x1541 0x440
                ;;
        dlink,dap-2695-a1)
index 603557d6c20ca2d3dd15234c5e8c1e2a72939788..9d4306e66b8807f6bb58af30ca4b27ab39e2997e 100644 (file)
@@ -10,7 +10,8 @@ board=$(board_name)
 case "$FIRMWARE" in
 "ath10k/cal-pci-0000:00:00.0.bin")
        case $board in
-       avm,fritz1750e)
+       avm,fritz1750e|\
+       avm,fritzdvbc)
                caldata_extract "urlader" 0x198a 0x844
                ;;
        comfast,cf-wr650ac-v1|\
index 61577a376b402a20467b46d70c8ecbe534f42943..c5d9cd536fe1d1c23ab28ba2c88e5174385792cd 100644 (file)
@@ -3,7 +3,8 @@
 preinit_set_mac_address() {
        case $(board_name) in
        avm,fritz1750e|\
-       avm,fritz450e)
+       avm,fritz450e|\
+       avm,fritzdvbc)
                ip link set dev eth0 address $(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)"))
                ;;
        dlink,dap-2695-a1)
index e92dbc99d61e4628ccc835a35b7f9cdeb0b5f235..9f296adaa754c5bd96944fe6c6f39031b20ad1d9 100644 (file)
@@ -223,6 +223,16 @@ define Device/avm_fritz450e
 endef
 TARGET_DEVICES += avm_fritz450e
 
+define Device/avm_fritzdvbc
+  $(Device/avm)
+  SOC := qca9556
+  IMAGE_SIZE := 15232k
+  DEVICE_MODEL := FRITZ!WLAN Repeater DVB-C
+  DEVICE_PACKAGES += rssileds kmod-ath10k-ct-smallbuffers \
+       ath10k-firmware-qca988x-ct -swconfig
+endef
+TARGET_DEVICES += avm_fritzdvbc
+
 define Device/buffalo_bhr-4grv
   SOC := ar7242
   DEVICE_VENDOR := Buffalo