aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux
diff options
context:
space:
mode:
authorMathias Kresin <dev@kresin.me>2018-03-02 19:28:50 +0100
committerMathias Kresin <dev@kresin.me>2018-05-17 07:40:19 +0200
commit75ed56a08a4ce978323259a59a8f45ceed511584 (patch)
tree7fca1a4625212688cf2aefc9679d1bf39f7a5489 /target/linux
parentbc04cf780e95aa292695f064dfaeea08df8c9b84 (diff)
downloadupstream-75ed56a08a4ce978323259a59a8f45ceed511584.tar.gz
upstream-75ed56a08a4ce978323259a59a8f45ceed511584.tar.bz2
upstream-75ed56a08a4ce978323259a59a8f45ceed511584.zip
ath79: add AVM FRITZ!WLAN Repeater 300E
No known issues, everything works fine. Signed-off-by: Mathias Kresin <dev@kresin.me>
Diffstat (limited to 'target/linux')
-rwxr-xr-xtarget/linux/ath79/base-files/etc/board.d/01_leds11
-rwxr-xr-xtarget/linux/ath79/base-files/etc/board.d/02_network15
-rw-r--r--target/linux/ath79/base-files/etc/diag.sh4
-rw-r--r--target/linux/ath79/base-files/etc/hotplug.d/firmware/10-ath9k-eeprom21
-rw-r--r--target/linux/ath79/dts/ar7242_avm_fritz300e.dts169
-rw-r--r--target/linux/ath79/generic/config-default4
-rw-r--r--target/linux/ath79/image/generic.mk14
7 files changed, 238 insertions, 0 deletions
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 <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>;
+};
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