Skip to content
Snippets Groups Projects
0023-ipq40xx-add-support-for-Plasma-Cloud-PA2200.patch 19.9 KiB
Newer Older
  • Learn to ignore specific revisions
  • 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549
    From: Marek Lindner <marek.lindner@kaiwoo.ai>
    Date: Fri, 14 Dec 2018 23:46:53 +0800
    Subject: ipq40xx: add support for Plasma Cloud PA2200
    
    Device specifications:
    
    * QCA IPQ4019
    * 256 MB of RAM
    * 32 MB of SPI NOR flash (w25q256)
      - 2x 15 MB available; but one of the 15 MB regions is the recovery image
    * 2T2R 2.4 GHz
      - QCA4019 hw1.0 (SoC)
      - requires special BDF in QCA4019/hw1.0/board-2.bin with
        bus=ahb,bmi-chip-id=0,bmi-board-id=20,variant=PlasmaCloud-PA2200
    * 2T2R 5 GHz (channel 36-64)
      - QCA9888 hw2.0 (PCI)
      - requires special BDF in QCA9888/hw2.0/board-2.bin
        bus=pci,bmi-chip-id=0,bmi-board-id=16,variant=PlasmaCloud-PA2200
    * 2T2R 5 GHz (channel 100-165)
      - QCA4019 hw1.0 (SoC)
      - requires special BDF in QCA4019/hw1.0/board-2.bin with
        bus=ahb,bmi-chip-id=0,bmi-board-id=21,variant=PlasmaCloud-PA2200
    * GPIO-LEDs for 2.4GHz, 5GHz-SoC and 5GHz-PCIE
    * GPIO-LEDs for power (orange) and status (blue)
    * 1x GPIO-button (reset)
    * TTL pins are on board (arrow points to VCC, then follows: GND, TX, RX)
    * 2x gigabit ethernet
      - phy@mdio3:
        + Label: Ethernet 1
        + gmac0 (ethaddr) in original firmware
        + used as LAN interface
      - phy@mdio4:
        + Label: Ethernet 2
        + gmac1 (eth1addr) in original firmware
        + 802.3at POE+
        + used as WAN interface
    * 12V 2A DC
    
    Flashing instructions:
    
    The tool ap51-flash (https://github.com/ap51-flash/ap51-flash) should be
    used to transfer the factory image to the u-boot when the device boots up.
    
    Signed-off-by: Marek Lindner <marek.lindner@kaiwoo.ai>
    [sven@narfation.org: prepare commit message, rebase, use all LEDs, switch
    to dualboot_datachk upgrade script, use eth1 as designated WAN interface]
    Signed-off-by: Sven Eckelmann <sven@narfation.org>
    Origin: backport, https://github.com/openwrt/openwrt/commit/4871fd2616acb03fefe69b068955dba36eb00770
    
    diff --git a/package/boot/uboot-envtools/files/ipq40xx b/package/boot/uboot-envtools/files/ipq40xx
    index 3d31de8083b63516322ca33e9de792a592cf4bf1..e30b58ec4bf2871b7f311de7fdbe54aecc9ba29a 100644
    --- a/package/boot/uboot-envtools/files/ipq40xx
    +++ b/package/boot/uboot-envtools/files/ipq40xx
    @@ -35,7 +35,8 @@ alfa-network,ap120c-ac |\
     glinet,gl-b1300 |\
     openmesh,a42 |\
     openmesh,a62 |\
    -plasmacloud,pa1200)
    +plasmacloud,pa1200 |\
    +plasmacloud,pa2200)
     	ubootenv_add_uci_config "/dev/mtd5" "0x0" "0x10000" "0x10000"
     	;;
     linksys,ea6350v3)
    diff --git a/package/firmware/ipq-wifi/Makefile b/package/firmware/ipq-wifi/Makefile
    index 5e181f67437ec644d07d8fc4882908549d3d60ef..6e0d840de247f3ee6e8f9a097a8649a8f3abf2d7 100644
    --- a/package/firmware/ipq-wifi/Makefile
    +++ b/package/firmware/ipq-wifi/Makefile
    @@ -35,6 +35,7 @@ ALLWIFIBOARDS:= \
     	linksys_ea6350v3 \
     	linksys_ea8300 \
     	plasmacloud_pa1200 \
    +	plasmacloud_pa2200 \
     	qxwlan_e2600ac
     
     ALLWIFIPACKAGES:=$(foreach BOARD,$(ALLWIFIBOARDS),ipq-wifi-$(BOARD))
    @@ -109,6 +110,7 @@ $(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,linksys_ea8300,Linksys EA8300))
     $(eval $(call generate-ipq-wifi-package,plasmacloud_pa1200,Plasma Cloud PA1200))
    +$(eval $(call generate-ipq-wifi-package,plasmacloud_pa2200,Plasma Cloud PA2200))
     $(eval $(call generate-ipq-wifi-package,qxwlan_e2600ac,Qxwlan E2600AC))
     
     $(foreach PACKAGE,$(ALLWIFIPACKAGES),$(eval $(call BuildPackage,$(PACKAGE))))
    diff --git a/package/firmware/ipq-wifi/board-plasmacloud_pa2200.qca4019 b/package/firmware/ipq-wifi/board-plasmacloud_pa2200.qca4019
    new file mode 100644
    index 0000000000000000000000000000000000000000..d1db0f5f4b8b734c0c43df38d9eedb0b84f72109
    GIT binary patch
    literal 24324
    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
    
    literal 0
    HcmV?d00001
    
    diff --git a/package/firmware/ipq-wifi/board-plasmacloud_pa2200.qca9888 b/package/firmware/ipq-wifi/board-plasmacloud_pa2200.qca9888
    new file mode 100644
    index 0000000000000000000000000000000000000000..6c3f083eb20775cf2a322aa5694c8a3e717ec71c
    GIT binary patch
    literal 12172
    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
    
    literal 0
    HcmV?d00001
    
    diff --git a/scripts/om-fwupgradecfg-gen.sh b/scripts/om-fwupgradecfg-gen.sh
    index 552ed31f147df442926a39f7e2c8b3bd7b706571..92d8df9de3d09f2ee2c6edd35750ad03c8f02d8a 100755
    --- a/scripts/om-fwupgradecfg-gen.sh
    +++ b/scripts/om-fwupgradecfg-gen.sh
    @@ -7,7 +7,7 @@
     #
     
     usage() {
    -	echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750|A60|A42|A62|PA300|PA1200> <out file path> <kernel path> <rootfs path>"
    +	echo "Usage: $0 <OM2P|OM5P|OM5PAC|MR600|MR900|MR1750|A60|A42|A62|PA300|PA1200|PA2200> <out file path> <kernel path> <rootfs path>"
     	rm -f $CFG_OUT
     	exit 1
     }
    @@ -45,7 +45,7 @@ case $CE_TYPE in
     		SIZE_FACTOR=1024
     		SIZE_FORMAT="0x%08x"
     		;;
    -	A62)
    +	A62|PA2200)
     		MAX_PART_SIZE=15552
     		KERNEL_FLASH_ADDR=0x1a0000
     		FLASH_BS=65536
    diff --git a/target/linux/ipq40xx/base-files/etc/board.d/02_network b/target/linux/ipq40xx/base-files/etc/board.d/02_network
    index f446c04a00c863173c8fcb8242f7b2db1569acb3..aaada06e370591d43b59e756dd8b7acdef203d17 100755
    --- a/target/linux/ipq40xx/base-files/etc/board.d/02_network
    +++ b/target/linux/ipq40xx/base-files/etc/board.d/02_network
    @@ -15,7 +15,8 @@ ipq40xx_setup_interfaces()
     	8dev,jalapeno|\
     	alfa-network,ap120c-ac|\
     	engenius,ens620ext|\
    -	plasmacloud,pa1200)
    +	plasmacloud,pa1200|\
    +	plasmacloud,pa2200)
     		ucidef_set_interfaces_lan_wan "eth0" "eth1"
     		;;
     	asus,map-ac2200|\
    diff --git a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
    index 28c34f6d0f9ebb47d0b2705e2edd5a55cc2e22eb..e0677371ea93f32c5ceb4b0b858e236f9c764863 100644
    --- a/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
    +++ b/target/linux/ipq40xx/base-files/etc/hotplug.d/firmware/11-ath10k-caldata
    @@ -123,7 +123,8 @@ case "$FIRMWARE" in
     		# OEM assigns 4 sequential MACs
     		ath10kcal_patch_mac_crc $(macaddr_setbit_la $(macaddr_add "$(cat /sys/class/net/eth0/address)" 4))
     		;;
    -	openmesh,a62)
    +	openmesh,a62 |\
    +	plasmacloud,pa2200)
     		ath10kcal_extract "0:ART" 36864 12064
     		;;
     	esac
    @@ -166,6 +167,7 @@ case "$FIRMWARE" in
     	openmesh,a42 |\
     	openmesh,a62 |\
     	plasmacloud,pa1200 |\
    +	plasmacloud,pa2200 |\
     	qxwlan,e2600ac-c1 |\
     	qxwlan,e2600ac-c2)
     		ath10kcal_extract "0:ART" 4096 12064
    @@ -233,6 +235,7 @@ case "$FIRMWARE" in
     	openmesh,a42 |\
     	openmesh,a62 |\
     	plasmacloud,pa1200 |\
    +	plasmacloud,pa2200 |\
     	qxwlan,e2600ac-c1 |\
     	qxwlan,e2600ac-c2)
     		ath10kcal_extract "0:ART" 20480 12064
    diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/dualboot_datachk.sh b/target/linux/ipq40xx/base-files/lib/upgrade/dualboot_datachk.sh
    index 60886071c9748407746ca9adfab52a1da9e524f2..81418fe0ba474bebd6f4a6defe730644b6aee76e 100644
    --- a/target/linux/ipq40xx/base-files/lib/upgrade/dualboot_datachk.sh
    +++ b/target/linux/ipq40xx/base-files/lib/upgrade/dualboot_datachk.sh
    @@ -48,6 +48,7 @@ platform_do_upgrade_dualboot_datachk() {
     	openmesh,a42)
     		primary_kernel_mtd=8
     		;;
    +	plasmacloud,pa2200|\
     	openmesh,a62)
     		primary_kernel_mtd=10
     		;;
    diff --git a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
    index 6ec538cfd4cced656130169522cac1622a3b4ef2..e7336e8d14bc9b197c8a76585729a8c71355f903 100644
    --- a/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
    +++ b/target/linux/ipq40xx/base-files/lib/upgrade/platform.sh
    @@ -74,7 +74,8 @@ platform_do_upgrade() {
     		;;
     	openmesh,a42 |\
     	openmesh,a62 |\
    -	plasmacloud,pa1200)
    +	plasmacloud,pa1200 |\
    +	plasmacloud,pa2200)
     		PART_NAME="inactive"
     		platform_do_upgrade_dualboot_datachk "$1"
     		;;
    diff --git a/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4019-pa2200.dts b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4019-pa2200.dts
    new file mode 100644
    index 0000000000000000000000000000000000000000..2d0655114b4e0749e0c878a3d16ece2ad2ab2223
    --- /dev/null
    +++ b/target/linux/ipq40xx/files-4.14/arch/arm/boot/dts/qcom-ipq4019-pa2200.dts
    @@ -0,0 +1,210 @@
    +// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
    +/* Copyright (c) 2017-2020, Sven Eckelmann <sven@narfation.org>
    + * Copyright (c) 2018, Marek Lindner <marek.lindner@kaiwoo.ai>
    + */
    +
    +#include "qcom-ipq4019.dtsi"
    +#include <dt-bindings/gpio/gpio.h>
    +#include <dt-bindings/input/input.h>
    +#include <dt-bindings/soc/qcom,tcsr.h>
    +
    +/ {
    +	model = "Plasma Cloud PA2200";
    +	compatible = "plasmacloud,pa2200";
    +
    +	soc {
    +		rng@22000 {
    +			status = "okay";
    +		};
    +
    +		mdio@90000 {
    +			status = "okay";
    +		};
    +
    +		ess-psgmii@98000 {
    +			status = "okay";
    +		};
    +
    +		tcsr@1949000 {
    +			compatible = "qcom,tcsr";
    +			reg = <0x1949000 0x100>;
    +			qcom,wifi_glb_cfg = <TCSR_WIFI_GLB_CFG>;
    +		};
    +
    +		ess_tcsr@1953000 {
    +			compatible = "qcom,tcsr";
    +			reg = <0x1953000 0x1000>;
    +			qcom,ess-interface-select = <TCSR_ESS_PSGMII>;
    +		};
    +
    +		tcsr@1957000 {
    +			compatible = "qcom,tcsr";
    +			reg = <0x1957000 0x100>;
    +			qcom,wifi_noc_memtype_m0_m2 = <TCSR_WIFI_NOC_MEMTYPE_M0_M2>;
    +		};
    +
    +		crypto@8e3a000 {
    +			status = "okay";
    +		};
    +
    +		watchdog@b017000 {
    +			status = "okay";
    +		};
    +
    +		ess-switch@c000000 {
    +			switch_lan_bmp = <0x10>;
    +			switch_wan_bmp = <0x20>;
    +
    +			status = "okay";
    +		};
    +
    +		edma@c080000 {
    +			status = "okay";
    +		};
    +	};
    +
    +	keys {
    +		compatible = "gpio-keys";
    +
    +		reset {
    +			label = "reset";
    +			gpios = <&tlmm 18 GPIO_ACTIVE_LOW>;
    +			linux,code = <KEY_RESTART >;
    +		};
    +	};
    +
    +	aliases {
    +		led-boot = &led_power_orange;
    +		led-failsafe = &led_status_blue;
    +		led-running = &led_power_orange;
    +		led-upgrade = &led_status_blue;
    +	};
    +
    +	leds {
    +		compatible = "gpio-leds";
    +
    +		led_power_orange: power_orange {
    +			label = "orange:power";
    +			gpios = <&tlmm 43 GPIO_ACTIVE_LOW>;
    +		};
    +
    +		2g_blue {
    +			label = "blue:2g";
    +			gpios = <&tlmm 46 GPIO_ACTIVE_LOW>;
    +			linux,default-trigger = "phy1tpt";
    +		};
    +
    +		2g_green {
    +			label = "green:5g1";
    +			gpios = <&tlmm 47 GPIO_ACTIVE_LOW>;
    +			linux,default-trigger = "phy0tpt";
    +		};
    +
    +		5g2_green {
    +			label = "green:5g2";
    +			gpios = <&tlmm 48 GPIO_ACTIVE_LOW>;
    +			linux,default-trigger = "phy2tpt";
    +		};
    +
    +		led_status_blue: status_blue {
    +			label = "blue:status";
    +			gpios = <&tlmm 50 GPIO_ACTIVE_LOW>;
    +		};
    +	};
    +};
    +
    +&tlmm {
    +	serial_pins: serial_pinmux {
    +		mux {
    +			pins = "gpio16", "gpio17";
    +			function = "blsp_uart0";
    +			bias-disable;
    +		};
    +	};
    +
    +	spi_0_pins: spi_0_pinmux {
    +		pin {
    +			function = "blsp_spi0";
    +			pins = "gpio13", "gpio14", "gpio15";
    +			drive-strength = <12>;
    +			bias-disable;
    +		};
    +		pin_cs {
    +			function = "gpio";
    +			pins = "gpio12";
    +			drive-strength = <2>;
    +			bias-disable;
    +			output-high;
    +		};
    +	};
    +};
    +
    +&blsp_dma {
    +	status = "okay";
    +};
    +
    +&blsp1_spi1 {
    +	pinctrl-0 = <&spi_0_pins>;
    +	pinctrl-names = "default";
    +	status = "okay";
    +	cs-gpios = <&tlmm 12 GPIO_ACTIVE_HIGH>;
    +
    +	flash@0 {
    +		#address-cells = <1>;
    +		#size-cells = <1>;
    +		compatible = "jedec,spi-nor";
    +		reg = <0>;
    +		spi-max-frequency = <24000000>;
    +		/* partitions are passed via bootloader */
    +	};
    +};
    +
    +&blsp1_uart1 {
    +	pinctrl-0 = <&serial_pins>;
    +	pinctrl-names = "default";
    +	status = "okay";
    +};
    +
    +&cryptobam {
    +	status = "okay";
    +};
    +
    +&gmac0 {
    +	qcom,phy_mdio_addr = <3>;
    +	qcom,poll_required = <1>;
    +	qcom,forced_speed = <1000>;
    +	qcom,forced_duplex = <1>;
    +	vlan_tag = <1 0x10>;
    +};
    +
    +&pcie0 {
    +	status = "okay";
    +	perst-gpio = <&tlmm 38 GPIO_ACTIVE_LOW>;
    +	wake-gpio = <&tlmm 50 GPIO_ACTIVE_LOW>;
    +
    +	bridge@0,0 {
    +		reg = <0x00000000 0 0 0 0>;
    +		#address-cells = <3>;
    +		#size-cells = <2>;
    +		ranges;
    +
    +		wifi2: wifi@1,0 {
    +			compatible = "qcom,ath10k";
    +			status = "okay";
    +			reg = <0x00010000 0 0 0 0>;
    +			qcom,ath10k-calibration-variant = "PlasmaCloud-PA2200";
    +			ieee80211-freq-limit = <5170000 5350000>;
    +		};
    +	};
    +};
    +
    +&wifi0 {
    +	status = "okay";
    +	qcom,ath10k-calibration-variant = "PlasmaCloud-PA2200";
    +};
    +
    +&wifi1 {
    +	status = "okay";
    +	qcom,ath10k-calibration-variant = "PlasmaCloud-PA2200";
    +	ieee80211-freq-limit = <5470000 5875000>;
    +};
    diff --git a/target/linux/ipq40xx/image/Makefile b/target/linux/ipq40xx/image/Makefile
    index e14d00ad08b8caf2dae935d573f0ba7bb0433c23..9872d0c4abcbb9d607bb15c47f0f820e7cdea077 100644
    --- a/target/linux/ipq40xx/image/Makefile
    +++ b/target/linux/ipq40xx/image/Makefile
    @@ -360,6 +360,21 @@ define Device/plasmacloud_pa1200
     endef
     TARGET_DEVICES += plasmacloud_pa1200
     
    +define Device/plasmacloud_pa2200
    +	$(call Device/FitImageLzma)
    +	DEVICE_DTS := qcom-ipq4019-pa2200
    +	DEVICE_DTS_CONFIG := config@pc.pa2200
    +	BLOCKSIZE := 64k
    +	DEVICE_TITLE := Plasma Cloud PA2200
    +	KERNEL = kernel-bin | lzma | fit lzma $$(DTS_DIR)/$$(DEVICE_DTS).dtb | pad-to $$(BLOCKSIZE)
    +	IMAGE_SIZE := 15552k
    +	IMAGES = factory.bin sysupgrade.bin
    +	IMAGE/factory.bin := append-rootfs | pad-rootfs | openmesh-image ce_type=PA2200
    +	IMAGE/sysupgrade.bin/squashfs := append-rootfs | pad-rootfs | sysupgrade-tar rootfs=$$$$@ | append-metadata
    +	DEVICE_PACKAGES := ath10k-firmware-qca9888-ct ipq-wifi-plasmacloud-pa2200 uboot-envtools
    +endef
    +TARGET_DEVICES += plasmacloud_pa2200
    +
     define Device/qcom_ap-dk01.1-c1
     	DEVICE_TITLE := QCA AP-DK01.1-C1
     	BOARD_NAME := ap-dk01.1-c1
    diff --git a/target/linux/ipq40xx/patches-4.14/901-arm-boot-add-dts-files.patch b/target/linux/ipq40xx/patches-4.14/901-arm-boot-add-dts-files.patch
    index cd0cd4164207f0a851d19a42fce07ad54fec8939..22c9e2305740938b57802f3e8c8a37fda4d855d9 100644
    --- a/target/linux/ipq40xx/patches-4.14/901-arm-boot-add-dts-files.patch
    +++ b/target/linux/ipq40xx/patches-4.14/901-arm-boot-add-dts-files.patch
    @@ -10,7 +10,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
     
     --- a/arch/arm/boot/dts/Makefile
     +++ b/arch/arm/boot/dts/Makefile
    -@@ -697,7 +697,33 @@ dtb-$(CONFIG_ARCH_QCOM) += \
    +@@ -697,7 +697,34 @@ dtb-$(CONFIG_ARCH_QCOM) += \
      	qcom-apq8074-dragonboard.dtb \
      	qcom-apq8084-ifc6540.dtb \
      	qcom-apq8084-mtp.dtb \
    @@ -35,6 +35,7 @@ Signed-off-by: John Crispin <john@phrozen.org>
     +	qcom-ipq4019-fritzrepeater-3000.dtb \
     +	qcom-ipq4019-linksys_ea8300.dtb \
     +	qcom-ipq4019-map-ac2200.dtb \
    ++	qcom-ipq4019-pa2200.dtb \
     +	qcom-ipq4019-qxwlan-e2600ac-c1.dtb \
     +	qcom-ipq4019-qxwlan-e2600ac-c2.dtb \
     +	qcom-ipq4028-wpj428.dtb \