From ed72c5f846941dcca3eab1d72c48472b383752e9 Mon Sep 17 00:00:00 2001 From: John Crispin Date: Tue, 19 Jan 2016 10:16:04 +0000 Subject: [PATCH] ar71xx: add support for Netgear WPN824N Add support for Netgear WPN824N. Hardware specs: * AR7240, 4 LAN ports, 1 WAN port * AR9285 WLAN * 32 MB RAM * 4 MB Flash * 16 LEDs (LAN, WAN and Power/Status contain two LEDs for dual color effect) * 3 Buttons (not supported) Signed-off-by: Hartmut Knaack SVN-Revision: 48356 --- .../ar71xx/base-files/etc/board.d/01_leds | 20 ++- .../ar71xx/base-files/etc/board.d/02_network | 3 +- target/linux/ar71xx/base-files/etc/diag.sh | 3 +- target/linux/ar71xx/base-files/lib/ar71xx.sh | 3 + .../lib/preinit/05_set_preinit_iface_ar71xx | 1 + .../ar71xx/base-files/lib/upgrade/platform.sh | 3 +- .../files/arch/mips/ath79/Kconfig.openwrt | 2 +- .../files/arch/mips/ath79/mach-wnr2000-v3.c | 124 +++++++++++++++++- .../ar71xx/files/arch/mips/ath79/machtypes.h | 1 + .../linux/ar71xx/generic/profiles/netgear.mk | 10 ++ target/linux/ar71xx/image/Makefile | 1 + .../drivers/mtd/mtdsplit/mtdsplit_uimage.c | 2 + 12 files changed, 166 insertions(+), 7 deletions(-) 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 cfb42a590a..151eac2db8 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/01_leds +++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds @@ -684,7 +684,25 @@ wnr2000-v4) ucidef_set_led_switch "lan3" "LAN3" "netgear:amber:lan3" "switch0" "0x08" ucidef_set_led_switch "lan4" "LAN4" "netgear:amber:lan4" "switch0" "0x10" ucidef_set_led_usbdev "usb" "USB" "netgear:amber:status" "1-1" - ;; + ;; + +wpn824n) + ucidef_set_led_netdev "wan-amber" "WAN (amber)" "netgear:amber:wan" "eth0" + ucidef_set_led_wlan "wlan" "WLAN" "netgear:blue:wlan" "phy0tpt" + ucidef_set_led_switch "lan1amber" "LAN1 (amber)" "netgear:amber:lan1" "switch0" "0x02" + ucidef_set_led_switch "lan2amber" "LAN2 (amber)" "netgear:amber:lan2" "switch0" "0x04" + ucidef_set_led_switch "lan3amber" "LAN3 (amber)" "netgear:amber:lan3" "switch0" "0x08" + ucidef_set_led_switch "lan4amber" "LAN4 (amber)" "netgear:amber:lan4" "switch0" "0x10" + ucidef_set_led_default "lan1green" "LAN1 (green)" "netgear:green:lan1" "0" + ucidef_set_led_default "lan2green" "LAN2 (green)" "netgear:green:lan2" "0" + ucidef_set_led_default "lan3green" "LAN3 (green)" "netgear:green:lan3" "0" + ucidef_set_led_default "lan4green" "LAN4 (green)" "netgear:green:lan4" "0" + ucidef_set_led_default "wan-green" "WAN (green)" "netgear:green:wan" "0" + ucidef_set_led_default "wps1" "WPS1" "netgear:blue:wps1" "0" + ucidef_set_led_default "wps2" "WPS2" "netgear:blue:wps2" "0" + ucidef_set_led_default "status" "STATUS" "netgear:amber:status" "0" + ucidef_set_led_default "test" "TEST" "netgear:amber:test" "0" + ;; wzr-hp-ag300h) ucidef_set_led_default "diag" "DIAG" "buffalo:red:diag" "0" 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 190b6932a9..944ced3a16 100755 --- a/target/linux/ar71xx/base-files/etc/board.d/02_network +++ b/target/linux/ar71xx/base-files/etc/board.d/02_network @@ -227,7 +227,8 @@ wnr2000-v3 |\ wnr2000-v4 |\ wnr2200 |\ wnr612-v2 |\ -wnr1000-v2) +wnr1000-v2 |\ +wpn824n) ucidef_set_interfaces_lan_wan "eth1" "eth0" ucidef_add_switch "switch0" \ "0:lan:4" "1:lan:3" "2:lan:2" "3:lan:1" "4@eth1" # XXX: confirm! diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 13a0a98d30..c0e73ad28b 100644 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -370,7 +370,8 @@ get_status_led() { wnr2000 | \ wnr2200 |\ wnr612-v2 |\ - wnr1000-v2) + wnr1000-v2 |\ + wpn824n) status_led="netgear:green:power" ;; wp543) diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index 678482eb15..34d5741323 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -974,6 +974,9 @@ ar71xx_board_detect() { *"WNR1000 V2") name="wnr1000-v2" ;; + *WPN824N) + name="wpn824n" + ;; *WRT160NL) name="wrt160nl" ;; diff --git a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx index 38a0382d00..c4177e1099 100644 --- a/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx +++ b/target/linux/ar71xx/base-files/lib/preinit/05_set_preinit_iface_ar71xx @@ -41,6 +41,7 @@ set_preinit_iface() { wnr2200 |\ wnr612-v2 |\ wnr1000-v2 |\ + wpn824n |\ wpe72) ifname=eth1 ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 1f6eaf2331..0276a69467 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -431,7 +431,8 @@ platform_check_image() { wndr3700 | \ wnr2000-v3 | \ wnr612-v2 | \ - wnr1000-v2) + wnr1000-v2 | \ + wpn824n) local hw_magic hw_magic="$(ar71xx_get_mtd_part_magic firmware)" diff --git a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt index cdd4fa2dc2..da2641440e 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt +++ b/target/linux/ar71xx/files/arch/mips/ath79/Kconfig.openwrt @@ -794,7 +794,7 @@ config ATH79_MACH_WNR2000 select ATH79_DEV_WMAC config ATH79_MACH_WNR2000_V3 - bool "NETGEAR WNR2000 V3/WNR612 v2/WNR1000 v2 board support" + bool "NETGEAR WNR2000 V3/WNR612 v2/WNR1000 v2/WPN824N board support" select SOC_AR724X select ATH79_DEV_AP9X_PCI if PCI select ATH79_DEV_ETH diff --git a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2000-v3.c b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2000-v3.c index 2e14782200..205c2e7d5a 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2000-v3.c +++ b/target/linux/ar71xx/files/arch/mips/ath79/mach-wnr2000-v3.c @@ -1,7 +1,8 @@ /* - * NETGEAR WNR2000v3/WNR612v2/WNR1000v2 board support + * NETGEAR WNR2000v3/WNR612v2/WNR1000v2/WPN824N board support * - * Copytight (C) 2013 Mathieu Olivari + * Copyright (C) 2015 Hartmut Knaack + * Copyright (C) 2013 Mathieu Olivari * Copyright (C) 2008-2009 Gabor Juhos * Copyright (C) 2008 Imre Kaloz * Copyright (C) 2008-2009 Andy Boyett @@ -15,6 +16,8 @@ #include #include +#include /* needed to disable switch LEDs */ +#include "common.h" /* needed to disable switch LEDs */ #include "dev-ap9x-pci.h" #include "dev-eth.h" @@ -34,6 +37,29 @@ #define WNR1000V2_GPIO_LED_PWR_AMBER 1 #define WNR1000V2_GPIO_LED_PWR_GREEN 11 +/* Connected through AR7240 */ +#define WPN824N_GPIO_LED_WAN_AMBER 0 +#define WPN824N_GPIO_LED_STATUS_AMBER 1 +#define WPN824N_GPIO_LED_LAN1_AMBER 6 /* AR724X_GPIO_FUNC_JTAG_DISABLE */ +#define WPN824N_GPIO_LED_LAN2_AMBER 7 /* AR724X_GPIO_FUNC_JTAG_DISABLE */ +#define WPN824N_GPIO_LED_LAN3_AMBER 8 /* AR724X_GPIO_FUNC_JTAG_DISABLE */ +#define WPN824N_GPIO_LED_LAN4_AMBER 12 +#define WPN824N_GPIO_LED_LAN1_GREEN 13 +#define WPN824N_GPIO_LED_LAN2_GREEN 14 +#define WPN824N_GPIO_LED_LAN3_GREEN 15 /* AR724X_GPIO_FUNC_CLK_OBS3_EN */ +#define WPN824N_GPIO_LED_LAN4_GREEN 16 +#define WPN824N_GPIO_LED_WAN_GREEN 17 + +/* Connected through AR9285 */ +#define WPN824N_WGPIO_LED_PWR_GREEN 0 +#define WPN824N_WGPIO_LED_WLAN_BLUE 1 +#define WPN824N_WGPIO_LED_WPS1_BLUE 5 +#define WPN824N_WGPIO_LED_WPS2_BLUE 9 +#define WPN824N_WGPIO_LED_TEST_AMBER 10 +#define WPN824N_WGPIO_BTN_PUSH 6 /* currently unused */ +#define WPN824N_WGPIO_BTN_RESET 7 /* currently unused */ +#define WPN824N_WGPIO_BTN_WLAN 8 /* currently unused */ + #define WNR2000V3_KEYS_POLL_INTERVAL 20 /* msecs */ #define WNR2000V3_KEYS_DEBOUNCE_INTERVAL (3 * WNR2000V3_KEYS_POLL_INTERVAL) @@ -73,6 +99,78 @@ static struct gpio_led wnr1000v2_leds_gpio[] __initdata = { } }; +static struct gpio_led wpn824n_leds_gpio[] __initdata = { + { + .name = "netgear:amber:wan", + .gpio = WPN824N_GPIO_LED_WAN_AMBER, + .active_low = 1, + }, { + .name = "netgear:amber:status", + .gpio = WPN824N_GPIO_LED_STATUS_AMBER, + .active_low = 1, + }, { + .name = "netgear:amber:lan1", + .gpio = WPN824N_GPIO_LED_LAN1_AMBER, + .active_low = 1, + }, { + .name = "netgear:amber:lan2", + .gpio = WPN824N_GPIO_LED_LAN2_AMBER, + .active_low = 1, + }, { + .name = "netgear:amber:lan3", + .gpio = WPN824N_GPIO_LED_LAN3_AMBER, + .active_low = 1, + }, { + .name = "netgear:amber:lan4", + .gpio = WPN824N_GPIO_LED_LAN4_AMBER, + .active_low = 1, + }, { + .name = "netgear:green:lan1", + .gpio = WPN824N_GPIO_LED_LAN1_GREEN, + .active_low = 1, + }, { + .name = "netgear:green:lan2", + .gpio = WPN824N_GPIO_LED_LAN2_GREEN, + .active_low = 1, + }, { + .name = "netgear:green:lan3", + .gpio = WPN824N_GPIO_LED_LAN3_GREEN, + .active_low = 1, + }, { + .name = "netgear:green:lan4", + .gpio = WPN824N_GPIO_LED_LAN4_GREEN, + .active_low = 1, + }, { + .name = "netgear:green:wan", + .gpio = WPN824N_GPIO_LED_WAN_GREEN, + .active_low = 1, + } +}; + +static struct gpio_led wpn824n_wmac_leds_gpio[] = { + { + .name = "netgear:green:power", + .gpio = WPN824N_WGPIO_LED_PWR_GREEN, + .active_low = 1, + }, { + .name = "netgear:blue:wlan", + .gpio = WPN824N_WGPIO_LED_WLAN_BLUE, + .active_low = 1, + }, { + .name = "netgear:blue:wps1", + .gpio = WPN824N_WGPIO_LED_WPS1_BLUE, + .active_low = 1, + }, { + .name = "netgear:blue:wps2", + .gpio = WPN824N_WGPIO_LED_WPS2_BLUE, + .active_low = 1, + }, { + .name = "netgear:amber:test", + .gpio = WPN824N_WGPIO_LED_TEST_AMBER, + .active_low = 1, + } +}; + static struct gpio_keys_button wnr2000v3_gpio_keys[] __initdata = { { .desc = "wps", @@ -138,3 +236,25 @@ static void __init wnr1000v2_setup(void) } MIPS_MACHINE(ATH79_MACH_WNR1000_V2, "WNR1000V2", "NETGEAR WNR1000 V2", wnr1000v2_setup); + +static void __init wpn824n_setup(void) +{ + ath79_gpio_function_setup(AR724X_GPIO_FUNC_JTAG_DISABLE, + AR724X_GPIO_FUNC_ETH_SWITCH_LED0_EN | + AR724X_GPIO_FUNC_ETH_SWITCH_LED1_EN | + AR724X_GPIO_FUNC_ETH_SWITCH_LED2_EN | + AR724X_GPIO_FUNC_ETH_SWITCH_LED3_EN | + AR724X_GPIO_FUNC_ETH_SWITCH_LED4_EN | + AR724X_GPIO_FUNC_CLK_OBS3_EN); + + wnr_common_setup(); + + ath79_register_leds_gpio(-1, ARRAY_SIZE(wpn824n_leds_gpio), + wpn824n_leds_gpio); + + ap9x_pci_setup_wmac_led_pin(0, WPN824N_WGPIO_LED_WLAN_BLUE); + ap9x_pci_setup_wmac_leds(0, wpn824n_wmac_leds_gpio, + ARRAY_SIZE(wpn824n_wmac_leds_gpio)); +} + +MIPS_MACHINE(ATH79_MACH_WPN824N, "WPN824N", "NETGEAR WPN824N", wpn824n_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h index d12829f4de..a170e8d12d 100644 --- a/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h +++ b/target/linux/ar71xx/files/arch/mips/ath79/machtypes.h @@ -228,6 +228,7 @@ enum ath79_mach_type { ATH79_MACH_WNR2200, /* NETGEAR WNR2200 */ ATH79_MACH_WNR612_V2, /* NETGEAR WNR612 v2 */ ATH79_MACH_WNR1000_V2, /* NETGEAR WNR1000 v2 */ + ATH79_MACH_WPN824N, /* NETGEAR WPN824N */ ATH79_MACH_WP543, /* Compex WP543 */ ATH79_MACH_WPE72, /* Compex WPE72 */ ATH79_MACH_WPJ344, /* Compex WPJ344 */ diff --git a/target/linux/ar71xx/generic/profiles/netgear.mk b/target/linux/ar71xx/generic/profiles/netgear.mk index 16b1087635..ca22a18dd5 100644 --- a/target/linux/ar71xx/generic/profiles/netgear.mk +++ b/target/linux/ar71xx/generic/profiles/netgear.mk @@ -82,3 +82,13 @@ define Profile/WNR2200/Description endef $(eval $(call Profile,WNR2200)) + +define Profile/WPN824N + NAME:=NETGEAR WPN824N +endef + +define Profile/WPN824N/Description + Package set optimized for the NETGEAR WPN824N +endef + +$(eval $(call Profile,WPN824N)) diff --git a/target/linux/ar71xx/image/Makefile b/target/linux/ar71xx/image/Makefile index 1ec72dc739..6483284f97 100644 --- a/target/linux/ar71xx/image/Makefile +++ b/target/linux/ar71xx/image/Makefile @@ -2436,6 +2436,7 @@ $(eval $(call SingleProfile,Netgear,64kraw,REALWNR612V2,wnr612v2,WNR612V2,ttyS0, $(eval $(call SingleProfile,Netgear,64kraw,N150R,n150r,WNR612V2,ttyS0,115200,$$(wnr2000v3_mtdlayout),0x32303631,N150R,"",)) $(eval $(call SingleProfile,Netgear,64kraw,REALWNR1000V2,wnr1000v2,WNR1000V2,ttyS0,115200,$$(wnr2000v3_mtdlayout),0x31303031,WNR1000V2,"",)) $(eval $(call SingleProfile,Netgear,64kraw,WNR1000V2_VC,wnr1000v2-vc,WNR1000V2,ttyS0,115200,$$(wnr2000v3_mtdlayout),0x31303030,WNR1000V2-VC,"",)) +$(eval $(call SingleProfile,Netgear,64kraw,WPN824N,wpn824n,WPN824N,ttyS0,115200,$$(wnr2000v3_mtdlayout),0x31313030,WPN824N,"" NA,)) $(eval $(call SingleProfile,OpenMesh,squashfs-only,OM2P,om2p,,,,OM2P)) $(eval $(call SingleProfile,OpenMesh,squashfs-only,OM5P,om5p,,,,OM5P)) diff --git a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c index 2602f98b55..b815869a6b 100644 --- a/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c +++ b/target/linux/generic/files/drivers/mtd/mtdsplit/mtdsplit_uimage.c @@ -252,6 +252,7 @@ static struct mtd_part_parser uimage_generic_parser = { #define FW_MAGIC_WNR1000V2_VC 0x31303030 #define FW_MAGIC_WNDR3700 0x33373030 #define FW_MAGIC_WNDR3700V2 0x33373031 +#define FW_MAGIC_WPN824N 0x31313030 static ssize_t uimage_verify_wndr3700(u_char *buf, size_t len) { @@ -266,6 +267,7 @@ static ssize_t uimage_verify_wndr3700(u_char *buf, size_t len) case FW_MAGIC_WNR2200: case FW_MAGIC_WNDR3700: case FW_MAGIC_WNDR3700V2: + case FW_MAGIC_WPN824N: break; case FW_MAGIC_WNR2000V4: expected_type = IH_TYPE_KERNEL; -- 2.30.2