firmware/ipq-wifi: Extend for multi-chip boards
authorJeff Kletsky <git-commits@allycomm.com>
Sun, 14 Apr 2019 20:20:57 +0000 (13:20 -0700)
committerChristian Lamparter <chunkeey@gmail.com>
Sat, 18 May 2019 11:43:22 +0000 (13:43 +0200)
This package provides board-specific reference ("cal") data
on an interim basis until included in the upstream distros

While originally conceived for IPQ4019-based boards, similar needs
are appearing with three-radio devices. For some of these devices,
both a board-2.bin file needs to be supplied both for the IPQ4019
as well as for the other radio on the board.

This patch allows new or multiple overrides to be specified by:

  * Adding board name to ALLWIFIBOARDS
  * Placing file(s) in this directory named as
      board-<devicename>.<qca4019|qca9888|qca9984>
  * Adding
      $(eval $(call generate-ipq-wifi-package,<device>,<display name>))

(along with suitable package selection for the board)

At this time, QCA4019, QCA9888, and QCA9984 are supported.
Extension to other chips should be straightforward.

The existing files, board-*.bin, are "grandfathered" as QCA4019.

The package name has been retained for compatability reasons.
At this time it DEPENDS:=@TARGET_ipq40xx, limiting its visibility.

Build-tested-on: asus_map-ac2200, alfa-network_ap120c-ac,
    avm_fritzbox-7530, avm_fritzrepeater-3000, engenius_eap1300,
    engenius_ens620ext, linksys_ea6350v3, qxwlan-e2600ac-c1/-c2

Signed-off-by: Jeff Kletsky <git-commits@allycomm.com>
package/firmware/ipq-wifi/Makefile
package/firmware/ipq-wifi/board-asus_map-ac2200.bin [new symlink]
package/firmware/ipq-wifi/board-qxwlan_e2600ac.bin [new symlink]

index 705617e70b20d1f4481d954ca15cc5610bd3e880..5c4ebb23c405736be5f6eaadc9965cd4f095d318 100644 (file)
@@ -14,52 +14,93 @@ endef
 define Build/Compile
 endef
 
 define Build/Compile
 endef
 
-#ALLWIFIBOARDS:=<devicename>
+#
+# This is intended to be used on an interim basis until device-specific
+# board data for new devices is available through the upstream compilation
+#
 # Please send a mail with your device-specific board files upstream.
 # You can find instructions and examples on the linux-wireless wiki:
 # <https://wireless.wiki.kernel.org/en/users/drivers/ath10k/boardfiles>
 # Please send a mail with your device-specific board files upstream.
 # You can find instructions and examples on the linux-wireless wiki:
 # <https://wireless.wiki.kernel.org/en/users/drivers/ath10k/boardfiles>
-ALLWIFIBOARDS:=alfa-network_ap120c-ac asus_map-ac2200 avm_fritzbox-7530 avm_fritzrepeater-3000 engenius_eap1300 engenius_ens620ext linksys_ea6350v3 qxwlan_e2600ac
+#
+
+ALLWIFIBOARDS:= \
+       alfa-network_ap120c-ac \
+       asus_map-ac2200 \
+       avm_fritzbox-7530 \
+       avm_fritzrepeater-3000 \
+       engenius_eap1300 \
+       engenius_ens620ext \
+       linksys_ea6350v3 \
+       qxwlan_e2600ac
+
 ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD))
 
 define Package/ipq-wifi-default
 ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD))
 
 define Package/ipq-wifi-default
-  SUBMENU:=ath10k IPQ4019 Boarddata
+  SUBMENU:=ath10k Board-Specific Overrides
   SECTION:=firmware
   CATEGORY:=Firmware
   DEPENDS:=@TARGET_ipq40xx
   TITLE:=Custom Board
 endef
 
   SECTION:=firmware
   CATEGORY:=Firmware
   DEPENDS:=@TARGET_ipq40xx
   TITLE:=Custom Board
 endef
 
+define ipq-wifi-install-one-to
+  $(INSTALL_DIR)  $(2)/lib/firmware/ath10k/$(3)/
+  $(INSTALL_DATA) $(1) $(2)/lib/firmware/ath10k/$(3)/board-2.bin
+endef
+
+# Note: .bin deprecated; supports existing boards
+
+define ipq-wifi-install-one
+  $(if $(filter $(suffix $(1)),.QCA4019 .qca4019 .bin),\
+    $(call ipq-wifi-install-one-to,$(1),$(2),QCA4019/hw1.0),\
+  $(if $(filter $(suffix $(1)),.QCA9888 .qca9888),\
+    $(call ipq-wifi-install-one-to,$(1),$(2),QCA9888/hw2.0),\
+  $(if $(filter $(suffix $(1)),.QCA9984 .qca9984),\
+    $(call ipq-wifi-install-one-to,$(1),$(2),QCA9984/hw1.0),\
+    $(error Unrecognized board-file suffix '$(suffix $(1))' for '$(1)')\
+  )))
+
+endef
+# Blank line required at end of above define due to foreach context
+
 define generate-ipq-wifi-package
   define Package/ipq-wifi-$(1)
     $(call Package/ipq-wifi-default)
 define generate-ipq-wifi-package
   define Package/ipq-wifi-$(1)
     $(call Package/ipq-wifi-default)
-    TITLE:=Board for $(3)
+    TITLE:=board-2.bin Overrides for $(2)
     CONFLICTS:=$(PREV_BOARD)
   endef
 
   define Package/ipq-wifi-$(1)/description
     CONFLICTS:=$(PREV_BOARD)
   endef
 
   define Package/ipq-wifi-$(1)/description
-This device custom package board-2.bin overwrites the board-2.bin
-file which is supplied by the ath10k-firmware-qca4019 package.
+The $(2) requires board-specific, reference ("cal") data
+that is not yet present in the upstream wireless firmware distribution.
+
+This package supplies board-2.bin file(s) that, in the interim,
+overwrite those supplied by the ath10k-firmware-* packages.
 
 
-This is package is only necessary for the $(3).
-Don't install it for any other device!
+This is package is only necessary for the $(2).
+
+Do not install it for any other device!
   endef
 
   define Package/ipq-wifi-$(1)/install-overlay
   endef
 
   define Package/ipq-wifi-$(1)/install-overlay
-       $(INSTALL_DIR) $$(1)/lib/firmware/ath10k/QCA4019/hw1.0
-       $(INSTALL_DATA) ./$(2) $$(1)/lib/firmware/ath10k/QCA4019/hw1.0/board-2.bin
+    $$$$(foreach IPQ_WIFI_BOARD_FILE,$$$$(wildcard board-$(1).*),\
+      $$$$(call ipq-wifi-install-one,$$$$(IPQ_WIFI_BOARD_FILE),$$(1)))
   endef
 
   PREV_BOARD+=ipq-wifi-$(1)
 endef
 
   endef
 
   PREV_BOARD+=ipq-wifi-$(1)
 endef
 
-#$(eval $(call generate-ipq-wifi-package,<devicename>,<filename>,<displayname>))
-$(eval $(call generate-ipq-wifi-package,alfa-network_ap120c-ac,board-alfa-network_ap120c-ac.bin,ALFA Network AP120C-AC))
-$(eval $(call generate-ipq-wifi-package,asus_map-ac2200,board-map-ac2200.bin,ASUS MAP-AC2200))
-$(eval $(call generate-ipq-wifi-package,engenius_eap1300,board-engenius_eap1300.bin,EnGenius EAP1300))
-$(eval $(call generate-ipq-wifi-package,engenius_ens620ext,board-engenius_ens620ext.bin,EnGenius ENS620EXT))
-$(eval $(call generate-ipq-wifi-package,avm_fritzbox-7530,board-avm_fritzbox-7530.bin,AVM FRITZ!Box 7530))
-$(eval $(call generate-ipq-wifi-package,avm_fritzrepeater-3000,board-avm_fritzrepeater-3000.bin,AVM FRITZ!Repeater 3000))
-$(eval $(call generate-ipq-wifi-package,linksys_ea6350v3,board-linksys_ea6350v3.bin,Linksys EA6350v3))
-$(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,board-qxwlan-e2600ac.bin,Qxwlan E2600AC))
+# Add board name to ALLWIFIBOARDS
+# Place files in this directory as board-<devicename>.<qca4019|qca9888|qca9984>
+# Add $(eval $(call generate-ipq-wifi-package,<devicename>,<display name>))
+
+$(eval $(call generate-ipq-wifi-package,alfa-network_ap120c-ac,ALFA Network AP120C-AC))
+$(eval $(call generate-ipq-wifi-package,asus_map-ac2200,ASUS MAP-AC2200))
+$(eval $(call generate-ipq-wifi-package,avm_fritzbox-7530,AVM FRITZ!Box 7530))
+$(eval $(call generate-ipq-wifi-package,avm_fritzrepeater-3000,AVM FRITZ!Repeater 3000))
+$(eval $(call generate-ipq-wifi-package,engenius_eap1300,EnGenius EAP1300))
+$(eval $(call generate-ipq-wifi-package,engenius_ens620ext,EnGenius ENS620EXT))
+$(eval $(call generate-ipq-wifi-package,linksys_ea6350v3,Linksys EA6350v3))
+$(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC))
 
 $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE))))
 
 $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE))))
diff --git a/package/firmware/ipq-wifi/board-asus_map-ac2200.bin b/package/firmware/ipq-wifi/board-asus_map-ac2200.bin
new file mode 120000 (symlink)
index 0000000..d6e8b35
--- /dev/null
@@ -0,0 +1 @@
+board-map-ac2200.bin
\ No newline at end of file
diff --git a/package/firmware/ipq-wifi/board-qxwlan_e2600ac.bin b/package/firmware/ipq-wifi/board-qxwlan_e2600ac.bin
new file mode 120000 (symlink)
index 0000000..acccf88
--- /dev/null
@@ -0,0 +1 @@
+board-qxwlan-e2600ac.bin
\ No newline at end of file