From 75ed56a08a4ce978323259a59a8f45ceed511584 Mon Sep 17 00:00:00 2001 From: Mathias Kresin Date: Fri, 2 Mar 2018 19:28:50 +0100 Subject: ath79: add AVM FRITZ!WLAN Repeater 300E No known issues, everything works fine. Signed-off-by: Mathias Kresin --- target/linux/ath79/base-files/etc/board.d/01_leds | 11 ++ .../linux/ath79/base-files/etc/board.d/02_network | 15 ++ target/linux/ath79/base-files/etc/diag.sh | 4 + .../etc/hotplug.d/firmware/10-ath9k-eeprom | 21 +++ target/linux/ath79/dts/ar7242_avm_fritz300e.dts | 169 +++++++++++++++++++++ target/linux/ath79/generic/config-default | 4 + target/linux/ath79/image/generic.mk | 14 ++ 7 files changed, 238 insertions(+) create mode 100644 target/linux/ath79/dts/ar7242_avm_fritz300e.dts diff --git a/target/linux/ath79/base-files/etc/board.d/01_leds b/target/linux/ath79/base-files/etc/board.d/01_leds index 9d42861939..70d27bc29b 100755 --- a/target/linux/ath79/base-files/etc/board.d/01_leds +++ b/target/linux/ath79/base-files/etc/board.d/01_leds @@ -5,8 +5,19 @@ board_config_update board=$(board_name) +boardname="${board##*,}" case "$board" in +"avm,fritz300e") + ucidef_set_led_netdev "lan" "LAN" "$boardname:green:lan" "eth0" + ucidef_set_led_wlan "wlan" "WLAN" "$boardname:green:wlan" "phy0tpt" + ucidef_set_rssimon "wlan0" "200000" "1" + ucidef_set_led_rssi "rssilow" "RSSILOW" "$boardname:green:rssi0" "wlan0" "1" "100" + ucidef_set_led_rssi "rssimediumlow" "RSSIMEDIUMLOW" "$boardname:green:rssi1" "wlan0" "20" "100" + ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "$boardname:green:rssi2" "wlan0" "40" "100" + ucidef_set_led_rssi "rssimediumhigh" "RSSIMEDIUMHIGH" "$boardname:green:rssi3" "wlan0" "60" "100" + ucidef_set_led_rssi "rssihigh" "RSSIHIGH" "$boardname:green:rssi4" "wlan0" "80" "100" + ;; "glinet,ar150") ucidef_set_led_wlan "wlan" "WLAN" "gl-ar150:orange:wlan" "phy0tpt" ;; diff --git a/target/linux/ath79/base-files/etc/board.d/02_network b/target/linux/ath79/base-files/etc/board.d/02_network index 941d2ab511..19361f161e 100755 --- a/target/linux/ath79/base-files/etc/board.d/02_network +++ b/target/linux/ath79/base-files/etc/board.d/02_network @@ -8,6 +8,7 @@ ath79_setup_interfaces() local board="$1" case "$board" in + "avm,fritz300e"|\ "ubnt,unifi") ucidef_set_interface_lan "eth0" ;; @@ -36,9 +37,23 @@ ath79_setup_interfaces() esac } +ath79_setup_macs() +{ + local board="$1" + + case "$board" in + avm,fritz300e) + lan_mac=$(fritz_tffs -n maca -i $(find_mtd_part "tffs (1)")) + ;; + esac + + [ -n "$lan_mac" ] && ucidef_set_interface_macaddr "lan" $lan_mac +} + board_config_update board=$(board_name) ath79_setup_interfaces $board +ath79_setup_macs $board board_config_flush exit 0 diff --git a/target/linux/ath79/base-files/etc/diag.sh b/target/linux/ath79/base-files/etc/diag.sh index c9b32df94e..8022151378 100644 --- a/target/linux/ath79/base-files/etc/diag.sh +++ b/target/linux/ath79/base-files/etc/diag.sh @@ -4,8 +4,12 @@ get_status_led() { local board=$(board_name) + local boardname="${board##*,}" case $board in + "avm,fritz300e") + status_led="${boardname}:green:power" + ;; "glinet,ar150") status_led="gl-ar150:orange:wlan" ;; diff --git a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom index fc15caea6f..c2d87f58de 100644 --- a/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom +++ b/target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom @@ -24,11 +24,32 @@ ath9k_eeprom_extract() { ath9k_eeprom_die "failed to extract from $mtd" } +ath9k_eeprom_extract_reverse() { + local part=$1 + local offset=$2 + local count=$3 + local mtd + local reversed + local caldata + + mtd=$(find_mtd_chardev "$part") + reversed=$(hexdump -v -s $offset -n $count -e '/1 "%02x "' $mtd) + + for byte in $reversed; do + caldata="\x${byte}${caldata}" + done + + printf "%b" "$caldata" > /lib/firmware/$FIRMWARE +} + board=$(board_name) case "$FIRMWARE" in "ath9k-eeprom-pci-0000:00:00.0.bin") case $board in + "avm,fritz300e") + ath9k_eeprom_extract_reverse "urloader" 5441 1088 + ;; "ubnt,unifi") ath9k_eeprom_extract "art" 4096 2048 ;; diff --git a/target/linux/ath79/dts/ar7242_avm_fritz300e.dts b/target/linux/ath79/dts/ar7242_avm_fritz300e.dts new file mode 100644 index 0000000000..f1ad138f43 --- /dev/null +++ b/target/linux/ath79/dts/ar7242_avm_fritz300e.dts @@ -0,0 +1,169 @@ +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT +/dts-v1/; + +#include +#include + +#include "ar7242.dtsi" + +/ { + compatible = "avm,fritz300e", "qca,ar7242"; + model = "AVM FRITZ!WLAN Repeater 300E"; + + memory@0 { + device_type = "memory"; + reg = <0x0 0x4000000>; + }; + + gpio-keys { + compatible = "gpio-keys-polled"; + #address-cells = <1>; + #size-cells = <0>; + poll-interval = <20>; + + wps { + label = "wps"; + linux,code = ; + gpios = <&gpio 12 GPIO_ACTIVE_LOW>; + debounce-interval = <60>; + }; + }; + + leds { + compatible = "gpio-leds"; + + power { + label = "fritz300e:green:power"; + gpios = <&gpio 13 GPIO_ACTIVE_LOW>; + default-state = "on"; + }; + + lan { + label = "fritz300e:green:lan"; + gpios = <&gpio 15 GPIO_ACTIVE_LOW>; + }; + + wlan { + label = "fritz300e:green:wlan"; + gpios = <&gpio 16 GPIO_ACTIVE_LOW>; + }; + }; + + ath9k-leds { + compatible = "gpio-leds"; + + rssi0 { + label = "fritz300e:green:rssi0"; + gpios = <&ath9k 10 GPIO_ACTIVE_LOW>; + }; + + rssi1 { + label = "fritz300e:green:rssi1"; + gpios = <&ath9k 4 GPIO_ACTIVE_LOW>; + }; + + rssi2 { + label = "fritz300e:green:rssi2"; + gpios = <&ath9k 6 GPIO_ACTIVE_LOW>; + }; + + rssi3 { + label = "fritz300e:green:rssi3"; + gpios = <&ath9k 7 GPIO_ACTIVE_LOW>; + }; + + rssi4 { + label = "fritz300e:green:rssi4"; + gpios = <&ath9k 5 GPIO_ACTIVE_LOW>; + }; + }; + + eth-phy-reset { + compatible = "regulator-fixed"; + + regulator-name = "eth-phy-reset"; + regulator-min-microvolt = <3300000>; + regulator-max-microvolt = <3300000>; + + gpio = <&gpio 11 GPIO_ACTIVE_LOW>; + startup-delay-us = <300000>; + enable-active-high; + + regulator-always-on; + }; +}; + +&spi { + status = "okay"; + num-cs = <1>; + + flash@0 { + #address-cells = <1>; + #size-cells = <1>; + compatible = "jedec,spi-nor"; + reg = <0>; + spi-max-frequency = <25000000>; + + partitions { + compatible = "fixed-partitions"; + #address-cells = <1>; + #size-cells = <1>; + + partition@0 { + reg = <0x0 0x20000>; + label = "urloader"; + read-only; + }; + + partition@20000 { + reg = <0x20000 0xee0000>; + label = "firmware"; + }; + + partition@f00000 { + reg = <0xf00000 0x80000>; + label = "tffs (1)"; + read-only; + }; + + partition@f80000 { + reg = <0xf80000 0x80000>; + label = "tffs (2)"; + read-only; + }; + }; + }; +}; + +&uart { + status = "okay"; +}; + +&pcie { + status = "okay"; + + ath9k: wifi@0000 { + reg = <0x0000 0 0 0 0>; + #gpio-cells = <2>; + gpio-controller; + qca,no-eeprom; + }; +}; + +&mdio0 { + status = "okay"; + + phy0: ethernet-phy@0 { + reg = <0>; + phy-mode = "rgmii"; + }; +}; + +ð0 { + status = "okay"; + + phy-mode = "rgmii"; + phy-handle = <&phy0>; + + pll-data = <0x16000000 0x00000101 0x00001313>; +}; diff --git a/target/linux/ath79/generic/config-default b/target/linux/ath79/generic/config-default index 14f22c2579..c174c4e126 100644 --- a/target/linux/ath79/generic/config-default +++ b/target/linux/ath79/generic/config-default @@ -1,5 +1,7 @@ CONFIG_BLK_MQ_PCI=y +CONFIG_INTEL_XWAY_PHY=y CONFIG_LEDS_RESET=y +CONFIG_MTD_SPLIT_EVA_FW=y CONFIG_OF_ADDRESS_PCI=y CONFIG_OF_PCI=y CONFIG_OF_PCI_IRQ=y @@ -10,3 +12,5 @@ CONFIG_PCI_DISABLE_COMMON_QUIRKS=y CONFIG_PCI_DOMAINS=y CONFIG_PHY_AR7100_USB=y CONFIG_PHY_AR7200_USB=y +CONFIG_REGULATOR=y +CONFIG_REGULATOR_FIXED_VOLTAGE=y diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk index 741396473d..cb5dc38f62 100644 --- a/target/linux/ath79/image/generic.mk +++ b/target/linux/ath79/image/generic.mk @@ -21,6 +21,20 @@ define Build/netgear-uImage $(call Build/uImage,$(1) -M $(NETGEAR_KERNEL_MAGIC)) endef + +define Device/avm_fritz300e + ATH_SOC := ar7242 + DEVICE_TITLE := AVM FRITZ!WLAN Repeater 300E + KERNEL := kernel-bin | append-dtb | lzma | eva-image + KERNEL_INITRAMFS := $$(KERNEL) + IMAGE_SIZE := 15232k + IMAGE/sysupgrade.bin := append-kernel | pad-to 64k | \ + append-squashfs-fakeroot-be | pad-to 256 | \ + append-rootfs | pad-rootfs | append-metadata | check-size $$$$(IMAGE_SIZE) + DEVICE_PACKAGES := fritz-tffs rssileds -swconfig +endef +TARGET_DEVICES += avm_fritz300e + define Device/embeddedwireless_dorin ATH_SOC := ar9331 DEVICE_TITLE := Embedded Wireless Dorin -- cgit v1.2.3