diff options
| -rw-r--r-- | target/linux/kirkwood/config-3.3 | 1 | ||||
| -rw-r--r-- | target/linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch | 300 | 
2 files changed, 301 insertions, 0 deletions
diff --git a/target/linux/kirkwood/config-3.3 b/target/linux/kirkwood/config-3.3 index da598cbad..8174925da 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 000000000..df7532199 --- /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 <linux/kernel.h> ++#include <linux/init.h> ++#include <linux/platform_device.h> ++#include <linux/ata_platform.h> ++#include <linux/i2c.h> ++#include <linux/mtd/mtd.h> ++#include <linux/mtd/partitions.h> ++#include <linux/gpio.h> ++#include <linux/gpio_keys.h> ++#include <linux/input.h> ++#include <linux/leds.h> ++#include <linux/delay.h> ++ ++#include <asm/mach-types.h> ++#include <asm/mach/arch.h> ++#include <mach/kirkwood.h> ++#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  | 
