[LEDE-DEV] [PATCH] ar71xx: add Engenius ENH200EXT support

Paul Oranje por at xs4all.nl
Fri Mar 31 13:38:39 PDT 2017


This POE access point suited for outside usage needs an external antenna.
According FCC documentation the ENH200EXT (needs external antenna) and the ENH200 (with internal antenna) are electrically equal to the Allnet ALL0258N.

The stock image does not allow install of a LEDE factory image, but an initramfs image (lede-ar71xx-generic-enh200ext-initramfs-uImage.bin) can be loaded via u-boot recovery procedure (long press reset at power-on until all LEDS burn). The u-boot recovery procedure boots an image named vmlinux-art-ramdisk from 192.168.1.101.
Once booted the sysupgrade image can be flashed from the booted iniramfs LEDE.

Only abnormality is that for some unknown reason the txpower cannot be set higher than 16 dBm whereas the Engenius stock firmware allows a maximum of 27 dBm.

Signed-off-by: Paul Oranje <por at xs4all.nl>
---
package/boot/uboot-envtools/files/ar71xx           |  1 +
target/linux/ar71xx/base-files/etc/board.d/01_leds |  3 +-
.../linux/ar71xx/base-files/etc/board.d/02_network |  1 +
target/linux/ar71xx/base-files/lib/ar71xx.sh       |  3 +
.../ar71xx/base-files/lib/upgrade/platform.sh      |  6 +-
target/linux/ar71xx/config-4.4                     |  1 +
.../ar71xx/files/arch/mips/ath79/Kconfig.openwrt   |  9 +++
target/linux/ar71xx/files/arch/mips/ath79/Makefile |  1 +
.../ar71xx/files/arch/mips/ath79/mach-enh200ext.c  | 89 ++++++++++++++++++++++
.../linux/ar71xx/files/arch/mips/ath79/machtypes.h |  1 +
target/linux/ar71xx/image/legacy-devices.mk        |  6 ++
target/linux/ar71xx/image/legacy.mk                |  2 +
target/linux/ar71xx/mikrotik/config-default        |  1 +
target/linux/ar71xx/nand/config-default            |  1 +
14 files changed, 122 insertions(+), 3 deletions(-)
create mode 100644 target/linux/ar71xx/files/arch/mips/ath79/mach-enh200ext.c

diff --git a/package/boot/uboot-envtools/files/ar71xx b/package/boot/uboot-envtools/files/ar71xx
index 3a5d269..a104c3a 100644
--- a/package/boot/uboot-envtools/files/ar71xx
+++ b/package/boot/uboot-envtools/files/ar71xx
@@ -27,6 +27,7 @@ cpe870|\
cr3000|\
cr5000|\
eap300v2|\
+enh200ext|\
gl-ar300m|\
hornet-ub|\
hornet-ub-x2|\
diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds
index 686ae31..cf9c3ae 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds
+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds
@@ -28,7 +28,8 @@ alfa-nx)
	ucidef_set_led_netdev "lan" "LAN" "alfa:green:led_3" "eth1"
	;;
all0258n|\
-all0315n)
+all0315n|\
+enh200ext)
	ucidef_set_rssimon "wlan0" "200000" "1"
	ucidef_set_led_rssi "rssilow" "RSSILOW" "$board:red:rssilow" "wlan0" "1" "40" "0" "6"
	ucidef_set_led_rssi "rssimedium" "RSSIMEDIUM" "$board:yellow:rssimedium" "wlan0" "30" "80" "-29" "5"
diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
index 20b34e8..014404e 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/02_network
+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
@@ -155,6 +155,7 @@ ar71xx_setup_interfaces()
	dlan-hotspot|\
	dlan-pro-500-wp|\
	dr344|\
+	enh200ext|\
	ja76pf2|\
	rocket-m-ti|\
	ubnt-unifi-outdoor)
diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index 4951e5b..f365feb 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -619,6 +619,9 @@ ar71xx_board_detect() {
	*"EmbWir-Dorin-Router")
		name="ew-dorin-router"
		;;
+	*"ENH200EXT")
+		name="enh200ext"
+		;;
	*"EPG5000")
		name="epg5000"
		;;
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index 364a32f..b4a84c2 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -332,7 +332,8 @@ platform_check_image() {
	cap324|\
	cap4200ag|\
	cr3000|\
-	cr5000)
+	cr5000|\
+	enh200ext)
		platform_check_image_allnet "$1" && return 0
		return 1
		;;
@@ -721,7 +722,8 @@ platform_do_upgrade() {
	local board=$(ar71xx_board_name)

	case "$board" in
-	all0258n)
+	all0258n|\
+	enh200ext)
		platform_do_upgrade_allnet "0x9f050000" "$ARGV"
		;;
	all0305|\
diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4
index 68b408a..3a74f8f 100644
--- a/target/linux/ar71xx/config-4.4
+++ b/target/linux/ar71xx/config-4.4
@@ -99,6 +99,7 @@ CONFIG_ATH79_MACH_EAP300V2=y
CONFIG_ATH79_MACH_EAP7660D=y
CONFIG_ATH79_MACH_EL_M150=y
CONFIG_ATH79_MACH_EL_MINI=y
+CONFIG_ATH79_MACH_ENH200EXT=y
CONFIG_ATH79_MACH_EPG5000=y
CONFIG_ATH79_MACH_ESR1750=y
CONFIG_ATH79_MACH_ESR900=y
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
index 1bf00bd..9ff545d 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
@@ -94,6 +94,15 @@ config ATH79_MACH_ALL0258N
	select ATH79_DEV_LEDS_GPIO
	select ATH79_DEV_M25P80

+config ATH79_MACH_ENH200EXT
+	bool "Engenius ENH200EXT support"
+	select SOC_AR724X
+	select ATH79_DEV_AP9X_PCI if PCI
+	select ATH79_DEV_ETH
+	select ATH79_DEV_GPIO_BUTTONS
+	select ATH79_DEV_LEDS_GPIO
+	select ATH79_DEV_M25P80
+
config ATH79_MACH_ALL0315N
	bool "Allnet ALL0315N support"
	select SOC_AR724X
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Makefile b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
index 7383244..7e6482c 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/Makefile
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Makefile
@@ -103,6 +103,7 @@ obj-$(CONFIG_ATH79_MACH_EAP300V2)		+= mach-eap300v2.o
obj-$(CONFIG_ATH79_MACH_EAP7660D)		+= mach-eap7660d.o
obj-$(CONFIG_ATH79_MACH_EL_M150)		+= mach-el-m150.o
obj-$(CONFIG_ATH79_MACH_EL_MINI)		+= mach-el-mini.o
+obj-$(CONFIG_ATH79_MACH_ENH200EXT)		+= mach-enh200ext.o
obj-$(CONFIG_ATH79_MACH_EPG5000)		+= mach-epg5000.o
obj-$(CONFIG_ATH79_MACH_ESR1750)		+= mach-esr1750.o
obj-$(CONFIG_ATH79_MACH_ESR900)			+= mach-esr900.o
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-enh200ext.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-enh200ext.c
new file mode 100644
index 0000000..68eb2fc
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-enh200ext.c
@@ -0,0 +1,89 @@
+/*
+ *  Engenius ENH200EXT support
+ *
+ *  Copyright (C) 2011 Daniel Golle <dgolle at allnet.de>
+ *  Copyright (C) 2017 Paul Oranje <por at xs4all.nl> (ENH200EXT is same device as ALL0258N)
+ *
+ *  This program is free software; you can redistribute it and/or modify it
+ *  under the terms of the GNU General Public License version 2 as published
+ *  by the Free Software Foundation.
+ */
+
+#include <asm/mach-ath79/ath79.h>
+
+#include "dev-eth.h"
+#include "dev-ap9x-pci.h"
+#include "dev-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "machtypes.h"
+
+/* found via /sys/gpio/... try and error */
+#define ENH200EXT_GPIO_BTN_RESET		1
+#define ENH200EXT_GPIO_LED_RSSIHIGH	13
+#define ENH200EXT_GPIO_LED_RSSIMEDIUM	15
+#define ENH200EXT_GPIO_LED_RSSILOW	14
+
+/* defaults taken from others machs */
+#define ENH200EXT_KEYS_POLL_INTERVAL	20	/* msecs */
+#define ENH200EXT_KEYS_DEBOUNCE_INTERVAL (3 * ENH200EXT_KEYS_POLL_INTERVAL)
+
+/* showed up in the original firmware's bootlog */
+#define ENH200EXT_SEC_PHYMASK BIT(3)
+
+static struct gpio_led enh200ext_leds_gpio[] __initdata = {
+	{
+		.name		= "enh200ext:green:rssihigh",
+		.gpio		= ENH200EXT_GPIO_LED_RSSIHIGH,
+		.active_low	= 1,
+	}, {
+		.name		= "enh200ext:yellow:rssimedium",
+		.gpio		= ENH200EXT_GPIO_LED_RSSIMEDIUM,
+		.active_low	= 1,
+	}, {
+		.name		= "enh200ext:red:rssilow",
+		.gpio		= ENH200EXT_GPIO_LED_RSSILOW,
+		.active_low	= 1,
+	}
+};
+
+static struct gpio_keys_button enh200ext_gpio_keys[] __initdata = {
+	{
+		.desc		= "reset",
+		.type		= EV_KEY,
+		.code		= KEY_RESTART,
+		.debounce_interval = ENH200EXT_KEYS_DEBOUNCE_INTERVAL,
+		.gpio		= ENH200EXT_GPIO_BTN_RESET,
+		.active_low	= 1,
+	}
+};
+
+static void __init enh200ext_setup(void)
+{
+	u8 *mac = (u8 *) KSEG1ADDR(0x1f7f0000);
+	u8 *ee =  (u8 *) KSEG1ADDR(0x1f7f1000);
+
+	ath79_register_m25p80(NULL);
+
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(enh200ext_leds_gpio),
+				 enh200ext_leds_gpio);
+
+	ath79_register_gpio_keys_polled(-1, ENH200EXT_KEYS_POLL_INTERVAL,
+					ARRAY_SIZE(enh200ext_gpio_keys),
+					enh200ext_gpio_keys);
+
+	ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
+	ath79_init_mac(ath79_eth1_data.mac_addr, mac, 0);
+
+	ath79_eth1_data.phy_mask = ENH200EXT_SEC_PHYMASK;
+
+	ath79_register_mdio(0, 0x0);
+
+	ath79_register_eth(0);
+	ath79_register_eth(1);
+
+	ap91_pci_init(ee, mac);
+}
+
+MIPS_MACHINE(ATH79_MACH_ENH200EXT, "ENH200EXT", "Engenius ENH200EXT",
+	     enh200ext_setup);
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
index 478a1a9..b49bb7b 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
+++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h
@@ -94,6 +94,7 @@ enum ath79_mach_type {
	ATH79_MACH_EBR_2310_C1,			/* D-link EBR-2310 rev. C1 */
	ATH79_MACH_EL_M150,			/* EasyLink EL-M150 */
	ATH79_MACH_EL_MINI,			/* EasyLink EL-MINI */
+	ATH79_MACH_ENH200EXT,			/* Engenius ENH200EXT */
	ATH79_MACH_EPG5000,			/* EnGenius EPG5000 */
	ATH79_MACH_ESR1750,			/* EnGenius ESR1750 */
	ATH79_MACH_ESR900,			/* EnGenius ESR900 */
diff --git a/target/linux/ar71xx/image/legacy-devices.mk b/target/linux/ar71xx/image/legacy-devices.mk
index 7497a1b..c119966 100644
--- a/target/linux/ar71xx/image/legacy-devices.mk
+++ b/target/linux/ar71xx/image/legacy-devices.mk
@@ -132,6 +132,12 @@ define LegacyDevice/DB120
endef
LEGACY_DEVICES += DB120

+define LegacyDevice/ENH200EXT
+  DEVICE_TITLE := Engenius ENH200EXT
+  DEVICE_PACKAGES := rssileds
+endef
+LEGACY_DEVICES += ENH200EXT
+
define LegacyDevice/EWDORINAP
  DEVICE_TITLE := Embedded Wireless Dorin Platform (4MB flash)
  DEVICE_PACKAGES := kmod-usb-core kmod-usb-ohci kmod-usb2 kmod-usb-ledtrig-usbport kmod-usb-storage
diff --git a/target/linux/ar71xx/image/legacy.mk b/target/linux/ar71xx/image/legacy.mk
index 1845cd0..0562532 100644
--- a/target/linux/ar71xx/image/legacy.mk
+++ b/target/linux/ar71xx/image/legacy.mk
@@ -255,6 +255,7 @@ dlan_pro_500_wp_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,64k(C
dlan_pro_1200_ac_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env)ro,64k(Config1)ro,64k(Config2)ro,15872k at 0x70000(firmware),64k(art)ro
cameo_ap94_mtdlayout=mtdparts=spi0.0:256k(uboot)ro,64k(config)ro,6208k(firmware),64k(caldata)ro,1600k(unknown)ro,64k at 0x7f0000(caldata_copy)
cameo_ap94_mtdlayout_fat=mtdparts=spi0.0:256k(uboot)ro,64k(config)ro,7808k(firmware),64k(caldata)ro,64k at 0x660000(caldata_orig),6208k at 0x50000(firmware_orig)
+enh200ext_mtdlayout=mtdparts=spi0.0:256k(u-boot)ro,64k(u-boot-env),6272k(firmware),1536k(failsafe),64k(art)ro
esr900_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,1408k(kernel),13248k(rootfs),1024k(manufacture)ro,64k(backup)ro,320k(storage)ro,64k(caldata)ro,14656k at 0x40000(firmware)
esr1750_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,1408k(kernel),13248k(rootfs),1024k(manufacture)ro,64k(backup)ro,320k(storage)ro,64k(caldata)ro,14656k at 0x40000(firmware)
epg5000_mtdlayout=mtdparts=spi0.0:192k(u-boot)ro,64k(u-boot-env)ro,1408k(kernel),13248k(rootfs),1024k(manufacture)ro,64k(backup)ro,320k(storage)ro,64k(caldata)ro,14656k at 0x40000(firmware)
@@ -903,6 +904,7 @@ $(eval $(call SingleProfile,AthLzma,64k,AP152_16M,ap152-16M,AP152,ttyS0,115200,$
$(eval $(call SingleProfile,AthLzma,64k,BXU2000N2,bxu2000n-2-a1,BXU2000n-2-A1,ttyS0,115200,$$(bxu2000n2_mtdlayout),RKuImage))
$(eval $(call SingleProfile,AthLzma,64k,CAP4200AG,cap4200ag,CAP4200AG,ttyS0,115200,$$(cap4200ag_mtdlayout),KRuImage))
$(eval $(call SingleProfile,AthLzma,64k,DB120,db120,DB120,ttyS0,115200,$$(db120_mtdlayout),RKuImage))
+$(eval $(call SingleProfile,AthLzma,64k,ENH200EXT,enh200ext,ENH200EXT,ttyS0,115200,$$(enh200ext_mtdlayout),KRuImage,65536))
$(eval $(call SingleProfile,AthLzma,64k,EWDORINAP,ew-dorin,EW-DORIN,ttyATH0,115200,$$(ew-dorin_mtdlayout_4M),KRuImage,65536))
$(eval $(call SingleProfile,AthLzma,64k,EWDORINRT,ew-dorin-router,EW-DORIN-ROUTER,ttyATH0,115200,$$(ew-dorin_mtdlayout_4M),KRuImage,65536))
$(eval $(call SingleProfile,AthLzma,64k,EWDORIN16M,ew-dorin-16M,EW-DORIN,ttyATH0,115200,$$(ew-dorin_mtdlayout_16M),KRuImage,65536))
diff --git a/target/linux/ar71xx/mikrotik/config-default b/target/linux/ar71xx/mikrotik/config-default
index cf6f754..0d77433 100644
--- a/target/linux/ar71xx/mikrotik/config-default
+++ b/target/linux/ar71xx/mikrotik/config-default
@@ -64,6 +64,7 @@
# CONFIG_ATH79_MACH_EAP7660D is not set
# CONFIG_ATH79_MACH_EL_M150 is not set
# CONFIG_ATH79_MACH_EL_MINI is not set
+# CONFIG_ATH79_MACH_ENH200EXT is not set
# CONFIG_ATH79_MACH_EPG5000 is not set
# CONFIG_ATH79_MACH_ESR1750 is not set
# CONFIG_ATH79_MACH_ESR900 is not set
diff --git a/target/linux/ar71xx/nand/config-default b/target/linux/ar71xx/nand/config-default
index 24e712c..4f0475a 100644
--- a/target/linux/ar71xx/nand/config-default
+++ b/target/linux/ar71xx/nand/config-default
@@ -62,6 +62,7 @@
# CONFIG_ATH79_MACH_EAP7660D is not set
# CONFIG_ATH79_MACH_EL_M150 is not set
# CONFIG_ATH79_MACH_EL_MINI is not set
+# CONFIG_ATH79_MACH_ENH200EXT is not set
# CONFIG_ATH79_MACH_EPG5000 is not set
# CONFIG_ATH79_MACH_ESR1750 is not set
# CONFIG_ATH79_MACH_ESR900 is not set
-- 
2.9.3



-- 
Paul Oranje
M	+31 (6) 21278389
T	+31 (20) 4941306
Achterlaan 20, 1027 AK Zunderdorp

GPG key ID 0xB833CA27







More information about the Lede-dev mailing list