[source] ar71xx: Added missing support for Linksys E2100L

LEDE Commits lede-commits at lists.infradead.org
Wed Dec 14 09:42:59 PST 2016


jow pushed a commit to source.git, branch master:
https://git.lede-project.org/21cb84435a9fcc1b94b30a672d6d3a8751fe9afb

commit 21cb84435a9fcc1b94b30a672d6d3a8751fe9afb
Author: Gad Krumholz <gad.krumholz at gmail.com>
AuthorDate: Sun Nov 27 00:52:53 2016 -0600

    ar71xx: Added missing support for Linksys E2100L
    
    It's based on the WRT160NL according to
    https://wiki.openwrt.org/toh/linksys/e2100l
    
    Based on research done here: https://forum.openwrt.org/viewtopic.php?id=24244
    and here: https://forum.openwrt.org/viewtopic.php?pid=120791#p120791 this patch
    was conceived.
    
    Signed-off-by: Gad Krumholz <gad.krumholz at gmail.com>
    [Jo-Philipp Wich: fix ordering, move addpattern change into separate commit]
    Signed-off-by: Jo-Philipp Wich <jo at mein.io>
---
 target/linux/ar71xx/base-files/lib/ar71xx.sh       |   3 +
 .../ar71xx/base-files/lib/upgrade/platform.sh      |   1 +
 target/linux/ar71xx/config-4.4                     |   1 +
 .../ar71xx/files/arch/mips/ath79/Kconfig.openwrt   |  11 ++
 .../ar71xx/files/arch/mips/ath79/mach-e2100l.c     | 126 +++++++++++++++++++++
 target/linux/ar71xx/image/legacy.mk                |   1 +
 6 files changed, 143 insertions(+)

diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh
index a543d3e..63fd188 100755
--- a/target/linux/ar71xx/base-files/lib/ar71xx.sh
+++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh
@@ -577,6 +577,9 @@ ar71xx_board_detect() {
 	*"DW33D")
 		name="dw33d"
 		;;
+	*E2100L)
+		name="e2100l"
+		;;
 	*"EAP120")
 		name="eap120"
 		tplink_pharos_board_detect
diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
index b028cd3..52719c0 100755
--- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
+++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh
@@ -495,6 +495,7 @@ platform_check_image() {
 
 		return 0
 		;;
+	e2100l|\
 	mynet-rext|\
 	wrt160nl)
 		cybertan_check_image "$1" && return 0
diff --git a/target/linux/ar71xx/config-4.4 b/target/linux/ar71xx/config-4.4
index f7df5f8..a8c756f 100644
--- a/target/linux/ar71xx/config-4.4
+++ b/target/linux/ar71xx/config-4.4
@@ -89,6 +89,7 @@ CONFIG_ATH79_MACH_DOMYWIFI_DW33D=y
 CONFIG_ATH79_MACH_DR344=y
 CONFIG_ATH79_MACH_DR531=y
 CONFIG_ATH79_MACH_DRAGINO2=y
+CONFIG_ATH79_MACH_E2100L=y
 CONFIG_ATH79_MACH_EAP120=y
 CONFIG_ATH79_MACH_EAP300V2=y
 CONFIG_ATH79_MACH_EAP7660D=y
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
index 86bfa14..55846c7 100644
--- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
+++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt
@@ -587,6 +587,17 @@ config ATH79_MACH_DRAGINO2
 	select ATH79_DEV_ETH
 	select ATH79_DEV_USB
 
+config ATH79_MACH_E2100L
+	bool "Linksys E2100L board support"
+	select SOC_AR913X
+	select ATH79_DEV_ETH
+	select ATH79_DEV_GPIO_BUTTONS
+	select ATH79_DEV_LEDS_GPIO
+	select ATH79_DEV_M25P80
+	select ATH79_DEV_USB
+	select ATH79_DEV_WMAC
+	select ATH79_NVRAM
+
 config ATH79_MACH_ESR900
 	bool "EnGenius ESR900 board support"
 	select SOC_QCA955X
diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-e2100l.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-e2100l.c
new file mode 100644
index 0000000..c090834
--- /dev/null
+++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-e2100l.c
@@ -0,0 +1,126 @@
+/*
+ *  Linksys E2100L board support
+ *
+ *  Copyright (C) 2009-2012 Gabor Juhos <juhosg at openwrt.org>
+ *
+ *  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-gpio-buttons.h"
+#include "dev-leds-gpio.h"
+#include "dev-m25p80.h"
+#include "dev-usb.h"
+#include "dev-wmac.h"
+#include "nvram.h"
+#include "machtypes.h"
+
+#define E2100L_GPIO_LED_POWER		14
+#define E2100L_GPIO_LED_WPS_AMBER	9
+#define E2100L_GPIO_LED_WPS_BLUE	8
+#define E2100L_GPIO_LED_WLAN		6
+
+#define E2100L_GPIO_BTN_WPS		7
+#define E2100L_GPIO_BTN_RESET		21
+
+#define E2100L_KEYS_POLL_INTERVAL	20	/* msecs */
+#define E2100L_KEYS_DEBOUNCE_INTERVAL	(3 * E2100L_KEYS_POLL_INTERVAL)
+
+#define E2100L_NVRAM_ADDR	0x1f7e0000
+#define E2100L_NVRAM_SIZE	0x10000
+
+static const char *e2100l_part_probes[] = {
+	"cybertan",
+	NULL,
+};
+
+static struct flash_platform_data e2100l_flash_data = {
+	.part_probes	= e2100l_part_probes,
+};
+
+static struct gpio_led e2100l_leds_gpio[] __initdata = {
+	{
+		.name		= "e2100l:blue:power",
+		.gpio		= E2100L_GPIO_LED_POWER,
+		.active_low	= 1,
+		.default_trigger = "default-on",
+	}, {
+		.name		= "e2100l:amber:wps",
+		.gpio		= E2100L_GPIO_LED_WPS_AMBER,
+		.active_low	= 1,
+	}, {
+		.name		= "e2100l:blue:wps",
+		.gpio		= E2100L_GPIO_LED_WPS_BLUE,
+		.active_low	= 1,
+	}, {
+		.name		= "e2100l:blue:wlan",
+		.gpio		= E2100L_GPIO_LED_WLAN,
+		.active_low	= 1,
+	}
+};
+
+static struct gpio_keys_button e2100l_gpio_keys[] __initdata = {
+	{
+		.desc		= "reset",
+		.type		= EV_KEY,
+		.code		= KEY_RESTART,
+		.debounce_interval = E2100L_KEYS_DEBOUNCE_INTERVAL,
+		.gpio		= E2100L_GPIO_BTN_RESET,
+		.active_low	= 1,
+	}, {
+		.desc		= "wps",
+		.type		= EV_KEY,
+		.code		= KEY_WPS_BUTTON,
+		.debounce_interval = E2100L_KEYS_DEBOUNCE_INTERVAL,
+		.gpio		= E2100L_GPIO_BTN_WPS,
+		.active_low	= 1,
+	}
+};
+
+static void __init e2100l_setup(void)
+{
+	const char *nvram = (char *) KSEG1ADDR(E2100L_NVRAM_ADDR);
+	u8 *eeprom = (u8 *) KSEG1ADDR(0x1fff1000);
+	u8 mac[6];
+
+	if (ath79_nvram_parse_mac_addr(nvram, E2100L_NVRAM_SIZE,
+				       "lan_hwaddr=", mac) == 0) {
+		ath79_init_mac(ath79_eth0_data.mac_addr, mac, 0);
+		ath79_init_mac(ath79_eth1_data.mac_addr, mac, 1);
+	}
+
+	ath79_register_mdio(0, 0x0);
+
+	ath79_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+	ath79_eth0_data.phy_mask = 0x01;
+
+	ath79_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RMII;
+	ath79_eth1_data.phy_mask = 0x10;
+
+	ath79_register_eth(0);
+	ath79_register_eth(1);
+
+	ath79_register_m25p80(&e2100l_flash_data);
+
+	ath79_register_usb();
+
+	if (ath79_nvram_parse_mac_addr(nvram, E2100L_NVRAM_SIZE,
+				       "wl0_hwaddr=", mac) == 0)
+		ath79_register_wmac(eeprom, mac);
+	else
+		ath79_register_wmac(eeprom, NULL);
+
+	ath79_register_leds_gpio(-1, ARRAY_SIZE(e2100l_leds_gpio),
+				 e2100l_leds_gpio);
+
+	ath79_register_gpio_keys_polled(-1, E2100L_KEYS_POLL_INTERVAL,
+					ARRAY_SIZE(e2100l_gpio_keys),
+					e2100l_gpio_keys);
+}
+
+MIPS_MACHINE(ATH79_MACH_E2100L, "E2100L", "Linksys E2100L",
+	     e2100l_setup);
diff --git a/target/linux/ar71xx/image/legacy.mk b/target/linux/ar71xx/image/legacy.mk
index 226b66e..3259016 100644
--- a/target/linux/ar71xx/image/legacy.mk
+++ b/target/linux/ar71xx/image/legacy.mk
@@ -950,6 +950,7 @@ $(eval $(call SingleProfile,CameoDB120,64kraw,DIR835A1,dir-835-a1,DIR-835-A1,tty
 
 $(eval $(call SingleProfile,CameoDB120_8M,64kraw,TEW732BR,tew-732br,TEW-732BR,ttyS0,115200,"00DB120AR9341-RT-120906-NA"))
 
+$(eval $(call SingleProfile,CyberTANGZIP,64k,E2100L,e2100l,E2100L,ttyS0,115200,,1.00.01))
 $(eval $(call SingleProfile,CyberTANGZIP,64k,WRT160NL,wrt160nl,WRT160NL,ttyS0,115200,,1.00.01))
 
 $(eval $(call SingleProfile,CyberTANLZMA,64k,MYNETREXT,mynet-rext,MYNET-REXT,ttyS0,115200,$$(mynet_rext_mtdlayout) root=31:2,1.00.01))



More information about the lede-commits mailing list