diff --git a/target/linux/ar71xx/base-files/etc/diag.sh b/target/linux/ar71xx/base-files/etc/diag.sh index 6c40f62e83..feed265602 100755 --- a/target/linux/ar71xx/base-files/etc/diag.sh +++ b/target/linux/ar71xx/base-files/etc/diag.sh @@ -30,6 +30,9 @@ status_led_off() { get_status_led() { case $(ar71xx_board_name) in + alfa-nx) + status_led="alfa:green:led_8" + ;; ap81) status_led="ap81:green:status" ;; diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/leds b/target/linux/ar71xx/base-files/etc/uci-defaults/leds index 0fdab7b2a4..c637279fab 100755 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/leds +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/leds @@ -101,6 +101,11 @@ EOF board=$(ar71xx_board_name) case "$board" in +alfa-nx) + set_led_netdev "wan" "WAN" "alfa:green:led_2" "eth0" + set_led_netdev "lan" "LAN" "alfa:green:led_3" "eth1" + ;; + rb750) set_led_default "act" "act" "rb750:green:act" "1" set_led_netdev "port1" "port1" "rb750:green:port1" "eth1" diff --git a/target/linux/ar71xx/base-files/etc/uci-defaults/network b/target/linux/ar71xx/base-files/etc/uci-defaults/network index 48139642e0..ba556c1075 100755 --- a/target/linux/ar71xx/base-files/etc/uci-defaults/network +++ b/target/linux/ar71xx/base-files/etc/uci-defaults/network @@ -114,6 +114,7 @@ wp543) ucidef_set_interface_lan "eth0" ;; +alfa-nx |\ ap83 |\ jwap003 |\ pb42 |\ diff --git a/target/linux/ar71xx/base-files/lib/ar71xx.sh b/target/linux/ar71xx/base-files/lib/ar71xx.sh index ee242a43c4..b259b67865 100755 --- a/target/linux/ar71xx/base-files/lib/ar71xx.sh +++ b/target/linux/ar71xx/base-files/lib/ar71xx.sh @@ -118,6 +118,9 @@ ar71xx_board_detect() { *"AirRouter") name="airrouter" ;; + *"ALFA Network N2/N5") + name="alfa-nx" + ;; *ALL0258N) name="all0258n" ;; diff --git a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh index 055282840a..ec0d03b684 100755 --- a/target/linux/ar71xx/base-files/lib/upgrade/platform.sh +++ b/target/linux/ar71xx/base-files/lib/upgrade/platform.sh @@ -77,6 +77,7 @@ platform_check_image() { platform_check_image_all0258n "$1" && return 0 return 1 ;; + alfa-nx | \ ap121 | \ ap121-mini | \ ap96 | \ diff --git a/target/linux/ar71xx/config-2.6.39 b/target/linux/ar71xx/config-2.6.39 index 78eb0ef1b6..2a232ddb04 100644 --- a/target/linux/ar71xx/config-2.6.39 +++ b/target/linux/ar71xx/config-2.6.39 @@ -13,6 +13,7 @@ CONFIG_AR71XX_DEV_M25P80=y CONFIG_AR71XX_DEV_PB42_PCI=y CONFIG_AR71XX_DEV_PB9X_PCI=y CONFIG_AR71XX_DEV_USB=y +CONFIG_AR71XX_MACH_ALFA_NX=y CONFIG_AR71XX_MACH_ALL0258N=y CONFIG_AR71XX_MACH_AP121=y CONFIG_AR71XX_MACH_AP81=y diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig index 52d8313da3..c2ccf8121e 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Kconfig @@ -10,6 +10,14 @@ config AR71XX_MACH_HORNET_UB select AR71XX_DEV_USB select AR71XX_DEV_AR9XXX_WMAC +config AR71XX_MACH_ALFA_NX + bool "ALFA Network N2/N5 board support" + select SOC_AR724X + select AR71XX_DEV_AP91_PCI if PCI + select AR71XX_DEV_M25P80 + select AR71XX_DEV_GPIO_BUTTONS + select AR71XX_DEV_LEDS_GPIO + config AR71XX_MACH_ALL0258N bool "Allnet ALL0258N support" select SOC_AR724X diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile index 9300d7a500..9d086811f5 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/Makefile @@ -28,6 +28,7 @@ obj-$(CONFIG_AR71XX_DEV_USB) += dev-usb.o obj-$(CONFIG_AR71XX_NVRAM) += nvram.o obj-$(CONFIG_AR71XX_PCI_ATH9K_FIXUP) += pci-ath9k-fixup.o +obj-$(CONFIG_AR71XX_MACH_ALFA_NX) += mach-alfa-nx.o obj-$(CONFIG_AR71XX_MACH_ALL0258N) += mach-all0258n.o obj-$(CONFIG_AR71XX_MACH_AP121) += mach-ap121.o obj-$(CONFIG_AR71XX_MACH_AP81) += mach-ap81.o diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/mach-alfa-nx.c b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-alfa-nx.c new file mode 100644 index 0000000000..6e28080a8e --- /dev/null +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/mach-alfa-nx.c @@ -0,0 +1,159 @@ +/* + * ALFA Network N2/N5 board support + * + * Copyright (C) 2011 Gabor Juhos + * + * 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 +#include + +#include + +#include "machtype.h" +#include "devices.h" +#include "dev-m25p80.h" +#include "dev-ap91-pci.h" +#include "dev-gpio-buttons.h" +#include "dev-leds-gpio.h" + +#define ALFA_NX_GPIO_LED_2 17 +#define ALFA_NX_GPIO_LED_3 16 +#define ALFA_NX_GPIO_LED_5 12 +#define ALFA_NX_GPIO_LED_6 8 +#define ALFA_NX_GPIO_LED_7 6 +#define ALFA_NX_GPIO_LED_8 7 + +#define ALFA_NX_GPIO_BTN_RESET 11 + +#define ALFA_NX_KEYS_POLL_INTERVAL 20 /* msecs */ +#define ALFA_NX_KEYS_DEBOUNCE_INTERVAL (3 * ALFA_NX_KEYS_POLL_INTERVAL) + +#define ALFA_NX_MAC0_OFFSET 0 +#define ALFA_NX_MAC1_OFFSET 6 +#define ALFA_NX_CALDATA_OFFSET 0x1000 + +#ifdef CONFIG_MTD_PARTITIONS +static struct mtd_partition alfa_nx_partitions[] = { + { + .name = "u-boot", + .offset = 0, + .size = 0x040000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "u-boot-env", + .offset = 0x040000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "rootfs", + .offset = 0x050000, + .size = 0x600000, + }, { + .name = "kernel", + .offset = 0x650000, + .size = 0x190000, + }, { + .name = "nvram", + .offset = 0x7e0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "art", + .offset = 0x7f0000, + .size = 0x010000, + .mask_flags = MTD_WRITEABLE, + }, { + .name = "firmware", + .offset = 0x050000, + .size = 0x780000, + } +}; +#endif /* CONFIG_MTD_PARTITIONS */ + +static struct flash_platform_data alfa_nx_flash_data = { +#ifdef CONFIG_MTD_PARTITIONS + .parts = alfa_nx_partitions, + .nr_parts = ARRAY_SIZE(alfa_nx_partitions), +#endif +}; + +static struct gpio_keys_button alfa_nx_gpio_keys[] __initdata = { + { + .desc = "Reset button", + .type = EV_KEY, + .code = KEY_RESTART, + .debounce_interval = ALFA_NX_KEYS_DEBOUNCE_INTERVAL, + .gpio = ALFA_NX_GPIO_BTN_RESET, + .active_low = 1, + } +}; + +static struct gpio_led alfa_nx_leds_gpio[] __initdata = { + { + .name = "alfa:green:led_2", + .gpio = ALFA_NX_GPIO_LED_2, + .active_low = 1, + }, { + .name = "alfa:green:led_3", + .gpio = ALFA_NX_GPIO_LED_3, + .active_low = 1, + }, { + .name = "alfa:red:led_5", + .gpio = ALFA_NX_GPIO_LED_5, + .active_low = 1, + }, { + .name = "alfa:amber:led_6", + .gpio = ALFA_NX_GPIO_LED_6, + .active_low = 1, + }, { + .name = "alfa:green:led_7", + .gpio = ALFA_NX_GPIO_LED_7, + .active_low = 1, + }, { + .name = "alfa:green:led_8", + .gpio = ALFA_NX_GPIO_LED_8, + .active_low = 1, + } +}; + +static void __init alfa_nx_setup(void) +{ + u8 *art = (u8 *) KSEG1ADDR(0x1fff0000); + + ar71xx_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); + + ar71xx_add_device_m25p80(&alfa_nx_flash_data); + + ar71xx_add_device_leds_gpio(0, ARRAY_SIZE(alfa_nx_leds_gpio), + alfa_nx_leds_gpio); + + ar71xx_register_gpio_keys_polled(-1, ALFA_NX_KEYS_POLL_INTERVAL, + ARRAY_SIZE(alfa_nx_gpio_keys), + alfa_nx_gpio_keys); + + ar71xx_add_device_mdio(0, 0x0); + + ar71xx_init_mac(ar71xx_eth0_data.mac_addr, + art + ALFA_NX_MAC0_OFFSET, 0); + ar71xx_init_mac(ar71xx_eth1_data.mac_addr, + art + ALFA_NX_MAC1_OFFSET, 0); + + /* WAN port */ + ar71xx_add_device_eth(0); + /* LAN port */ + ar71xx_add_device_eth(1); + + ap91_pci_init(art + ALFA_NX_CALDATA_OFFSET, NULL); +} + +MIPS_MACHINE(AR71XX_MACH_ALFA_NX, "ALFA-NX", "ALFA Network N2/N5", + alfa_nx_setup); diff --git a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h index 00eee51602..cac9d55f77 100644 --- a/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h +++ b/target/linux/ar71xx/files/arch/mips/ar71xx/machtype.h @@ -16,6 +16,7 @@ enum ar71xx_mach_type { AR71XX_MACH_GENERIC = 0, + AR71XX_MACH_ALFA_NX, /* ALFA Network N2/N5 board */ AR71XX_MACH_ALL0258N, /* Allnet ALL0258N */ AR71XX_MACH_AP121, /* Atheros AP121 */ AR71XX_MACH_AP121_MINI, /* Atheros AP121-MINI */