Hi Luka,

On Tuesday 29 May 2012 01:07:32 Luka Perkov wrote:
> kirkwood: use files instead of patches and add missing profiles
> 
> Signed-off-by: Luka Perkov <open...@lukaperkov.net>

Though there are only 3 files here, I would rather keep them as patches against 
the vanilla kernel because that makes the upstream submission process easier.

Now that kirkwood is migrating to Device Tree, we probably won't keep these 
files around much longer.

> ---
> 
>  .../arch/arm/mach-kirkwood/iconnect-setup.c        |  190 +++++++++++++
>  .../arch/arm/mach-kirkwood/nas6210-setup.c         |  189 ++++++++++++
>  .../arch/arm/mach-kirkwood/nsa-310-setup.c         |  273 
++++++++++++++++++
>  target/linux/kirkwood/patches-3.3/100-boards.patch |   38 +++
>  .../linux/kirkwood/patches-3.3/200-iconnect.patch  |  218 --------------
>  .../201-raidsonic-IB-NAS62x0-support.patch         |  216 --------------
>  .../kirkwood/patches-3.3/202-zyxel-nsa-310.patch   |  300 
--------------------
>  target/linux/kirkwood/profiles/400-raidsonic.mk    |   17 ++
>  target/linux/kirkwood/profiles/500-zyxel.mk        |   17 ++
>  9 files changed, 724 insertions(+), 734 deletions(-)
> 
> diff --git a/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/iconnect-
setup.c b/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/iconnect-
setup.c
> new file mode 100644
> index 0000000..4e8d192
> --- /dev/null
> +++ b/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/iconnect-setup.c
> @@ -0,0 +1,190 @@
> +/*
> + * arch/arm/mach-kirkwood/iconnect-setup.c
> + *
> + * Iomega iConnect Wireless
> + *
> + * 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/irq.h>
> +#include <linux/mtd/partitions.h>
> +#include <linux/mv643xx_eth.h>
> +#include <linux/ethtool.h>
> +#include <linux/gpio.h>
> +#include <linux/gpio_keys.h>
> +#include <linux/input.h>
> +#include <linux/leds.h>
> +#include <asm/mach-types.h>
> +#include <asm/mach/arch.h>
> +#include <mach/kirkwood.h>
> +#include "common.h"
> +#include "mpp.h"
> +
> +static struct mtd_partition iconnect_nand_parts[] = {
> +     {
> +             .name = "u-boot",
> +             .offset = 0,
> +             .size = SZ_1M
> +     }, {
> +             .name = "uImage",
> +             .offset = MTDPART_OFS_NXTBLK,
> +             .size = SZ_1M + SZ_2M
> +     }, {
> +             .name = "rootfs",
> +             .offset = MTDPART_OFS_NXTBLK,
> +             .size = SZ_32M,
> +     }, {
> +             .name = "data",
> +             .offset = MTDPART_OFS_NXTBLK,
> +             .size = MTDPART_SIZ_FULL
> +     },
> +};
> +
> +static struct mv643xx_eth_platform_data iconnect_ge00_data = {
> +     .phy_addr       = MV643XX_ETH_PHY_ADDR(11),
> +};
> +
> +static struct gpio_led iconnect_led_pins[] = {
> +     {
> +             .name                   = "iconnect:blue:power",
> +             .default_trigger        = "default-on",
> +             .gpio                   = 42,
> +     },
> +     {
> +             .name                   = "iconnect:red:power",
> +             .gpio                   = 43,
> +     },
> +     {
> +             .name                   = "iconnect:blue:usb1",
> +             .gpio                   = 44,
> +     },
> +     {
> +             .name                   = "iconnect:blue:usb2",
> +             .gpio                   = 45,
> +     },
> +     {
> +             .name                   = "iconnect:blue:usb3",
> +             .gpio                   = 46,
> +     },
> +     {
> +             .name                   = "iconnect:blue:usb4",
> +             .gpio                   = 47,
> +     },
> +     {
> +             .name                   = "iconnect:blue:otb",
> +             .gpio                   = 48,
> +     },
> +};
> +
> +static struct gpio_led_platform_data iconnect_led_data = {
> +     .leds           = iconnect_led_pins,
> +     .num_leds       = ARRAY_SIZE(iconnect_led_pins),
> +};
> +
> +static struct platform_device iconnect_leds = {
> +     .name   = "leds-gpio",
> +     .id     = -1,
> +     .dev    = {
> +             .platform_data  = &iconnect_led_data,
> +     }
> +};
> +
> +#define ICONNECT_GPIO_KEY_RESET              12
> +#define ICONNECT_GPIO_KEY_OTB                35
> +
> +#define ICONNECT_SW_RESET            0x00
> +#define ICONNECT_SW_OTB                      0x01
> +
> +static struct gpio_keys_button iconnect_buttons[] = {
> +     {
> +             .type           = EV_SW,
> +             .code           = ICONNECT_SW_RESET,
> +             .gpio           = ICONNECT_GPIO_KEY_RESET,
> +             .desc           = "Reset Button",
> +             .active_low     = 1,
> +             .debounce_interval = 100,
> +     },
> +     {
> +             .type           = EV_SW,
> +             .code           = ICONNECT_SW_OTB,
> +             .gpio           = ICONNECT_GPIO_KEY_OTB,
> +             .desc           = "OTB Button",
> +             .active_low     = 1,
> +             .debounce_interval = 100,
> +     },
> +};
> +
> +static struct gpio_keys_platform_data iconnect_button_data = {
> +     .buttons        = iconnect_buttons,
> +     .nbuttons       = ARRAY_SIZE(iconnect_buttons),
> +};
> +
> +static struct platform_device iconnect_button_device = {
> +     .name           = "gpio-keys",
> +     .id             = -1,
> +     .num_resources  = 0,
> +     .dev = {
> +             .platform_data = &iconnect_button_data,
> +     },
> +};
> +
> +static unsigned int iconnect_mpp_config[] __initdata = {
> +     MPP12_GPIO, /*Input for reset button*/
> +     MPP35_GPIO, /*Input for OTB button*/
> +     MPP42_GPIO,
> +     MPP43_GPIO,
> +     MPP44_GPIO,
> +     MPP45_GPIO,
> +     MPP46_GPIO,
> +     MPP47_GPIO,
> +     MPP48_GPIO,
> +     0
> +};
> +
> +static void __init iconnect_init(void)
> +{
> +     u32 dev, rev;
> +
> +     /*
> +      * Basic setup. Needs to be called early.
> +      */
> +     kirkwood_init();
> +     kirkwood_mpp_conf(iconnect_mpp_config);
> +
> +     kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25);
> +     kirkwood_ehci_init();
> +
> +     kirkwood_ge00_init(&iconnect_ge00_data);
> +     kirkwood_pcie_id(&dev, &rev);
> +
> +     kirkwood_uart0_init();
> +     kirkwood_i2c_init();
> +
> +     platform_device_register(&iconnect_leds);
> +     platform_device_register(&iconnect_button_device);
> +}
> +
> +static int __init iconnect_pci_init(void)
> +{
> +     if (machine_is_iconnect())
> +             kirkwood_pcie_init(KW_PCIE0);
> +
> +     return 0;
> +}
> +subsys_initcall(iconnect_pci_init);
> +
> +
> +MACHINE_START(ICONNECT, "Iomega iConnect Wireless")
> +     .atag_offset    = 0x100,
> +     .init_machine   = iconnect_init,
> +     .map_io         = kirkwood_map_io,
> +     .init_early     = kirkwood_init_early,
> +     .init_irq       = kirkwood_init_irq,
> +     .timer          = &kirkwood_timer,
> +     .restart        = kirkwood_restart,
> +MACHINE_END
> diff --git a/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/nas6210-
setup.c b/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/nas6210-
setup.c
> new file mode 100644
> index 0000000..a9040a6
> --- /dev/null
> +++ b/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/nas6210-setup.c
> @@ -0,0 +1,189 @@
> +/*
> + * arch/arm/mach-kirkwood/nas6210-setup.c
> + *
> + * Raidsonic ICYBOX NAS6210 Board 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/mtd/partitions.h>
> +#include <linux/mv643xx_eth.h>
> +#include <linux/gpio.h>
> +#include <linux/gpio_keys.h>
> +#include <linux/input.h>
> +#include <linux/leds.h>
> +#include <asm/mach-types.h>
> +#include <asm/mach/arch.h>
> +#include <mach/kirkwood.h>
> +#include "common.h"
> +#include "mpp.h"
> +
> +#define NAS6210_GPIO_POWER_OFF       24
> +
> +static struct mtd_partition nas6210_nand_parts[] = {
> +     {
> +             .name = "uboot",
> +             .offset = 0,
> +             .size = SZ_512K
> +     }, {
> +             .name = "uboot_env",
> +             .offset = MTDPART_OFS_NXTBLK,
> +             .size = SZ_128K
> +     }, {
> +             .name = "kernel",
> +             .offset = MTDPART_OFS_NXTBLK,
> +             .size = 3 * SZ_1M
> +     }, {
> +             .name = "rootfs",
> +             .offset = MTDPART_OFS_NXTBLK,
> +             .size = MTDPART_SIZ_FULL
> +     },
> +};
> +
> +static struct mv643xx_eth_platform_data nas6210_ge00_data = {
> +     .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
> +};
> +
> +static struct mv_sata_platform_data nas6210_sata_data = {
> +     .n_ports        = 2,
> +};
> +
> +static struct gpio_led nas6210_led_pins[] = {
> +     {
> +             .name                   = "status:green:power",
> +             .default_trigger        = "default-on",
> +             .gpio                   = 25,
> +             .active_low             = 0,
> +     },
> +     {
> +             .name                   = "status:red:power",
> +             .default_trigger        = "none",
> +             .gpio                   = 22,
> +             .active_low             = 0,
> +     },
> +     {
> +             .name                   = "status:red:usb_copy",
> +             .default_trigger        = "none",
> +             .gpio                   = 27,
> +             .active_low             = 0,
> +     },
> +};
> +
> +static struct gpio_led_platform_data nas6210_led_data = {
> +     .leds           = nas6210_led_pins,
> +     .num_leds       = ARRAY_SIZE(nas6210_led_pins),
> +};
> +
> +static struct platform_device nas6210_leds = {
> +     .name   = "leds-gpio",
> +     .id     = -1,
> +     .dev    = {
> +             .platform_data  = &nas6210_led_data,
> +     }
> +};
> +
> +static struct gpio_keys_button nas6210_buttons[] = {
> +     {
> +             .code           = KEY_COPY,
> +             .gpio           = 29,
> +             .desc           = "USB Copy",
> +             .active_low     = 1,
> +     },
> +     {
> +             .code           = KEY_RESTART,
> +             .gpio           = 28,
> +             .desc           = "Reset",
> +             .active_low     = 1,
> +     },
> +};
> +
> +static struct gpio_keys_platform_data nas6210_button_data = {
> +     .buttons        = nas6210_buttons,
> +     .nbuttons       = ARRAY_SIZE(nas6210_buttons),
> +};
> +
> +static struct platform_device nas6210_button_device = {
> +     .name           = "gpio-keys",
> +     .id             = -1,
> +     .num_resources  = 0,
> +     .dev            = {
> +             .platform_data  = &nas6210_button_data,
> +     }
> +};
> +
> +static unsigned int nas6210_mpp_config[] __initdata = {
> +     MPP0_NF_IO2,
> +     MPP1_NF_IO3,
> +     MPP2_NF_IO4,
> +     MPP3_NF_IO5,
> +     MPP4_NF_IO6,
> +     MPP5_NF_IO7,
> +     MPP18_NF_IO0,
> +     MPP19_NF_IO1,
> +     MPP22_GPIO,     /* Power LED red */
> +     MPP24_GPIO,     /* Power off device */
> +     MPP25_GPIO,     /* Power LED green */
> +     MPP27_GPIO,     /* USB transfer LED */
> +     MPP28_GPIO,     /* Reset button */
> +     MPP29_GPIO,     /* USB Copy button */
> +     0
> +};
> +
> +static void nas6210_power_off(void)
> +{
> +     gpio_set_value(NAS6210_GPIO_POWER_OFF, 1);
> +}
> +
> +static void __init nas6210_init(void)
> +{
> +     /*
> +      * Basic setup. Needs to be called early.
> +      */
> +     kirkwood_init();
> +     kirkwood_mpp_conf(nas6210_mpp_config);
> +
> +     kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25);
> +     kirkwood_ehci_init();
> +     kirkwood_ge00_init(&nas6210_ge00_data);
> +     kirkwood_sata_init(&nas6210_sata_data);
> +     kirkwood_uart0_init();
> +     platform_device_register(&nas6210_leds);
> +     platform_device_register(&nas6210_button_device);
> +     if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 &&
> +         gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0)
> +             pm_power_off = nas6210_power_off;
> +     else
> +             pr_err("nas6210: failed to configure power-off GPIO\n");
> +}
> +
> +static int __init nas6210_pci_init(void)
> +{
> +     if (machine_is_nas6210()) {
> +             u32 dev, rev;
> +
> +             kirkwood_pcie_id(&dev, &rev);
> +             if (dev == MV88F6282_DEV_ID)
> +                     kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0);
> +             else
> +                     kirkwood_pcie_init(KW_PCIE0);
> +     }
> +
> +     return 0;
> +}
> +subsys_initcall(nas6210_pci_init);
> +
> +MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS6210")
> +     /* Maintainer: <gmbnomis at gmail dot com> */
> +     .atag_offset    = 0x100,
> +     .init_machine   = nas6210_init,
> +     .map_io         = kirkwood_map_io,
> +     .init_early     = kirkwood_init_early,
> +     .init_irq       = kirkwood_init_irq,
> +     .timer          = &kirkwood_timer,
> +MACHINE_END
> diff --git a/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/nsa-310-
setup.c b/target/linux/kirkwood/files-3.3/arch/arm/mach-kirkwood/nsa-310-
setup.c
> new file mode 100644
> index 0000000..15dc526
> --- /dev/null
> +++ b/target/linux/kirkwood/files-3.3/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
> diff --git a/target/linux/kirkwood/patches-3.3/100-boards.patch 
b/target/linux/kirkwood/patches-3.3/100-boards.patch
> new file mode 100644
> index 0000000..4fe376e
> --- /dev/null
> +++ b/target/linux/kirkwood/patches-3.3/100-boards.patch
> @@ -0,0 +1,38 @@
> +--- a/arch/arm/mach-kirkwood/Makefile
> ++++ b/arch/arm/mach-kirkwood/Makefile
> +@@ -18,5 +18,8 @@ obj-$(CONFIG_MACH_D2NET_V2)                += d2net_v2
> + obj-$(CONFIG_MACH_NET2BIG_V2)               += netxbig_v2-setup.o lacie_v2-
common.o
> + obj-$(CONFIG_MACH_NET5BIG_V2)               += netxbig_v2-setup.o lacie_v2-
common.o
> + obj-$(CONFIG_MACH_T5325)            += t5325-setup.o
> ++obj-$(CONFIG_MACH_ICONNECT)         += iconnect-setup.o
> ++obj-$(CONFIG_MACH_NAS6210)          += nas6210-setup.o
> ++obj-$(CONFIG_MACH_NSA310)              += nsa-310-setup.o
> + 
> + obj-$(CONFIG_CPU_IDLE)                      += cpuidle.o
> +--- a/arch/arm/mach-kirkwood/Kconfig
> ++++ b/arch/arm/mach-kirkwood/Kconfig
> +@@ -130,6 +130,24 @@ config MACH_T5325
> +       Say 'Y' here if you want your kernel to support the
> +       HP t5325 Thin Client.
> + 
> ++config MACH_ICONNECT
> ++    bool "Iomega iConnect Wireless"
> ++    help
> ++      Say 'Y' here if you want your kernel to support the
> ++      Iomega iConnect Wireless.
> ++
> ++config MACH_NAS6210
> ++    bool "RaidSonic ICY BOX IB-NAS6210"
> ++    help
> ++      Say 'Y' here if you want your kernel to support the
> ++      RaidSonic ICY BOX IB-NAS6210 device.
> ++
> ++config MACH_NSA310
> ++    bool "ZyXEL NSA-310"
> ++    help
> ++      Say 'Y' here if you want your kernel to support the
> ++      ZyXEL NSA-310 board.
> ++
> + endmenu
> + 
> + endif
> diff --git a/target/linux/kirkwood/patches-3.3/200-iconnect.patch 
b/target/linux/kirkwood/patches-3.3/200-iconnect.patch
> deleted file mode 100644
> index 5a46ee7..0000000
> --- a/target/linux/kirkwood/patches-3.3/200-iconnect.patch
> +++ /dev/null
> @@ -1,218 +0,0 @@
> ---- a/arch/arm/mach-kirkwood/Makefile
> -+++ b/arch/arm/mach-kirkwood/Makefile
> -@@ -8,6 +8,7 @@ obj-$(CONFIG_MACH_SHEEVAPLUG)                += sheeva
> - obj-$(CONFIG_MACH_ESATA_SHEEVAPLUG) += sheevaplug-setup.o
> - obj-$(CONFIG_MACH_GURUPLUG)         += guruplug-setup.o
> - obj-$(CONFIG_MACH_DOCKSTAR)         += dockstar-setup.o
> -+obj-$(CONFIG_MACH_ICONNECT)         += iconnect-setup.o
> - obj-$(CONFIG_MACH_TS219)            += ts219-setup.o tsx1x-common.o
> - obj-$(CONFIG_MACH_TS41X)            += ts41x-setup.o tsx1x-common.o
> - obj-$(CONFIG_MACH_OPENRD)           += openrd-setup.o
> ---- a/arch/arm/mach-kirkwood/Kconfig
> -+++ b/arch/arm/mach-kirkwood/Kconfig
> -@@ -130,6 +130,12 @@ config MACH_T5325
> -       Say 'Y' here if you want your kernel to support the
> -       HP t5325 Thin Client.
> - 
> -+config MACH_ICONNECT
> -+    bool "Iomega iConnect Wireless"
> -+    help
> -+      Say 'Y' here if you want your kernel to support the
> -+      Iomega iConnect Wireless.
> -+
> - endmenu
> - 
> - endif
> ---- /dev/null
> -+++ b/arch/arm/mach-kirkwood/iconnect-setup.c
> -@@ -0,0 +1,190 @@
> -+/*
> -+ * arch/arm/mach-kirkwood/iconnect-setup.c
> -+ *
> -+ * Iomega iConnect Wireless
> -+ *
> -+ * 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/irq.h>
> -+#include <linux/mtd/partitions.h>
> -+#include <linux/mv643xx_eth.h>
> -+#include <linux/ethtool.h>
> -+#include <linux/gpio.h>
> -+#include <linux/gpio_keys.h>
> -+#include <linux/input.h>
> -+#include <linux/leds.h>
> -+#include <asm/mach-types.h>
> -+#include <asm/mach/arch.h>
> -+#include <mach/kirkwood.h>
> -+#include "common.h"
> -+#include "mpp.h"
> -+
> -+static struct mtd_partition iconnect_nand_parts[] = {
> -+    {
> -+            .name = "u-boot",
> -+            .offset = 0,
> -+            .size = SZ_1M
> -+    }, {
> -+            .name = "uImage",
> -+            .offset = MTDPART_OFS_NXTBLK,
> -+            .size = SZ_1M + SZ_2M
> -+    }, {
> -+            .name = "rootfs",
> -+            .offset = MTDPART_OFS_NXTBLK,
> -+            .size = SZ_32M,
> -+    }, {
> -+            .name = "data",
> -+            .offset = MTDPART_OFS_NXTBLK,
> -+            .size = MTDPART_SIZ_FULL
> -+    },
> -+};
> -+
> -+static struct mv643xx_eth_platform_data iconnect_ge00_data = {
> -+    .phy_addr       = MV643XX_ETH_PHY_ADDR(11),
> -+};
> -+
> -+static struct gpio_led iconnect_led_pins[] = {
> -+    {
> -+            .name                   = "iconnect:blue:power",
> -+            .default_trigger        = "default-on",
> -+            .gpio                   = 42,
> -+    },
> -+    {
> -+            .name                   = "iconnect:red:power",
> -+            .gpio                   = 43,
> -+    },
> -+    {
> -+            .name                   = "iconnect:blue:usb1",
> -+            .gpio                   = 44,
> -+    },
> -+    {
> -+            .name                   = "iconnect:blue:usb2",
> -+            .gpio                   = 45,
> -+    },
> -+    {
> -+            .name                   = "iconnect:blue:usb3",
> -+            .gpio                   = 46,
> -+    },
> -+    {
> -+            .name                   = "iconnect:blue:usb4",
> -+            .gpio                   = 47,
> -+    },
> -+    {
> -+            .name                   = "iconnect:blue:otb",
> -+            .gpio                   = 48,
> -+    },
> -+};
> -+
> -+static struct gpio_led_platform_data iconnect_led_data = {
> -+    .leds           = iconnect_led_pins,
> -+    .num_leds       = ARRAY_SIZE(iconnect_led_pins),
> -+};
> -+
> -+static struct platform_device iconnect_leds = {
> -+    .name   = "leds-gpio",
> -+    .id     = -1,
> -+    .dev    = {
> -+            .platform_data  = &iconnect_led_data,
> -+    }
> -+};
> -+
> -+#define ICONNECT_GPIO_KEY_RESET             12
> -+#define ICONNECT_GPIO_KEY_OTB               35
> -+
> -+#define ICONNECT_SW_RESET           0x00
> -+#define ICONNECT_SW_OTB                     0x01
> -+
> -+static struct gpio_keys_button iconnect_buttons[] = {
> -+    {
> -+            .type           = EV_SW,
> -+            .code           = ICONNECT_SW_RESET,
> -+            .gpio           = ICONNECT_GPIO_KEY_RESET,
> -+            .desc           = "Reset Button",
> -+            .active_low     = 1,
> -+            .debounce_interval = 100,
> -+    },
> -+    {
> -+            .type           = EV_SW,
> -+            .code           = ICONNECT_SW_OTB,
> -+            .gpio           = ICONNECT_GPIO_KEY_OTB,
> -+            .desc           = "OTB Button",
> -+            .active_low     = 1,
> -+            .debounce_interval = 100,
> -+    },
> -+};
> -+
> -+static struct gpio_keys_platform_data iconnect_button_data = {
> -+    .buttons        = iconnect_buttons,
> -+    .nbuttons       = ARRAY_SIZE(iconnect_buttons),
> -+};
> -+
> -+static struct platform_device iconnect_button_device = {
> -+    .name           = "gpio-keys",
> -+    .id             = -1,
> -+    .num_resources  = 0,
> -+    .dev = {
> -+            .platform_data = &iconnect_button_data,
> -+    },
> -+};
> -+
> -+static unsigned int iconnect_mpp_config[] __initdata = {
> -+    MPP12_GPIO, /*Input for reset button*/
> -+    MPP35_GPIO, /*Input for OTB button*/
> -+    MPP42_GPIO,
> -+    MPP43_GPIO,
> -+    MPP44_GPIO,
> -+    MPP45_GPIO,
> -+    MPP46_GPIO,
> -+    MPP47_GPIO,
> -+    MPP48_GPIO,
> -+    0
> -+};
> -+
> -+static void __init iconnect_init(void)
> -+{
> -+    u32 dev, rev;
> -+
> -+    /*
> -+     * Basic setup. Needs to be called early.
> -+     */
> -+    kirkwood_init();
> -+    kirkwood_mpp_conf(iconnect_mpp_config);
> -+
> -+    kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25);
> -+    kirkwood_ehci_init();
> -+
> -+    kirkwood_ge00_init(&iconnect_ge00_data);
> -+    kirkwood_pcie_id(&dev, &rev);
> -+
> -+    kirkwood_uart0_init();
> -+    kirkwood_i2c_init();
> -+
> -+    platform_device_register(&iconnect_leds);
> -+    platform_device_register(&iconnect_button_device);
> -+}
> -+
> -+static int __init iconnect_pci_init(void)
> -+{
> -+    if (machine_is_iconnect())
> -+            kirkwood_pcie_init(KW_PCIE0);
> -+
> -+    return 0;
> -+}
> -+subsys_initcall(iconnect_pci_init);
> -+
> -+
> -+MACHINE_START(ICONNECT, "Iomega iConnect Wireless")
> -+    .atag_offset    = 0x100,
> -+    .init_machine   = iconnect_init,
> -+    .map_io         = kirkwood_map_io,
> -+    .init_early     = kirkwood_init_early,
> -+    .init_irq       = kirkwood_init_irq,
> -+    .timer          = &kirkwood_timer,
> -+    .restart        = kirkwood_restart,
> -+MACHINE_END
> diff --git a/target/linux/kirkwood/patches-3.3/201-raidsonic-IB-NAS62x0-
support.patch b/target/linux/kirkwood/patches-3.3/201-raidsonic-IB-NAS62x0-
support.patch
> deleted file mode 100644
> index b7fcb04..0000000
> --- a/target/linux/kirkwood/patches-3.3/201-raidsonic-IB-NAS62x0-
support.patch
> +++ /dev/null
> @@ -1,216 +0,0 @@
> ---- /dev/null
> -+++ b/arch/arm/mach-kirkwood/nas6210-setup.c
> -@@ -0,0 +1,189 @@
> -+/*
> -+ * arch/arm/mach-kirkwood/nas6210-setup.c
> -+ *
> -+ * Raidsonic ICYBOX NAS6210 Board 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/mtd/partitions.h>
> -+#include <linux/mv643xx_eth.h>
> -+#include <linux/gpio.h>
> -+#include <linux/gpio_keys.h>
> -+#include <linux/input.h>
> -+#include <linux/leds.h>
> -+#include <asm/mach-types.h>
> -+#include <asm/mach/arch.h>
> -+#include <mach/kirkwood.h>
> -+#include "common.h"
> -+#include "mpp.h"
> -+
> -+#define NAS6210_GPIO_POWER_OFF      24
> -+
> -+static struct mtd_partition nas6210_nand_parts[] = {
> -+    {
> -+            .name = "uboot",
> -+            .offset = 0,
> -+            .size = SZ_512K
> -+    }, {
> -+            .name = "uboot_env",
> -+            .offset = MTDPART_OFS_NXTBLK,
> -+            .size = SZ_128K
> -+    }, {
> -+            .name = "kernel",
> -+            .offset = MTDPART_OFS_NXTBLK,
> -+            .size = 3 * SZ_1M
> -+    }, {
> -+            .name = "rootfs",
> -+            .offset = MTDPART_OFS_NXTBLK,
> -+            .size = MTDPART_SIZ_FULL
> -+    },
> -+};
> -+
> -+static struct mv643xx_eth_platform_data nas6210_ge00_data = {
> -+    .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
> -+};
> -+
> -+static struct mv_sata_platform_data nas6210_sata_data = {
> -+    .n_ports        = 2,
> -+};
> -+
> -+static struct gpio_led nas6210_led_pins[] = {
> -+    {
> -+            .name                   = "status:green:power",
> -+            .default_trigger        = "default-on",
> -+            .gpio                   = 25,
> -+            .active_low             = 0,
> -+    },
> -+    {
> -+            .name                   = "status:red:power",
> -+            .default_trigger        = "none",
> -+            .gpio                   = 22,
> -+            .active_low             = 0,
> -+    },
> -+    {
> -+            .name                   = "status:red:usb_copy",
> -+            .default_trigger        = "none",
> -+            .gpio                   = 27,
> -+            .active_low             = 0,
> -+    },
> -+};
> -+
> -+static struct gpio_led_platform_data nas6210_led_data = {
> -+    .leds           = nas6210_led_pins,
> -+    .num_leds       = ARRAY_SIZE(nas6210_led_pins),
> -+};
> -+
> -+static struct platform_device nas6210_leds = {
> -+    .name   = "leds-gpio",
> -+    .id     = -1,
> -+    .dev    = {
> -+            .platform_data  = &nas6210_led_data,
> -+    }
> -+};
> -+
> -+static struct gpio_keys_button nas6210_buttons[] = {
> -+    {
> -+            .code           = KEY_COPY,
> -+            .gpio           = 29,
> -+            .desc           = "USB Copy",
> -+            .active_low     = 1,
> -+    },
> -+    {
> -+            .code           = KEY_RESTART,
> -+            .gpio           = 28,
> -+            .desc           = "Reset",
> -+            .active_low     = 1,
> -+    },
> -+};
> -+
> -+static struct gpio_keys_platform_data nas6210_button_data = {
> -+    .buttons        = nas6210_buttons,
> -+    .nbuttons       = ARRAY_SIZE(nas6210_buttons),
> -+};
> -+
> -+static struct platform_device nas6210_button_device = {
> -+    .name           = "gpio-keys",
> -+    .id             = -1,
> -+    .num_resources  = 0,
> -+    .dev            = {
> -+            .platform_data  = &nas6210_button_data,
> -+    }
> -+};
> -+
> -+static unsigned int nas6210_mpp_config[] __initdata = {
> -+    MPP0_NF_IO2,
> -+    MPP1_NF_IO3,
> -+    MPP2_NF_IO4,
> -+    MPP3_NF_IO5,
> -+    MPP4_NF_IO6,
> -+    MPP5_NF_IO7,
> -+    MPP18_NF_IO0,
> -+    MPP19_NF_IO1,
> -+    MPP22_GPIO,     /* Power LED red */
> -+    MPP24_GPIO,     /* Power off device */
> -+    MPP25_GPIO,     /* Power LED green */
> -+    MPP27_GPIO,     /* USB transfer LED */
> -+    MPP28_GPIO,     /* Reset button */
> -+    MPP29_GPIO,     /* USB Copy button */
> -+    0
> -+};
> -+
> -+static void nas6210_power_off(void)
> -+{
> -+    gpio_set_value(NAS6210_GPIO_POWER_OFF, 1);
> -+}
> -+
> -+static void __init nas6210_init(void)
> -+{
> -+    /*
> -+     * Basic setup. Needs to be called early.
> -+     */
> -+    kirkwood_init();
> -+    kirkwood_mpp_conf(nas6210_mpp_config);
> -+
> -+    kirkwood_nand_init(ARRAY_AND_SIZE(nas6210_nand_parts), 25);
> -+    kirkwood_ehci_init();
> -+    kirkwood_ge00_init(&nas6210_ge00_data);
> -+    kirkwood_sata_init(&nas6210_sata_data);
> -+    kirkwood_uart0_init();
> -+    platform_device_register(&nas6210_leds);
> -+    platform_device_register(&nas6210_button_device);
> -+    if (gpio_request(NAS6210_GPIO_POWER_OFF, "power-off") == 0 &&
> -+        gpio_direction_output(NAS6210_GPIO_POWER_OFF, 0) == 0)
> -+            pm_power_off = nas6210_power_off;
> -+    else
> -+            pr_err("nas6210: failed to configure power-off GPIO\n");
> -+}
> -+
> -+static int __init nas6210_pci_init(void)
> -+{
> -+    if (machine_is_nas6210()) {
> -+            u32 dev, rev;
> -+
> -+            kirkwood_pcie_id(&dev, &rev);
> -+            if (dev == MV88F6282_DEV_ID)
> -+                    kirkwood_pcie_init(KW_PCIE1 | KW_PCIE0);
> -+            else
> -+                    kirkwood_pcie_init(KW_PCIE0);
> -+    }
> -+
> -+    return 0;
> -+}
> -+subsys_initcall(nas6210_pci_init);
> -+
> -+MACHINE_START(NAS6210, "RaidSonic ICY BOX IB-NAS6210")
> -+    /* Maintainer: <gmbnomis at gmail dot com> */
> -+    .atag_offset    = 0x100,
> -+    .init_machine   = nas6210_init,
> -+    .map_io         = kirkwood_map_io,
> -+    .init_early     = kirkwood_init_early,
> -+    .init_irq       = kirkwood_init_irq,
> -+    .timer          = &kirkwood_timer,
> -+MACHINE_END
> ---- a/arch/arm/mach-kirkwood/Kconfig
> -+++ b/arch/arm/mach-kirkwood/Kconfig
> -@@ -136,6 +136,12 @@ config MACH_ICONNECT
> -       Say 'Y' here if you want your kernel to support the
> -       Iomega iConnect Wireless.
> - 
> -+config MACH_NAS6210
> -+    bool "RaidSonic ICY BOX IB-NAS6210"
> -+    help
> -+      Say 'Y' here if you want your kernel to support the
> -+      RaidSonic ICY BOX IB-NAS6210 device.
> -+
> - endmenu
> - 
> - endif
> ---- a/arch/arm/mach-kirkwood/Makefile
> -+++ b/arch/arm/mach-kirkwood/Makefile
> -@@ -19,5 +19,6 @@ obj-$(CONFIG_MACH_D2NET_V2)                += d2net_v2
> - obj-$(CONFIG_MACH_NET2BIG_V2)               += netxbig_v2-setup.o lacie_v2-
common.o
> - 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_CPU_IDLE)                      += cpuidle.o
> 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
> deleted file mode 100644
> index cb84297..0000000
> --- a/target/linux/kirkwood/patches-3.3/202-zyxel-nsa-310.patch
> +++ /dev/null
> @@ -1,300 +0,0 @@
> ---- 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_NSA310
> -+    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_NSA310)           += 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
> diff --git a/target/linux/kirkwood/profiles/400-raidsonic.mk 
b/target/linux/kirkwood/profiles/400-raidsonic.mk
> new file mode 100644
> index 0000000..93eea89
> --- /dev/null
> +++ b/target/linux/kirkwood/profiles/400-raidsonic.mk
> @@ -0,0 +1,17 @@
> +#
> +# Copyright (C) 2012 OpenWrt.org
> +#
> +# This is free software, licensed under the GNU General Public License v2.
> +# See /LICENSE for more information.
> +#
> +
> +define Profile/RaidSonic
> +  NAME:=ICY BOX IB-NAS62x0
> +  PACKAGES:=
> +endef
> +
> +define Profile/RaidSonic/Description
> +     RaidSonic ICY BOX IB-NAS62x0
> +endef
> +
> +$(eval $(call Profile,RaidSonic))
> diff --git a/target/linux/kirkwood/profiles/500-zyxel.mk 
b/target/linux/kirkwood/profiles/500-zyxel.mk
> new file mode 100644
> index 0000000..1edd849
> --- /dev/null
> +++ b/target/linux/kirkwood/profiles/500-zyxel.mk
> @@ -0,0 +1,17 @@
> +#
> +# Copyright (C) 2012 OpenWrt.org
> +#
> +# This is free software, licensed under the GNU General Public License v2.
> +# See /LICENSE for more information.
> +#
> +
> +define Profile/ZyXEL
> +  NAME:=NSA-310
> +  PACKAGES:=
> +endef
> +
> +define Profile/ZyXEL/Description
> +     ZyXEL NSA-310
> +endef
> +
> +$(eval $(call Profile,ZyXEL))
> _______________________________________________
> openwrt-devel mailing list
> openwrt-devel@lists.openwrt.org
> https://lists.openwrt.org/mailman/listinfo/openwrt-devel
_______________________________________________
openwrt-devel mailing list
openwrt-devel@lists.openwrt.org
https://lists.openwrt.org/mailman/listinfo/openwrt-devel

Reply via email to