From: Gabor Juhos Date: Wed, 9 May 2012 11:38:43 +0000 (+0000) Subject: kirkwood: add support for the ZyXEL NSA-310 X-Git-Url: http://git.lede-project.org./?a=commitdiff_plain;h=200227e0b4d954f9a76f1587114a53f034539360;p=openwrt%2Fstaging%2Fkaloz.git kirkwood: add support for the ZyXEL NSA-310 SVN-Revision: 31669 --- diff --git a/target/linux/kirkwood/config-3.3 b/target/linux/kirkwood/config-3.3 index da598cbadc..8174925da3 100644 --- a/target/linux/kirkwood/config-3.3 +++ b/target/linux/kirkwood/config-3.3 @@ -112,6 +112,7 @@ CONFIG_MACH_NAS6210=y # CONFIG_MACH_NET5BIG_V2 is not set # CONFIG_MACH_NETSPACE_MAX_V2 is not set # CONFIG_MACH_NETSPACE_V2 is not set +CONFIG_MACH_NSA_310=y CONFIG_MACH_OPENRD=y CONFIG_MACH_OPENRD_BASE=y CONFIG_MACH_OPENRD_CLIENT=y diff --git a/target/linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch b/target/linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch new file mode 100644 index 0000000000..df7532199a --- /dev/null +++ b/target/linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch @@ -0,0 +1,300 @@ +--- a/arch/arm/mach-kirkwood/Kconfig ++++ b/arch/arm/mach-kirkwood/Kconfig +@@ -142,6 +142,12 @@ config MACH_NAS6210 + Say 'Y' here if you want your kernel to support the + RaidSonic ICY BOX IB-NAS6210 device. + ++config MACH_NSA_310 ++ bool "ZyXEL NSA-310" ++ help ++ Say 'Y' here if you want your kernel to support the ++ ZyXEL NSA-310 board. ++ + endmenu + + endif +--- a/arch/arm/mach-kirkwood/Makefile ++++ b/arch/arm/mach-kirkwood/Makefile +@@ -20,5 +20,6 @@ obj-$(CONFIG_MACH_NET2BIG_V2) += netxbi + obj-$(CONFIG_MACH_NET5BIG_V2) += netxbig_v2-setup.o lacie_v2-common.o + obj-$(CONFIG_MACH_T5325) += t5325-setup.o + obj-$(CONFIG_MACH_NAS6210) += nas6210-setup.o ++obj-$(CONFIG_MACH_NSA_310) += nsa-310-setup.o + + obj-$(CONFIG_CPU_IDLE) += cpuidle.o +--- /dev/null ++++ b/arch/arm/mach-kirkwood/nsa-310-setup.c +@@ -0,0 +1,273 @@ ++/* ++ * arch/arm/mach-kirkwood/nsa-310-setup.c ++ * ++ * ZyXEL NSA-310 Setup ++ * ++ * This file is licensed under the terms of the GNU General Public ++ * License version 2. This program is licensed "as is" without any ++ * warranty of any kind, whether express or implied. ++ */ ++ ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++#include ++ ++#include ++#include ++#include ++#include "common.h" ++#include "mpp.h" ++ ++#define NSA310_GPIO_LED_ESATA_GREEN 12 ++#define NSA310_GPIO_LED_ESATA_RED 13 ++#define NSA310_GPIO_LED_USB_GREEN 15 ++#define NSA310_GPIO_LED_USB_RED 16 ++#define NSA310_GPIO_USB_POWER_OFF 21 ++#define NSA310_GPIO_LED_SYS_GREEN 28 ++#define NSA310_GPIO_LED_SYS_RED 29 ++#define NSA310_GPIO_KEY_RESTART 36 ++#define NSA310_GPIO_KEY_COPY 37 ++#define NSA310_GPIO_LED_COPY_GREEN 39 ++#define NSA310_GPIO_LED_COPY_RED 40 ++#define NSA310_GPIO_LED_HDD_GREEN 41 ++#define NSA310_GPIO_LED_HDD_RED 42 ++#define NSA310_GPIO_BUZZER 44 ++#define NSA310_GPIO_KEY_POWER 46 ++#define NSA310_GPIO_POWER_OFF 48 ++ ++ ++static unsigned int nsa310_mpp_config[] __initdata = { ++ MPP12_GPIO, ++ MPP13_GPIO, ++ MPP15_GPIO, ++ MPP16_GPIO, ++ MPP21_GPIO, ++ MPP28_GPIO, ++ MPP29_GPIO, ++ MPP36_GPIO, ++ MPP37_GPIO, ++ MPP39_GPIO, ++ MPP40_GPIO, ++ MPP41_GPIO, ++ MPP42_GPIO, ++ MPP44_GPIO, ++ MPP46_GPIO, ++ MPP48_GPIO, ++ 0 ++}; ++ ++static struct mtd_partition nsa310_mtd_parts[] = { ++ { ++ .name = "uboot", ++ .offset = 0, ++ .size = 0x100000, ++ .mask_flags = MTD_WRITEABLE, ++ }, { ++ .name = "uboot_env", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x80000, ++ }, { ++ .name = "key_store", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x80000, ++ }, { ++ .name = "info", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x80000, ++ }, { ++ .name = "etc", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0xa00000, ++ }, { ++ .name = "kernel_1", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0xa00000, ++ }, { ++ .name = "rootfs1", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x2fc0000, ++ }, { ++ .name = "kernel_2", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0xa00000, ++ }, { ++ .name = "rootfs2", ++ .offset = MTDPART_OFS_NXTBLK, ++ .size = 0x2fc0000, ++ }, ++}; ++ ++static struct gpio_led nsa310_leds[] = { ++ { ++ .name = "nsa310:green:sys", ++ .gpio = NSA310_GPIO_LED_SYS_GREEN, ++ }, { ++ .name = "nsa310:red:sys", ++ .gpio = NSA310_GPIO_LED_SYS_RED, ++ }, { ++ .name = "nsa310:green:hdd", ++ .gpio = NSA310_GPIO_LED_HDD_GREEN, ++ }, { ++ .name = "nsa310:red:hdd", ++ .gpio = NSA310_GPIO_LED_HDD_RED, ++ }, { ++ .name = "nsa310:green:esata", ++ .gpio = NSA310_GPIO_LED_ESATA_GREEN, ++ }, { ++ .name = "nsa310:red:esata", ++ .gpio = NSA310_GPIO_LED_ESATA_RED, ++ }, { ++ .name = "nsa310:green:usb", ++ .gpio = NSA310_GPIO_LED_USB_GREEN, ++ }, { ++ .name = "nsa310:red:usb", ++ .gpio = NSA310_GPIO_LED_USB_RED, ++ }, { ++ .name = "nsa310:green:copy", ++ .gpio = NSA310_GPIO_LED_COPY_GREEN, ++ }, { ++ .name = "nsa310:red:copy", ++ .gpio = NSA310_GPIO_LED_COPY_RED, ++ }, ++}; ++ ++static struct gpio_led_platform_data nsa310_leds_data = { ++ .leds = nsa310_leds, ++ .num_leds = ARRAY_SIZE(nsa310_leds), ++}; ++ ++static struct platform_device nsa310_leds_device = { ++ .name = "leds-gpio", ++ .id = -1, ++ .dev = { ++ .platform_data = &nsa310_leds_data, ++ } ++}; ++ ++static struct gpio_keys_button nsa310_buttons[] = { ++ { ++ .desc = "Power Button", ++ .code = KEY_POWER, ++ .type = EV_KEY, ++ .gpio = NSA310_GPIO_KEY_POWER, ++ .debounce_interval = 1000, ++ }, { ++ .desc = "Copy Button", ++ .code = KEY_COPY, ++ .type = EV_KEY, ++ .gpio = NSA310_GPIO_KEY_COPY, ++ .active_low = 1, ++ .debounce_interval = 1000, ++ }, { ++ .desc = "Reset Button", ++ .code = KEY_RESTART, ++ .type = EV_KEY, ++ .gpio = NSA310_GPIO_KEY_RESTART, ++ .active_low = 1, ++ .debounce_interval = 1000, ++ }, ++}; ++ ++static struct gpio_keys_platform_data nsa310_keys_data = { ++ .buttons = nsa310_buttons, ++ .nbuttons = ARRAY_SIZE(nsa310_buttons), ++}; ++ ++static struct platform_device nsa310_keys_device = { ++ .name = "gpio-keys", ++ .id = -1, ++ .dev = { ++ .platform_data = &nsa310_keys_data, ++ } ++}; ++ ++static struct i2c_board_info __initdata nsa310_i2c_info[] = { ++ { I2C_BOARD_INFO("adt7476", 0x2e) }, ++}; ++ ++static struct mv_sata_platform_data nsa310_sata_data = { ++ .n_ports = 2, ++}; ++ ++static void nsa310_power_off(void) ++{ ++ gpio_set_value(NSA310_GPIO_POWER_OFF, 1); ++} ++ ++static int __init nsa310_gpio_request(unsigned int gpio, unsigned long flags, ++ const char *label) ++{ ++ int err; ++ ++ err = gpio_request_one(gpio, flags, label); ++ if (err) ++ pr_err("NSA-310: can't setup GPIO%u (%s), err=%d\n", ++ gpio, label, err); ++ ++ return err; ++} ++ ++static void __init nsa310_gpio_init(void) ++{ ++ int err; ++ ++ err = nsa310_gpio_request(NSA310_GPIO_POWER_OFF, GPIOF_OUT_INIT_LOW, ++ "Power Off"); ++ if (!err) ++ pm_power_off = nsa310_power_off; ++ ++ nsa310_gpio_request(NSA310_GPIO_USB_POWER_OFF, GPIOF_OUT_INIT_LOW, ++ "USB Power Off"); ++} ++ ++static void __init nsa310_init(void) ++{ ++ u32 dev, rev; ++ ++ kirkwood_init(); ++ kirkwood_mpp_conf(nsa310_mpp_config); ++ ++ nsa310_gpio_init(); ++ ++ kirkwood_nand_init(ARRAY_AND_SIZE(nsa310_mtd_parts), 35); ++ kirkwood_ehci_init(); ++ ++ kirkwood_pcie_id(&dev, &rev); ++ ++ kirkwood_sata_init(&nsa310_sata_data); ++ kirkwood_uart0_init(); ++ ++ i2c_register_board_info(0, ARRAY_AND_SIZE(nsa310_i2c_info)); ++ kirkwood_i2c_init(); ++ ++ platform_device_register(&nsa310_leds_device); ++ platform_device_register(&nsa310_keys_device); ++} ++ ++static int __init nsa310_pci_init(void) ++{ ++ if (machine_is_nsa310()) ++ kirkwood_pcie_init(KW_PCIE0); ++ ++ return 0; ++} ++subsys_initcall(nsa310_pci_init); ++ ++MACHINE_START(NSA310, "ZyXEL NSA-310") ++ .atag_offset = 0x100, ++ .init_machine = nsa310_init, ++ .map_io = kirkwood_map_io, ++ .init_early = kirkwood_init_early, ++ .init_irq = kirkwood_init_irq, ++ .timer = &kirkwood_timer, ++ .restart = kirkwood_restart, ++MACHINE_END