ath79: add AVM FRITZ!WLAN Repeater 300E
authorMathias Kresin <dev@kresin.me>
Fri, 2 Mar 2018 18:28:50 +0000 (19:28 +0100)
committerMathias Kresin <dev@kresin.me>
Thu, 17 May 2018 05:40:19 +0000 (07:40 +0200)
No known issues, everything works fine.

Signed-off-by: Mathias Kresin <dev@kresin.me>
target/linux/ath79/base-files/etc/board.d/01_leds
target/linux/ath79/base-files/etc/board.d/02_network
target/linux/ath79/base-files/etc/diag.sh
target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom
target/linux/ath79/dts/ar7242_avm_fritz300e.dts [new file with mode: 0644]
target/linux/ath79/generic/config-default
target/linux/ath79/image/generic.mk

index 9d42861..70d27bc 100755 (executable)
@@ -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"
        ;;
index 941d2ab..19361f1 100755 (executable)
@@ -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
index c9b32df..8022151 100644 (file)
@@ -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"
                ;;
index fc15cae..c2d87f5 100644 (file)
@@ -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 (file)
index 0000000..f1ad138
--- /dev/null
@@ -0,0 +1,169 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+/dts-v1/;
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+
+#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 = <KEY_WPS_BUTTON>;
+                       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";
+       };
+};
+
+&eth0 {
+       status = "okay";
+
+       phy-mode = "rgmii";
+       phy-handle = <&phy0>;
+
+       pll-data = <0x16000000 0x00000101 0x00001313>;
+};
index 14f22c2..c174c4e 100644 (file)
@@ -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
index 7413964..cb5dc38 100644 (file)
@@ -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