ar71xx: image: keep custom Build/* functions in separate files
[openwrt/openwrt.git] / target / linux / ar71xx / image / tp-link.mk
index b494411db755eb1106982c51921f6423991030bb..26ac6dad0b19c6012100c07af892e6d3d6045073 100644 (file)
@@ -1,4 +1,18 @@
-DEVICE_VARS += TPLINK_HWID TPLINK_HWREV TPLINK_FLASHLAYOUT TPLINK_HEADER_VERSION TPLINK_BOARD_NAME
+DEVICE_VARS += LOADER_FLASH_OFFS TPLINK_BOARD_NAME TPLINK_FLASHLAYOUT TPLINK_HEADER_VERSION TPLINK_HWID TPLINK_HWREV
+
+define Build/copy-file
+       cat "$(1)" > "$@"
+endef
+
+define Build/loader-okli
+       dd if=$(KDIR)/loader-$(1).gz bs=7680 conv=sync of="$@.new"
+       cat "$@" >> "$@.new"
+       mv "$@.new" "$@"
+endef
+
+define Build/loader-okli-compile
+       $(call Build/loader-common,FLASH_OFFS=$(LOADER_FLASH_OFFS) FLASH_MAX=0 KERNEL_CMDLINE="$(CMDLINE)")
+endef
 
 # combine kernel and rootfs into one image
 # mktplinkfw <type> <optional extra arguments to mktplinkfw binary>
@@ -21,10 +35,10 @@ define Build/mktplinkfw
                $(if $(findstring sysupgrade,$(word 1,$(1))),-s) && mv $@.new $@ || rm -f $@
 endef
 
-# mktplinkfw-initramfs <optional extra arguments to mktplinkfw binary>
+# mktplinkfw-combined
 #
 # -c combined image
-define Build/mktplinkfw-initramfs
+define Build/mktplinkfw-combined
        $(STAGING_DIR_HOST)/bin/mktplinkfw \
                -H $(TPLINK_HWID) -W $(TPLINK_HWREV) -F $(TPLINK_FLASHLAYOUT) -N OpenWrt -V $(REVISION) $(1) \
                -m $(TPLINK_HEADER_VERSION) \
@@ -35,58 +49,107 @@ define Build/mktplinkfw-initramfs
        @mv $@.new $@
 endef
 
+# add RE450 and similar header to the kernel image
+define Build/mktplinkfw-kernel
+       $(STAGING_DIR_HOST)/bin/mktplinkfw-kernel \
+               -H $(TPLINK_HWID) -N OpenWrt -V $(REVISION) \
+               -L $(KERNEL_LOADADDR) -E $(KERNEL_LOADADDR) \
+               -k $@ \
+               -o $@.new
+       @mv $@.new $@
+endef
+
+define Build/uImageArcher
+       mkimage -A $(LINUX_KARCH) \
+               -O linux -T kernel \
+               -C $(1) -a $(KERNEL_LOADADDR) -e $(if $(KERNEL_ENTRY),$(KERNEL_ENTRY),$(KERNEL_LOADADDR)) \
+               -n '$(call toupper,$(LINUX_KARCH)) LEDE Linux-$(LINUX_VERSION)' -d $@ $@.new
+       @mv $@.new $@
+endef
+
+
 define Device/tplink
   TPLINK_HWREV := 0x1
   TPLINK_HEADER_VERSION := 1
   LOADER_TYPE := gz
   KERNEL := kernel-bin | patch-cmdline | lzma
-  KERNEL_INITRAMFS := kernel-bin | patch-cmdline | lzma | mktplinkfw-initramfs
+  KERNEL_INITRAMFS := kernel-bin | patch-cmdline | lzma | mktplinkfw-combined
   IMAGES := sysupgrade.bin factory.bin
   IMAGE/sysupgrade.bin := append-rootfs | mktplinkfw sysupgrade
   IMAGE/factory.bin := append-rootfs | mktplinkfw factory
 endef
 
 define Device/tplink-nolzma
-$(Device/tplink)
+  $(Device/tplink)
   LOADER_FLASH_OFFS := 0x22000
   COMPILE := loader-$(1).gz
   COMPILE/loader-$(1).gz := loader-okli-compile
   KERNEL := copy-file $(KDIR)/vmlinux.bin.lzma | uImage lzma -M 0x4f4b4c49 | loader-okli $(1)
-  KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux-initramfs.bin.lzma | loader-kernel-cmdline | mktplinkfw-initramfs
+  KERNEL_INITRAMFS := copy-file $(KDIR)/vmlinux-initramfs.bin.lzma | loader-kernel-cmdline | mktplinkfw-combined
 endef
 
 define Device/tplink-4m
-$(Device/tplink-nolzma)
+  $(Device/tplink-nolzma)
   TPLINK_FLASHLAYOUT := 4M
   IMAGE_SIZE := 3904k
 endef
 
 define Device/tplink-8m
-$(Device/tplink-nolzma)
+  $(Device/tplink-nolzma)
   TPLINK_FLASHLAYOUT := 8M
   IMAGE_SIZE := 7936k
 endef
 
 define Device/tplink-4mlzma
-$(Device/tplink)
+  $(Device/tplink)
   TPLINK_FLASHLAYOUT := 4Mlzma
   IMAGE_SIZE := 3904k
 endef
 
 define Device/tplink-8mlzma
-$(Device/tplink)
+  $(Device/tplink)
   TPLINK_FLASHLAYOUT := 8Mlzma
   IMAGE_SIZE := 7936k
 endef
 
 define Device/tplink-16mlzma
-$(Device/tplink)
+  $(Device/tplink)
   TPLINK_FLASHLAYOUT := 16Mlzma
   IMAGE_SIZE := 15872k
 endef
 
-define Device/cpe510-520
-  DEVICE_TITLE := TP-LINK CPE510/520
+define Device/archer-c59-v1
+  DEVICE_TITLE := TP-LINK Archer C59 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C59-V1
+  TPLINK_BOARD_NAME := ARCHER-C59-V1
+  DEVICE_PROFILE := ARCHERC59V1
+  IMAGE_SIZE := 14528k
+  KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma
+  IMAGES := sysupgrade.bin factory.bin
+  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
+  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
+  MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1536k(kernel),12992k(rootfs),1664k(tplink)ro,64k(art)ro,14528k@0x20000(firmware)
+endef
+TARGET_DEVICES += archer-c59-v1
+
+define Device/archer-c60-v1
+  DEVICE_TITLE := TP-LINK Archer C60 v1
+  DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C60-V1
+  TPLINK_BOARD_NAME := ARCHER-C60-V1
+  DEVICE_PROFILE := ARCHERC60V1
+  IMAGE_SIZE := 7936k
+  KERNEL := kernel-bin | patch-cmdline | lzma | uImageArcher lzma
+  IMAGES := sysupgrade.bin factory.bin
+  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
+  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
+  MTDPARTS := spi0.0:64k(u-boot)ro,64k(mac)ro,1344k(kernel),6592k(rootfs),64k(tplink)ro,64k(art)ro,7936k@0x20000(firmware)
+endef
+TARGET_DEVICES += archer-c60-v1
+
+define Device/cpe510-520-v1
+  DEVICE_TITLE := TP-LINK CPE510/520 v1
   DEVICE_PACKAGES := rssileds
   MTDPARTS := spi0.0:128k(u-boot)ro,64k(pation-table)ro,64k(product-info)ro,1536k(kernel),6144k(rootfs),192k(config)ro,64k(ART)ro,7680k@0x40000(firmware)
   IMAGE_SIZE := 7680k
@@ -100,17 +163,49 @@ define Device/cpe510-520
   IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
 endef
 
-define Device/cpe210-220
-$(Device/cpe510-520)
-  DEVICE_TITLE := TP-LINK CPE210/220
+define Device/cpe210-220-v1
+  $(Device/cpe510-520-v1)
+  DEVICE_TITLE := TP-LINK CPE210/220 v1
   DEVICE_PACKAGES := rssileds
   BOARDNAME := CPE210
   TPLINK_BOARD_NAME := CPE210
 endef
-TARGET_DEVICES += cpe210-220 cpe510-520
 
-define Device/eap120
-  DEVICE_TITLE := TP-LINK EAP120
+define Device/wbs210-v1
+  $(Device/cpe510-520-v1)
+  DEVICE_TITLE := TP-LINK WBS210 v1
+  DEVICE_PACKAGES := rssileds
+  BOARDNAME := WBS210
+  TPLINK_BOARD_NAME := WBS210
+endef
+
+define Device/wbs510-v1
+  $(Device/cpe510-520-v1)
+  DEVICE_TITLE := TP-LINK WBS510 v1
+  DEVICE_PACKAGES := rssileds
+  BOARDNAME := WBS510
+  TPLINK_BOARD_NAME := WBS510
+endef
+TARGET_DEVICES += cpe210-220-v1 cpe510-520-v1 wbs210-v1 wbs510-v1
+
+define Device/re450-v1
+  DEVICE_TITLE := TP-LINK RE450 v1
+  DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca988x
+  MTDPARTS := spi0.0:128k(u-boot)ro,1344k(kernel),4672k(rootfs),64k(pation-table)ro,64k(product-info)ro,1856k(config)ro,64k(art)ro,6016k@0x20000(firmware)
+  IMAGE_SIZE := 7936k
+  BOARDNAME := RE450
+  TPLINK_BOARD_NAME := RE450
+  DEVICE_PROFILE := RE450
+  LOADER_TYPE := elf
+  KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-kernel
+  IMAGES := sysupgrade.bin factory.bin
+  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
+  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
+endef
+TARGET_DEVICES += re450-v1
+
+define Device/eap120-v1
+  DEVICE_TITLE := TP-LINK EAP120 v1
   MTDPARTS := spi0.0:128k(u-boot)ro,64k(pation-table)ro,64k(product-info)ro,1536k(kernel),14336k(rootfs),192k(config)ro,64k(ART)ro,15872k@0x40000(firmware)
   IMAGE_SIZE := 15872k
   BOARDNAME := EAP120
@@ -122,10 +217,10 @@ define Device/eap120
   IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
   IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
 endef
-TARGET_DEVICES += eap120
+TARGET_DEVICES += eap120-v1
 
 define Device/tl-wdr4300-v1
-$(Device/tplink-8mlzma)
+  $(Device/tplink-8mlzma)
   DEVICE_TITLE := TP-LINK TL-WDR4300 v1
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   BOARDNAME := TL-WDR4300
@@ -135,7 +230,7 @@ $(Device/tplink-8mlzma)
 endef
 
 define Device/tl-wdr3500-v1
-$(Device/tplink-8mlzma)
+  $(Device/tplink-8mlzma)
   DEVICE_TITLE := TP-LINK TL-WDR3500 v1
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   BOARDNAME := TL-WDR3500
@@ -144,7 +239,7 @@ $(Device/tplink-8mlzma)
 endef
 
 define Device/tl-wdr3600-v1
-$(Device/tplink-8mlzma)
+  $(Device/tplink-8mlzma)
   DEVICE_TITLE := TP-LINK TL-WDR3600 v1
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   BOARDNAME := TL-WDR4300
@@ -154,8 +249,8 @@ $(Device/tplink-8mlzma)
 endef
 
 define Device/tl-wdr4300-v1-il
-$(Device/tplink-8mlzma)
-  DEVICE_TITLE := TP-LINK TL-WDR4300 v1 IL
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WDR4300 v1 (IL)
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   BOARDNAME := TL-WDR4300
   DEVICE_PROFILE := TLWDR4300
@@ -163,7 +258,7 @@ $(Device/tplink-8mlzma)
 endef
 
 define Device/tl-wdr4310-v1
-$(Device/tplink-8mlzma)
+  $(Device/tplink-8mlzma)
   DEVICE_TITLE := TP-LINK TL-WDR4310 v1
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   BOARDNAME := TL-WDR4300
@@ -172,18 +267,18 @@ $(Device/tplink-8mlzma)
 endef
 
 define Device/mw4530r-v1
-$(Device/tl-wdr4300-v1)
+  $(Device/tl-wdr4300-v1)
   DEVICE_TITLE := Mercury MW4530R v1
   TPLINK_HWID := 0x45300001
 endef
 TARGET_DEVICES += tl-wdr3500-v1 tl-wdr3600-v1 tl-wdr4300-v1 tl-wdr4300-v1-il tl-wdr4310-v1 mw4530r-v1
 
 define Device/tl-wdr6500-v2
-$(Device/tplink-8mlzma)
-  DEVICE_TITLE := TP-LINK TL-WDR6500v2
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WDR6500 v2
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
   KERNEL := kernel-bin | patch-cmdline | lzma | uImage lzma
-  KERNEL_INITRAMFS := kernel-bin | patch-cmdline | lzma | uImage lzma | mktplinkfw-initramfs
+  KERNEL_INITRAMFS := kernel-bin | patch-cmdline | lzma | uImage lzma | mktplinkfw-combined
   BOARDNAME = TL-WDR6500-v2
   DEVICE_PROFILE = TLWDR6500V2
   TPLINK_HWID := 0x65000002
@@ -192,8 +287,8 @@ endef
 TARGET_DEVICES += tl-wdr6500-v2
 
 define Device/tl-wdr3320-v2
-$(Device/tplink-4mlzma)
-  DEVICE_TITLE := TP-LINK TL-WDR3320v2
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WDR3320 v2
   DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
   BOARDNAME = TL-WDR3320-v2
   DEVICE_PROFILE = TLWDR3320V2
@@ -203,725 +298,813 @@ endef
 TARGET_DEVICES += tl-wdr3320-v2
 
 define Device/archer-c5-v1
-    $(Device/tplink-16mlzma)
-    DEVICE_TITLE := TP-LINK Archer C5
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
-    BOARDNAME := ARCHER-C5
-    DEVICE_PROFILE := ARCHERC7
-    TPLINK_HWID := 0xc5000001
+  $(Device/tplink-16mlzma)
+  DEVICE_TITLE := TP-LINK Archer C5 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C5
+  DEVICE_PROFILE := ARCHERC7
+  TPLINK_HWID := 0xc5000001
 endef
 
 define Device/archer-c7-v1
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK Archer C7 v1
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
-    BOARDNAME := ARCHER-C7
-    DEVICE_PROFILE := ARCHERC7
-    TPLINK_HWID := 0x75000001
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK Archer C7 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C7
+  DEVICE_PROFILE := ARCHERC7
+  TPLINK_HWID := 0x75000001
 endef
 
 define Device/archer-c7-v2
-    $(Device/tplink-16mlzma)
-    DEVICE_TITLE := TP-LINK Archer C7 v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
-    BOARDNAME := ARCHER-C7-V2
-    DEVICE_PROFILE := ARCHERC7
-    TPLINK_HWID := 0xc7000002
-    IMAGES := sysupgrade.bin factory.bin factory-us.bin factory-eu.bin
-    IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
-    IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
+  $(Device/tplink-16mlzma)
+  DEVICE_TITLE := TP-LINK Archer C7 v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C7-V2
+  DEVICE_PROFILE := ARCHERC7
+  TPLINK_HWID := 0xc7000002
+  IMAGES := sysupgrade.bin factory.bin factory-us.bin factory-eu.bin
+  IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
+  IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
 endef
 
 define Device/archer-c7-v2-il
-    $(Device/tplink-16mlzma)
-    DEVICE_TITLE := TP-LINK Archer C7 v2 IL
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
-    BOARDNAME := ARCHER-C7-V2
-    DEVICE_PROFILE := ARCHERC7
-    TPLINK_HWID := 0xc7000002
-    TPLINK_HWREV := 0x494c0001
+  $(Device/tplink-16mlzma)
+  DEVICE_TITLE := TP-LINK Archer C7 v2 (IL)
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C7-V2
+  DEVICE_PROFILE := ARCHERC7
+  TPLINK_HWID := 0xc7000002
+  TPLINK_HWREV := 0x494c0001
 endef
 
 define Device/tl-wdr7500-v3
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK Archer C7 v3
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
-    BOARDNAME := ARCHER-C7
-    DEVICE_PROFILE := ARCHERC7
-    TPLINK_HWID := 0x75000003
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK Archer C7 v3
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := ARCHER-C7
+  DEVICE_PROFILE := ARCHERC7
+  TPLINK_HWID := 0x75000003
 endef
 TARGET_DEVICES += archer-c5-v1 archer-c7-v1 archer-c7-v2 archer-c7-v2-il tl-wdr7500-v3
 
 define Device/tl-mr10u-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR10U
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-MR10U
-    DEVICE_PROFILE := TLMR10U
-    TPLINK_HWID := 0x00100101
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR10U v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-MR10U
+  DEVICE_PROFILE := TLMR10U
+  TPLINK_HWID := 0x00100101
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr11u-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR11U
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR11U
-    DEVICE_PROFILE := TLMR11U
-    TPLINK_HWID := 0x00110101
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR11U v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR11U
+  DEVICE_PROFILE := TLMR11U
+  TPLINK_HWID := 0x00110101
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr11u-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR11U v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR11U
-    DEVICE_PROFILE := TLMR11U
-    TPLINK_HWID := 0x00110102
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR11U v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR11U
+  DEVICE_PROFILE := TLMR11U
+  TPLINK_HWID := 0x00110102
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr12u-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR12U
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR13U
-    DEVICE_PROFILE := TLMR12U
-    TPLINK_HWID := 0x00120101
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR12U v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR13U
+  DEVICE_PROFILE := TLMR12U
+  TPLINK_HWID := 0x00120101
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr13u-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR13U
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR13U
-    DEVICE_PROFILE := TLMR13U
-    TPLINK_HWID := 0x00130101
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR13U v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR13U
+  DEVICE_PROFILE := TLMR13U
+  TPLINK_HWID := 0x00130101
+  CONSOLE := ttyATH0,115200
 endef
 TARGET_DEVICES += tl-mr10u-v1 tl-mr11u-v1 tl-mr11u-v2 tl-mr12u-v1 tl-mr13u-v1
 
 define Device/tl-mr3020-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR3020
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3020
-    DEVICE_PROFILE := TLMR3020
-    TPLINK_HWID := 0x30200001
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR3020 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3020
+  DEVICE_PROFILE := TLMR3020
+  TPLINK_HWID := 0x30200001
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr3040-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR3040
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3040
-    DEVICE_PROFILE := TLMR3040
-    TPLINK_HWID := 0x30400001
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR3040 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3040
+  DEVICE_PROFILE := TLMR3040
+  TPLINK_HWID := 0x30400001
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr3040-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR3040
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3040-v2
-    DEVICE_PROFILE := TLMR3040
-    TPLINK_HWID := 0x30400002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR3040 v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3040-v2
+  DEVICE_PROFILE := TLMR3040
+  TPLINK_HWID := 0x30400002
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr3220-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-MR3220
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3220
-    DEVICE_PROFILE := TLMR3220
-    TPLINK_HWID := 0x32200001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-MR3220 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3220
+  DEVICE_PROFILE := TLMR3220
+  TPLINK_HWID := 0x32200001
 endef
 
 define Device/tl-mr3220-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR3220 v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3220-v2
-    DEVICE_PROFILE := TLMR3220
-    TPLINK_HWID := 0x32200002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR3220 v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3220-v2
+  DEVICE_PROFILE := TLMR3220
+  TPLINK_HWID := 0x32200002
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-mr3420-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-MR3420
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3420
-    DEVICE_PROFILE := TLMR3420
-    TPLINK_HWID := 0x34200001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-MR3420 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3420
+  DEVICE_PROFILE := TLMR3420
+  TPLINK_HWID := 0x34200001
 endef
 
 define Device/tl-mr3420-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-MR3420 v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3420-v2
-    DEVICE_PROFILE := TLMR3420
-    TPLINK_HWID := 0x34200002
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR3420 v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3420-v2
+  DEVICE_PROFILE := TLMR3420
+  TPLINK_HWID := 0x34200002
 endef
 TARGET_DEVICES += tl-mr3020-v1 tl-mr3040-v1 tl-mr3040-v2 tl-mr3220-v1 tl-mr3220-v2 tl-mr3420-v1 tl-mr3420-v2
 
+define Device/tl-mr6400-v1
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-MR6400 v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-net kmod-usb-net-rndis kmod-usb-serial kmod-usb-serial-option adb-enablemodem
+  BOARDNAME := TL-MR6400
+  DEVICE_PROFILE := TLMR6400
+  TPLINK_HWID := 0x64000001
+endef
+TARGET_DEVICES += tl-mr6400-v1
+
+define Device/tl-wpa8630-v1
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WPA8630 v1
+  DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca988x
+  BOARDNAME := TL-WPA8630
+  DEVICE_PROFILE := TL-WPA8630
+  TPLINK_HWID := 0x86300001
+endef
+TARGET_DEVICES += tl-wpa8630-v1
+
 define Device/tl-wr703n-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR703N
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR703N
-    DEVICE_PROFILE := TLWR703
-    TPLINK_HWID := 0x07030101
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR703N v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR703N
+  DEVICE_PROFILE := TLWR703
+  TPLINK_HWID := 0x07030101
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr710n-v1
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR710N
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR710N
-    DEVICE_PROFILE := TLWR710
-    TPLINK_HWID := 0x07100001
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR710N v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR710N
+  DEVICE_PROFILE := TLWR710
+  TPLINK_HWID := 0x07100001
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr710n-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR710N v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR710N v2
-    DEVICE_PROFILE := TLWR710
-    TPLINK_HWID := 0x07100002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR710N v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR710N v2
+  DEVICE_PROFILE := TLWR710
+  TPLINK_HWID := 0x07100002
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr710n-v2.1
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR710N v2.1
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR710N v2.1
-    DEVICE_PROFILE := TLWR710
-    TPLINK_HWID := 0x07100002
-    TPLINK_HWREV := 0x00000002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR710N v2.1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR710N v2.1
+  DEVICE_PROFILE := TLWR710
+  TPLINK_HWID := 0x07100002
+  TPLINK_HWREV := 0x00000002
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr720n-v3
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR720N v3
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR720N-v3
-    DEVICE_PROFILE := TLWR720
-    TPLINK_HWID := 0x07200103
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR720N v3
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR720N-v3
+  DEVICE_PROFILE := TLWR720
+  TPLINK_HWID := 0x07200103
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr720n-v4
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR720N v4
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR720N-v3
-    DEVICE_PROFILE := TLWR720
-    TPLINK_HWID := 0x07200104
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR720N v4
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR720N-v3
+  DEVICE_PROFILE := TLWR720
+  TPLINK_HWID := 0x07200104
+  CONSOLE := ttyATH0,115200
 endef
 TARGET_DEVICES += tl-wr703n-v1 tl-wr710n-v1 tl-wr710n-v2 tl-wr710n-v2.1 tl-wr720n-v3 tl-wr720n-v4
 
 define Device/tl-wr740n-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR740N/ND v1
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR740
-    TPLINK_HWID := 0x07400001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR740N/ND v1
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR740
+  TPLINK_HWID := 0x07400001
 endef
 
 define Device/tl-wr740n-v3
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR740N/ND v3
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR740
-    TPLINK_HWID := 0x07400003
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR740N/ND v3
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR740
+  TPLINK_HWID := 0x07400003
 endef
 
 define Device/tl-wr740n-v4
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR740N/ND v4
-    BOARDNAME := TL-WR741ND-v4
-    DEVICE_PROFILE := TLWR740
-    TPLINK_HWID := 0x07400004
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR740N/ND v4
+  BOARDNAME := TL-WR741ND-v4
+  DEVICE_PROFILE := TLWR740
+  TPLINK_HWID := 0x07400004
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr740n-v5
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR740N/ND v5
-    BOARDNAME := TL-WR741ND-v4
-    DEVICE_PROFILE := TLWR740
-    TPLINK_HWID := 0x07400005
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR740N/ND v5
+  BOARDNAME := TL-WR741ND-v4
+  DEVICE_PROFILE := TLWR740
+  TPLINK_HWID := 0x07400005
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr740n-v6
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR740N/ND v6
-    BOARDNAME := TL-WR841N-v9
-    DEVICE_PROFILE := TLWR740
-    TPLINK_HWID := 0x07400006
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR740N/ND v6
+  BOARDNAME := TL-WR740N-v6
+  DEVICE_PROFILE := TLWR740
+  TPLINK_HWID := 0x07400006
 endef
 
 define Device/tl-wr741nd-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR741N/ND v1
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR741
-    TPLINK_HWID := 0x07410001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR741N/ND v1
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR741
+  TPLINK_HWID := 0x07410001
 endef
 
 define Device/tl-wr741nd-v2
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR741N/ND v2
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR741
-    TPLINK_HWID := 0x07410001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR741N/ND v2
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR741
+  TPLINK_HWID := 0x07410001
 endef
 
 define Device/tl-wr741nd-v4
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR741N/ND v4
-    BOARDNAME := TL-WR741ND-v4
-    DEVICE_PROFILE := TLWR741
-    TPLINK_HWID := 0x07410004
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR741N/ND v4
+  BOARDNAME := TL-WR741ND-v4
+  DEVICE_PROFILE := TLWR741
+  TPLINK_HWID := 0x07410004
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wr741nd-v5
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR741N/ND v5
-    BOARDNAME := TL-WR741ND-v4
-    DEVICE_PROFILE := TLWR741
-    TPLINK_HWID := 0x07400005
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR741N/ND v5
+  BOARDNAME := TL-WR741ND-v4
+  DEVICE_PROFILE := TLWR741
+  TPLINK_HWID := 0x07400005
+  CONSOLE := ttyATH0,115200
 endef
 
-define Device/tl-wr810n
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-Link TL-WR810N
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2
-    BOARDNAME := TL-WR810N
-    DEVICE_PROFILE := TLWR810
-    TPLINK_HWID := 0x08100001
+define Device/tl-wr810n-v1
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR810N v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2
+  BOARDNAME := TL-WR810N
+  DEVICE_PROFILE := TLWR810
+  TPLINK_HWID := 0x08100001
 endef
-TARGET_DEVICES += tl-wr810n
+TARGET_DEVICES += tl-wr810n-v1
 
 define Device/tl-wr743nd-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR743N/ND v1
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR743
-    TPLINK_HWID := 0x07430001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR743N/ND v1
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR743
+  TPLINK_HWID := 0x07430001
 endef
 
 define Device/tl-wr743nd-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR743N/ND v2
-    BOARDNAME := TL-WR741ND-v4
-    DEVICE_PROFILE := TLWR743
-    TPLINK_HWID := 0x07430002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR743N/ND v2
+  BOARDNAME := TL-WR741ND-v4
+  DEVICE_PROFILE := TLWR743
+  TPLINK_HWID := 0x07430002
+  CONSOLE := ttyATH0,115200
 endef
 TARGET_DEVICES += tl-wr740n-v1 tl-wr740n-v3 tl-wr740n-v4 tl-wr740n-v5 tl-wr740n-v6 tl-wr741nd-v1 tl-wr741nd-v2 tl-wr741nd-v4 tl-wr741nd-v5 tl-wr743nd-v1 tl-wr743nd-v2
 
 define Device/tl-wr802n-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR802N v1
-       BOARDNAME := TL-WR802N-v1
-    DEVICE_PROFILE := TLWR802
-    TPLINK_HWID := 0x08020001
-    TPLINK_HWREV := 1
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR802N v1
+  BOARDNAME := TL-WR802N-v1
+  DEVICE_PROFILE := TLWR802
+  TPLINK_HWID := 0x08020001
+  TPLINK_HWREV := 1
+endef
+
+define Device/tl-wr802n-v2
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR802N v2
+  BOARDNAME := TL-WR802N-v2
+  DEVICE_PROFILE := TLWR802
+  TPLINK_HWID := 0x08020002
+  TPLINK_HWREV := 2
+  IMAGES += factory-us.bin factory-eu.bin
+  IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
+  IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
+endef
+TARGET_DEVICES += tl-wr802n-v1 tl-wr802n-v2
+
+define Device/tl-wr840n-v2
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR840N v2
+  BOARDNAME := TL-WR840N-v2
+  DEVICE_PROFILE := TLWR840
+  TPLINK_HWID := 0x08400002
+  IMAGES += factory-eu.bin
+  IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
+endef
+
+define Device/tl-wr840n-v3
+  $(Device/tl-wr840n-v2)
+  DEVICE_TITLE := TP-LINK TL-WR840N v3
+  BOARDNAME := TL-WR840N-v3
+  TPLINK_HWID := 0x08400003
 endef
-TARGET_DEVICES += tl-wr802n-v1
 
 define Device/tl-wr841-v1.5
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v1.5
-    BOARDNAME := TL-WR841N-v1.5
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410002
-    TPLINK_HWREV := 2
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v1.5
+  BOARDNAME := TL-WR841N-v1.5
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410002
+  TPLINK_HWREV := 2
 endef
 
 define Device/tl-wr841-v3
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v3
-    BOARDNAME := TL-WR941ND
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410003
-    TPLINK_HWREV := 3
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v3
+  BOARDNAME := TL-WR941ND
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410003
+  TPLINK_HWREV := 3
 endef
 
 define Device/tl-wr841-v5
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v5
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410005
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v5
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410005
 endef
 
 define Device/tl-wr841-v7
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v7
-    BOARDNAME := TL-WR841N-v7
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410007
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v7
+  BOARDNAME := TL-WR841N-v7
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410007
 endef
 
 define Device/tl-wr841-v8
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v8
-    BOARDNAME := TL-WR841N-v8
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410008
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v8
+  BOARDNAME := TL-WR841N-v8
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410008
 endef
 
 define Device/tl-wr841-v9
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v9
-    BOARDNAME := TL-WR841N-v9
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410009
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v9
+  BOARDNAME := TL-WR841N-v9
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410009
 endef
 
 define Device/tl-wr841-v10
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR841N/ND v10
-    BOARDNAME := TL-WR841N-v9
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08410010
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v10
+  BOARDNAME := TL-WR841N-v9
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410010
 endef
 
 define Device/tl-wr841-v11
-   $(Device/tplink-4mlzma)
-   DEVICE_TITLE := TP-LINK TL-WR841N/ND v11
-   BOARDNAME := TL-WR841N-v11
-   DEVICE_PROFILE := TLWR841
-   TPLINK_HWID := 0x08410011
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v11
+  BOARDNAME := TL-WR841N-v11
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08410011
+  IMAGES += factory-us.bin factory-eu.bin
+  IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
+  IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
+endef
+
+define Device/tl-wr841-v12
+  $(Device/tl-wr841-v11)
+  DEVICE_TITLE := TP-LINK TL-WR841N/ND v12
+  TPLINK_HWID := 0x08410012
 endef
 
 define Device/tl-wr842n-v1
-    $(Device/tplink-8m)
-    DEVICE_TITLE := TP-LINK TL-WR842N/ND v1
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-MR3420
-    DEVICE_PROFILE := TLWR842
-    TPLINK_HWID := 0x08420001
+  $(Device/tplink-8m)
+  DEVICE_TITLE := TP-LINK TL-WR842N/ND v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-MR3420
+  DEVICE_PROFILE := TLWR842
+  TPLINK_HWID := 0x08420001
 endef
 
 define Device/tl-wr842n-v2
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR842N/ND v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WR842N-v2
-    DEVICE_PROFILE := TLWR842
-    TPLINK_HWID := 0x8420002
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR842N/ND v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR842N-v2
+  DEVICE_PROFILE := TLWR842
+  TPLINK_HWID := 0x8420002
 endef
 
 define Device/tl-wr842n-v3
-    $(Device/tplink-16mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR842N/ND v3
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WR842N-v3
-    DEVICE_PROFILE := TLWR842
-    TPLINK_HWID := 0x08420003
+  $(Device/tplink-16mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR842N/ND v3
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR842N-v3
+  DEVICE_PROFILE := TLWR842
+  TPLINK_HWID := 0x08420003
 endef
 
 define Device/tl-wr843nd-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR843N/ND
-    BOARDNAME := TL-WR841N-v8
-    DEVICE_PROFILE := TLWR843
-    TPLINK_HWID := 0x08430001
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR843N/ND v1
+  BOARDNAME := TL-WR841N-v8
+  DEVICE_PROFILE := TLWR843
+  TPLINK_HWID := 0x08430001
 endef
 
 define Device/tl-wr847n-v8
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR847N/ND v8
-    BOARDNAME := TL-WR841N-v8
-    DEVICE_PROFILE := TLWR841
-    TPLINK_HWID := 0x08470008
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR847N/ND v8
+  BOARDNAME := TL-WR841N-v8
+  DEVICE_PROFILE := TLWR841
+  TPLINK_HWID := 0x08470008
 endef
-TARGET_DEVICES += tl-wr841-v1.5 tl-wr841-v3 tl-wr841-v5 tl-wr841-v7 tl-wr841-v8 tl-wr841-v9 tl-wr841-v10 tl-wr841-v11 tl-wr842n-v1 tl-wr842n-v2 tl-wr842n-v3 tl-wr843nd-v1 tl-wr847n-v8
+TARGET_DEVICES += tl-wr840n-v2 tl-wr840n-v3 tl-wr841-v1.5 tl-wr841-v3 tl-wr841-v5 tl-wr841-v7 tl-wr841-v8 tl-wr841-v9 tl-wr841-v10 tl-wr841-v11 tl-wr841-v12 tl-wr842n-v1 tl-wr842n-v2 tl-wr842n-v3 tl-wr843nd-v1 tl-wr847n-v8
 
 define Device/tl-wr941nd-v2
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR941N/ND v2
-    BOARDNAME := TL-WR941ND
-    DEVICE_PROFILE := TLWR941
-    TPLINK_HWID := 0x09410002
-    TPLINK_HWREV := 2
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR941N/ND v2
+  BOARDNAME := TL-WR941ND
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09410002
+  TPLINK_HWREV := 2
 endef
 
 define Device/tl-wr941nd-v3
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR941N/ND v3
-    BOARDNAME := TL-WR941ND
-    DEVICE_PROFILE := TLWR941
-    TPLINK_HWID := 0x09410002
-    TPLINK_HWREV := 2
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR941N/ND v3
+  BOARDNAME := TL-WR941ND
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09410002
+  TPLINK_HWREV := 2
 endef
 
 define Device/tl-wr941nd-v4
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WR941N/ND v4
-    BOARDNAME := TL-WR741ND
-    DEVICE_PROFILE := TLWR941
-    TPLINK_HWID := 0x09410004
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WR941N/ND v4
+  BOARDNAME := TL-WR741ND
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09410004
 endef
 
 define Device/tl-wr941nd-v5
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR941N/ND v5
-    BOARDNAME := TL-WR941ND-v5
-    DEVICE_PROFILE := TLWR941
-    TPLINK_HWID := 0x09410005
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR941N/ND v5
+  BOARDNAME := TL-WR941ND-v5
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09410005
 endef
 
 define Device/tl-wr941nd-v6
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR941N/ND v6
-    BOARDNAME := TL-WR941ND-v6
-    DEVICE_PROFILE := TLWR941
-    TPLINK_HWID := 0x09410006
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR941N/ND v6
+  BOARDNAME := TL-WR941ND-v6
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09410006
+endef
+
+define Device/tl-wr940n-v4
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR940N v4
+  BOARDNAME := TL-WR940N-v4
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09400004
+  IMAGES += factory-us.bin factory-eu.bin
+  IMAGE/factory-us.bin := append-rootfs | mktplinkfw factory -C US
+  IMAGE/factory-eu.bin := append-rootfs | mktplinkfw factory -C EU
 endef
 
 # Chinese version (unlike European) is similar to the TL-WDR3500
 define Device/tl-wr941nd-v6-cn
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR941N/ND v6 (CN)
-    BOARDNAME := TL-WDR3500
-    DEVICE_PROFILE := TLWR941
-    TPLINK_HWID := 0x09410006
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR941N/ND v6 (CN)
+  BOARDNAME := TL-WDR3500
+  DEVICE_PROFILE := TLWR941
+  TPLINK_HWID := 0x09410006
 endef
-TARGET_DEVICES += tl-wr941nd-v2 tl-wr941nd-v3 tl-wr941nd-v4 tl-wr941nd-v5 tl-wr941nd-v6 tl-wr941nd-v6-cn
+TARGET_DEVICES += tl-wr941nd-v2 tl-wr941nd-v3 tl-wr941nd-v4 tl-wr941nd-v5 tl-wr941nd-v6 tl-wr941nd-v6-cn tl-wr940n-v4
 
 define Device/tl-wr1041n-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR1041N
-    BOARDNAME := TL-WR1041N-v2
-    DEVICE_PROFILE := TLWR1041
-    TPLINK_HWID := 0x10410002
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR1041N v2
+  BOARDNAME := TL-WR1041N-v2
+  DEVICE_PROFILE := TLWR1041
+  TPLINK_HWID := 0x10410002
 endef
 TARGET_DEVICES += tl-wr1041n-v2
 
 define Device/tl-wr1043nd-v1
-    $(Device/tplink-8m)
-    DEVICE_TITLE := TP-LINK TL-WR1043N/ND v1
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WR1043ND
-    DEVICE_PROFILE := TLWR1043
-    TPLINK_HWID := 0x10430001
+  $(Device/tplink-8m)
+  DEVICE_TITLE := TP-LINK TL-WR1043N/ND v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR1043ND
+  DEVICE_PROFILE := TLWR1043
+  TPLINK_HWID := 0x10430001
 endef
 
 define Device/tl-wr1043nd-v2
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR1043N/ND v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WR1043ND-v2
-    DEVICE_PROFILE := TLWR1043
-    TPLINK_HWID := 0x10430002
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR1043N/ND v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR1043ND-v2
+  DEVICE_PROFILE := TLWR1043
+  TPLINK_HWID := 0x10430002
 endef
 
 define Device/tl-wr1043nd-v3
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR1043N/ND v3
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WR1043ND-v2
-    DEVICE_PROFILE := TLWR1043
-    TPLINK_HWID := 0x10430003
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR1043N/ND v3
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR1043ND-v2
+  DEVICE_PROFILE := TLWR1043
+  TPLINK_HWID := 0x10430003
 endef
-TARGET_DEVICES += tl-wr1043nd-v1 tl-wr1043nd-v2 tl-wr1043nd-v3
+
+define Device/tl-wr1043nd-v4
+  $(Device/tplink)
+  DEVICE_TITLE := TP-LINK TL-WR1043N/ND v4
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR1043ND-v4
+  DEVICE_PROFILE := TLWR1043
+  TPLINK_HWID :=  0x10430004
+  TPLINK_FLASHLAYOUT := 16Msafeloader
+  MTDPARTS := spi0.0:128k(u-boot)ro,1536k(kernel),14016k(rootfs),128k(product-info)ro,320k(config)ro,64k(partition-table)ro,128k(logs)ro,64k(ART)ro,15552k@0x20000(firmware)
+  IMAGE_SIZE := 15552k
+  TPLINK_BOARD_NAME := TLWR1043NDV4
+  KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-combined
+  IMAGES := sysupgrade.bin factory.bin
+  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
+  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
+endef
+TARGET_DEVICES += tl-wr1043nd-v1 tl-wr1043nd-v2 tl-wr1043nd-v3 tl-wr1043nd-v4
 
 define Device/tl-wr2543-v1
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WR2543N/ND
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WR2543N
-    DEVICE_PROFILE := TLWR2543
-    TPLINK_HWID := 0x25430001
-    IMAGE/sysupgrade.bin := append-rootfs | mktplinkfw sysupgrade -v 3.13.99
-    IMAGE/factory.bin := append-rootfs | mktplinkfw factory -v 3.13.99
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WR2543N/ND v1
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WR2543N
+  DEVICE_PROFILE := TLWR2543
+  TPLINK_HWID := 0x25430001
+  IMAGE/sysupgrade.bin := append-rootfs | mktplinkfw sysupgrade -v 3.13.99
+  IMAGE/factory.bin := append-rootfs | mktplinkfw factory -v 3.13.99
 endef
 TARGET_DEVICES += tl-wr2543-v1
 
 define Device/tl-wdr4900-v2
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK TL-WDR4900v2
-    DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
-    BOARDNAME := TL-WDR4900-v2
-    DEVICE_PROFILE := TLWDR4900V2
-    TPLINK_HWID := 0x49000002
+  $(Device/tplink-8mlzma)
+  DEVICE_TITLE := TP-LINK TL-WDR4900 v2
+  DEVICE_PACKAGES := kmod-usb-core kmod-usb2 kmod-usb-ledtrig-usbport
+  BOARDNAME := TL-WDR4900-v2
+  DEVICE_PROFILE := TLWDR4900V2
+  TPLINK_HWID := 0x49000002
 endef
 TARGET_DEVICES += tl-wdr4900-v2
 
 define Device/tl-wa701nd-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA701N/ND v1
-    BOARDNAME := TL-WA901ND
-    DEVICE_PROFILE := TLWA701
-    TPLINK_HWID := 0x07010001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA701N/ND v1
+  BOARDNAME := TL-WA901ND
+  DEVICE_PROFILE := TLWA701
+  TPLINK_HWID := 0x07010001
 endef
 
 define Device/tl-wa701nd-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA701N/ND v2
-    BOARDNAME := TL-WA701ND-v2
-    DEVICE_PROFILE := TLWA701
-    TPLINK_HWID := 0x07010002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA701N/ND v2
+  BOARDNAME := TL-WA701ND-v2
+  DEVICE_PROFILE := TLWA701
+  TPLINK_HWID := 0x07010002
+  CONSOLE := ttyATH0,115200
 endef
 
 define Device/tl-wa730re-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA730RE
-    BOARDNAME := TL-WA901ND
-    DEVICE_PROFILE := TLWA730RE
-    TPLINK_HWID := 0x07300001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA730RE v1
+  BOARDNAME := TL-WA901ND
+  DEVICE_PROFILE := TLWA730RE
+  TPLINK_HWID := 0x07300001
 endef
 
 define Device/tl-wa750re-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA750RE
-    DEVICE_PACKAGES := rssileds
-    BOARDNAME := TL-WA750RE
-    DEVICE_PROFILE := TLWA750
-    TPLINK_HWID := 0x07500001
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA750RE v1
+  DEVICE_PACKAGES := rssileds
+  BOARDNAME := TL-WA750RE
+  DEVICE_PROFILE := TLWA750
+  TPLINK_HWID := 0x07500001
 endef
 
-define Device/tl-wa7510n
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA7510N
-    BOARDNAME := TL-WA7510N
-    DEVICE_PROFILE := TLWA7510
-    TPLINK_HWID := 0x75100001
+define Device/tl-wa7510n-v1
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA7510N v1
+  BOARDNAME := TL-WA7510N
+  DEVICE_PROFILE := TLWA7510
+  TPLINK_HWID := 0x75100001
 endef
-TARGET_DEVICES += tl-wa701nd-v1 tl-wa701nd-v2 tl-wa730re-v1 tl-wa750re-v1 tl-wa7510n
+TARGET_DEVICES += tl-wa701nd-v1 tl-wa701nd-v2 tl-wa730re-v1 tl-wa750re-v1 tl-wa7510n-v1
 
 define Device/tl-wa801nd-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA801N/ND v1
-    BOARDNAME := TL-WA901ND
-    DEVICE_PROFILE := TLWA801
-    TPLINK_HWID := 0x08010001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA801N/ND v1
+  BOARDNAME := TL-WA901ND
+  DEVICE_PROFILE := TLWA801
+  TPLINK_HWID := 0x08010001
 endef
 
 define Device/tl-wa801nd-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA801N/ND v2
-    BOARDNAME := TL-WA801ND-v2
-    DEVICE_PROFILE := TLWA801
-    TPLINK_HWID := 0x08010002
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA801N/ND v2
+  BOARDNAME := TL-WA801ND-v2
+  DEVICE_PROFILE := TLWA801
+  TPLINK_HWID := 0x08010002
 endef
 
 define Device/tl-wa801nd-v3
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA801N/ND v3
-    BOARDNAME := TL-WA801ND-v3
-    DEVICE_PROFILE := TLWA801
-    TPLINK_HWID := 0x08010003
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA801N/ND v3
+  BOARDNAME := TL-WA801ND-v3
+  DEVICE_PROFILE := TLWA801
+  TPLINK_HWID := 0x08010003
 endef
 
 define Device/tl-wa830re-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA830RE
-    BOARDNAME := TL-WA901ND
-    DEVICE_PROFILE := TLWA830
-    TPLINK_HWID := 0x08300010
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA830RE v1
+  BOARDNAME := TL-WA901ND
+  DEVICE_PROFILE := TLWA830
+  TPLINK_HWID := 0x08300010
 endef
 
 define Device/tl-wa830re-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA830RE
-    BOARDNAME := TL-WA830RE-v2
-    DEVICE_PROFILE := TLWA830
-    TPLINK_HWID := 0x08300002
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA830RE v2
+  BOARDNAME := TL-WA830RE-v2
+  DEVICE_PROFILE := TLWA830
+  TPLINK_HWID := 0x08300002
 endef
 
 define Device/tl-wa850re-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA850RE
-    BOARDNAME := TL-WA850RE
-    DEVICE_PROFILE := TLWA850
-    TPLINK_HWID := 0x08500001
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA850RE v1
+  BOARDNAME := TL-WA850RE
+  DEVICE_PROFILE := TLWA850
+  TPLINK_HWID := 0x08500001
+endef
+
+define Device/tl-wa850re-v2
+  $(Device/tplink)
+  DEVICE_TITLE := TP-LINK TL-WA850RE v2
+  DEVICE_PACKAGES := rssileds
+  BOARDNAME := TL-WA850RE-V2
+  DEVICE_PROFILE := TLWA850
+  TPLINK_BOARD_NAME := TLWA850REV2
+  TPLINK_HWID := 0x08500002
+  KERNEL := kernel-bin | patch-cmdline | lzma | mktplinkfw-kernel
+  IMAGE/sysupgrade.bin := append-rootfs | tplink-safeloader sysupgrade
+  IMAGE/factory.bin := append-rootfs | tplink-safeloader factory
+  MTDPARTS := spi0.0:128k(u-boot)ro,1344k(kernel),2304k(rootfs),256k(config)ro,64k(art)ro,3648k@0x20000(firmware)
 endef
 
 define Device/tl-wa860re-v1
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA860RE
-    BOARDNAME := TL-WA860RE
-    DEVICE_PROFILE := TLWA860
-    TPLINK_HWID := 0x08600001
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA860RE v1
+  BOARDNAME := TL-WA860RE
+  DEVICE_PROFILE := TLWA860
+  TPLINK_HWID := 0x08600001
 endef
-TARGET_DEVICES += tl-wa801nd-v1 tl-wa801nd-v2 tl-wa801nd-v3 tl-wa830re-v1 tl-wa830re-v2 tl-wa850re-v1 tl-wa860re-v1
+TARGET_DEVICES += tl-wa801nd-v1 tl-wa801nd-v2 tl-wa801nd-v3 tl-wa830re-v1 tl-wa830re-v2 tl-wa850re-v1 tl-wa850re-v2 tl-wa860re-v1
 
 define Device/tl-wa901nd-v1
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA901N/ND v1
-    BOARDNAME := TL-WA901ND
-    DEVICE_PROFILE := TLWA901
-    TPLINK_HWID := 0x09010001
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA901N/ND v1
+  BOARDNAME := TL-WA901ND
+  DEVICE_PROFILE := TLWA901
+  TPLINK_HWID := 0x09010001
 endef
 
 define Device/tl-wa901nd-v2
-    $(Device/tplink-4m)
-    DEVICE_TITLE := TP-LINK TL-WA901N/ND v2
-    BOARDNAME := TL-WA901ND-v2
-    DEVICE_PROFILE := TLWA901
-    TPLINK_HWID := 0x09010002
+  $(Device/tplink-4m)
+  DEVICE_TITLE := TP-LINK TL-WA901N/ND v2
+  BOARDNAME := TL-WA901ND-v2
+  DEVICE_PROFILE := TLWA901
+  TPLINK_HWID := 0x09010002
 endef
 
 define Device/tl-wa901nd-v3
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA901N/ND v3
-    BOARDNAME := TL-WA901ND-v3
-    DEVICE_PROFILE := TLWA901
-    TPLINK_HWID := 0x09010003
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA901N/ND v3
+  BOARDNAME := TL-WA901ND-v3
+  DEVICE_PROFILE := TLWA901
+  TPLINK_HWID := 0x09010003
 endef
 
 define Device/tl-wa901nd-v4
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA901N/ND v4
-    BOARDNAME := TL-WA901ND-v4
-    DEVICE_PROFILE := TLWA901
-    TPLINK_HWID := 0x09010004
-    IMAGE/factory.bin := append-rootfs | mktplinkfw factory -C EU
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA901N/ND v4
+  BOARDNAME := TL-WA901ND-v4
+  DEVICE_PROFILE := TLWA901
+  TPLINK_HWID := 0x09010004
+  IMAGE/factory.bin := append-rootfs | mktplinkfw factory -C EU
 endef
 
 TARGET_DEVICES += tl-wa901nd-v1 tl-wa901nd-v2 tl-wa901nd-v3 tl-wa901nd-v4
 
 define Device/tl-wa7210n-v2
-    $(Device/tplink-4mlzma)
-    DEVICE_TITLE := TP-LINK TL-WA7210N
-    DEVICE_PACKAGES := rssileds kmod-ledtrig-netdev
-    BOARDNAME := TL-WA7210N-v2
-    DEVICE_PROFILE := TLWA7210
-    TPLINK_HWID := 0x72100002
-    CONSOLE := ttyATH0,115200
+  $(Device/tplink-4mlzma)
+  DEVICE_TITLE := TP-LINK TL-WA7210N v2
+  DEVICE_PACKAGES := rssileds kmod-ledtrig-netdev
+  BOARDNAME := TL-WA7210N-v2
+  DEVICE_PROFILE := TLWA7210
+  TPLINK_HWID := 0x72100002
+  CONSOLE := ttyATH0,115200
 endef
 TARGET_DEVICES += tl-wa7210n-v2
-
-define Device/wpa8630
-    $(Device/tplink-8mlzma)
-    DEVICE_TITLE := TP-LINK WPA8630
-    DEVICE_PACKAGES := kmod-ath10k ath10k-firmware-qca988x
-    BOARDNAME := WPA8630
-    DEVICE_PROFILE := WPA8630
-    TPLINK_HWID := 0x86300001
-    MTDPARTS = spi0.0:64k(u-boot)ro,1280k(kernel),6720k(rootfs),64k(mib0)ro,64k(ART)ro,8000k@0x10000(firmware)
-    IMAGE/sysupgrade.bin := append-rootfs | mktplinkfw sysupgrade -a 0x10000
-endef
-TARGET_DEVICES += wpa8630