From 8ff631feff50e901f75d9cdae4c475050d6fc4a7 Mon Sep 17 00:00:00 2001 From: Natalie Kagelmacher Date: Thu, 14 May 2020 10:44:21 +0200 Subject: [PATCH] ath79: add support for AVM FRITZ!WLAN Repeater DVB-C 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 [fixed sorting - removed change to other board - prettified commit message] Signed-off-by: David Bauer --- .../linux/ath79/dts/qca9556_avm_fritzdvbc.dts | 111 ++++++++++++++++++ .../generic/base-files/etc/board.d/01_leds | 8 ++ .../generic/base-files/etc/board.d/02_network | 4 +- .../etc/hotplug.d/firmware/10-ath9k-eeprom | 3 +- .../etc/hotplug.d/firmware/11-ath10k-caldata | 3 +- .../base-files/lib/preinit/10_fix_eth_mac.sh | 3 +- target/linux/ath79/image/generic.mk | 10 ++ 7 files changed, 138 insertions(+), 4 deletions(-) create mode 100644 target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts diff --git a/target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts b/target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts new file mode 100644 index 0000000000..28b19f92ef --- /dev/null +++ b/target/linux/ath79/dts/qca9556_avm_fritzdvbc.dts @@ -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"; + }; +}; diff --git a/target/linux/ath79/generic/base-files/etc/board.d/01_leds b/target/linux/ath79/generic/base-files/etc/board.d/01_leds index be0c3b1217..398c9ed495 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/generic/base-files/etc/board.d/01_leds @@ -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" diff --git a/target/linux/ath79/generic/base-files/etc/board.d/02_network b/target/linux/ath79/generic/base-files/etc/board.d/02_network index 02245031fa..4b74565aa3 100755 --- a/target/linux/ath79/generic/base-files/etc/board.d/02_network +++ b/target/linux/ath79/generic/base-files/etc/board.d/02_network @@ -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) diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index 56d083b4bf..3db4d2a994 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -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) diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata index 603557d6c2..9d4306e66b 100644 --- a/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata +++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/firmware/11-ath10k-caldata @@ -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|\ diff --git a/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh b/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh index 61577a376b..c5d9cd536f 100644 --- a/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh +++ b/target/linux/ath79/generic/base-files/lib/preinit/10_fix_eth_mac.sh @@ -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) diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index e92dbc99d6..9f296adaa7 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -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