From 8ae2ee99c60382f9f5130009397fd36e40900447 Mon Sep 17 00:00:00 2001
From: Sebastian Schaper <openwrt@sebastianschaper.net>
Date: Mon, 30 Nov 2020 20:09:29 +0100
Subject: [PATCH] ath79: add support for D-Link DAP-3320 A1

Specifications:
 * QCA9533, 16 MiB Flash, 64 MiB RAM, 802.11n 2T2R
 * 10/100 Ethernet Port, 802.11af PoE
 * IP55 pole-mountable outdoor case

Installation:
 * Factory Web UI is at 192.168.0.50
   login with 'admin' and blank password, flash factory.bin
 * Recovery Web UI is at 192.168.0.50
   connect network cable, hold reset button during power-on and keep it
   pressed until uploading has started (only required when checksum is ok,
   e.g. for reverting back to oem firmware), flash factory.bin

After flashing factory.bin, additional free space can be reclaimed by
flashing sysupgrade.bin, since the factory image requires some padding
to be accepted for upgrading via OEM Web UI.

Signed-off-by: Sebastian Schaper <openwrt@sebastianschaper.net>
---
 .../ath79/dts/qca9533_dlink_dap-3320-a1.dts   | 56 +++++++++++++++++++
 .../generic/base-files/etc/board.d/02_network |  4 +-
 .../etc/hotplug.d/ieee80211/10_fix_wifi_mac   |  3 +-
 .../etc/uci-defaults/09_fix-checksum          |  3 +-
 target/linux/ath79/image/generic.mk           | 11 ++++
 5 files changed, 74 insertions(+), 3 deletions(-)
 create mode 100644 target/linux/ath79/dts/qca9533_dlink_dap-3320-a1.dts

diff --git a/target/linux/ath79/dts/qca9533_dlink_dap-3320-a1.dts b/target/linux/ath79/dts/qca9533_dlink_dap-3320-a1.dts
new file mode 100644
index 00000000000..97f2f62b4a8
--- /dev/null
+++ b/target/linux/ath79/dts/qca9533_dlink_dap-3320-a1.dts
@@ -0,0 +1,56 @@
+// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
+
+#include "qca953x.dtsi"
+#include "qca95xx_dlink_dap-2xxx.dtsi"
+
+/ {
+	compatible = "dlink,dap-3320-a1", "qca,qca9533";
+	model = "D-Link DAP-3320 A1";
+
+	aliases {
+		led-boot = &led_power_green;
+		led-failsafe = &led_power_green;
+		led-running = &led_power_green;
+		led-upgrade = &led_power_green;
+	};
+
+	keys {
+		compatible = "gpio-keys";
+
+		reset {
+			label = "reset";
+			linux,code = <KEY_RESTART>;
+			gpios = <&gpio 12 GPIO_ACTIVE_LOW>;
+		};
+	};
+
+	leds {
+		compatible = "gpio-leds";
+
+		led_power_green: power_green {
+			label = "green:power";
+			gpios = <&gpio 11 GPIO_ACTIVE_LOW>;
+			default-state = "on";
+		};
+	};
+};
+
+&partitions {
+	partition@70000 {
+		label = "firmware";
+		reg = <0x70000 0xef0000>;
+		compatible = "wrg";
+	};
+
+	partition@f60000 {
+		label = "dlink";
+		reg = <0xf60000 0x90000>;
+		read-only;
+	};
+
+	art: partition@ff0000 {
+		label = "art";
+		reg = <0xff0000 0x10000>;
+		read-only;
+	};
+};
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 23b824d7e32..20cf561add4 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
@@ -29,6 +29,7 @@ ath79_setup_interfaces()
 	dlink,dap-1365-a1|\
 	dlink,dap-2230-a1|\
 	dlink,dap-2680-a1|\
+	dlink,dap-3320-a1|\
 	dlink,dir-505|\
 	engenius,eap300-v2|\
 	engenius,eap350-v1|\
@@ -485,7 +486,8 @@ ath79_setup_macs()
 		;;
 	dlink,dap-2230-a1|\
 	dlink,dap-2660-a1|\
-	dlink,dap-2680-a1)
+	dlink,dap-2680-a1|\
+	dlink,dap-3320-a1)
 		lan_mac=$(mtd_get_mac_ascii bdcfg "lanmac")
 		label_mac=$lan_mac
 		;;
diff --git a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
index 8923a2cb114..5edc2e4a865 100644
--- a/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
+++ b/target/linux/ath79/generic/base-files/etc/hotplug.d/ieee80211/10_fix_wifi_mac
@@ -22,7 +22,8 @@ case "$board" in
 	dlink,dch-g020-a1)
 		mtd_get_mac_text "mp" 0x13 > /sys${DEVPATH}/macaddress
 		;;
-	dlink,dap-2230-a1)
+	dlink,dap-2230-a1|\
+	dlink,dap-3320-a1)
 		mtd_get_mac_ascii bdcfg "wlanmac" > /sys${DEVPATH}/macaddress
 		;;
 	dlink,dap-2660-a1|\
diff --git a/target/linux/ath79/generic/base-files/etc/uci-defaults/09_fix-checksum b/target/linux/ath79/generic/base-files/etc/uci-defaults/09_fix-checksum
index 0bbe3217884..b522563f178 100644
--- a/target/linux/ath79/generic/base-files/etc/uci-defaults/09_fix-checksum
+++ b/target/linux/ath79/generic/base-files/etc/uci-defaults/09_fix-checksum
@@ -16,7 +16,8 @@ case "$board" in
 dlink,dap-2230-a1|\
 dlink,dap-2660-a1|\
 dlink,dap-2680-a1|\
-dlink,dap-2695-a1)
+dlink,dap-2695-a1|\
+dlink,dap-3320-a1)
 	fixwrgg
 	;;
 qihoo,c301)
diff --git a/target/linux/ath79/image/generic.mk b/target/linux/ath79/image/generic.mk
index 26ab0fcb34b..190f477b7ef 100644
--- a/target/linux/ath79/image/generic.mk
+++ b/target/linux/ath79/image/generic.mk
@@ -804,6 +804,17 @@ define Device/dlink_dap-2695-a1
 endef
 TARGET_DEVICES += dlink_dap-2695-a1
 
+define Device/dlink_dap-3320-a1
+  $(Device/dlink_dap-2xxx)
+  SOC := qca9533
+  DEVICE_VENDOR := D-Link
+  DEVICE_MODEL := DAP-3320
+  DEVICE_VARIANT := A1
+  IMAGE_SIZE := 15296k
+  DAP_SIGNATURE := wapn29_dkbs_dap3320
+endef
+TARGET_DEVICES += dlink_dap-3320-a1
+
 define Device/dlink_dch-g020-a1
   SOC := qca9531
   DEVICE_VENDOR := D-Link