Add support for Iomega Iconnect system. Signed-off-by: Arnaud Patard Index: arm-soc/arch/arm/mach-kirkwood/Kconfig =================================================================== --- arm-soc.orig/arch/arm/mach-kirkwood/Kconfig 2012-04-18 22:43:01.719599076 +0200 +++ arm-soc/arch/arm/mach-kirkwood/Kconfig 2012-04-18 22:56:10.227564384 +0200 @@ -58,6 +58,12 @@ config MACH_DREAMPLUG_DT Say 'Y' here if you want your kernel to support the Marvell DreamPlug (Flattened Device Tree). +config MACH_ICONNECT_DT + bool "Iomega Iconnect (Flattened Device Tree)" + select ARCH_KIRKWOOD_DT + help + Say 'Y' here to enable Iomega Iconnect support. + config MACH_TS219 bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS" help Index: arm-soc/arch/arm/mach-kirkwood/Makefile =================================================================== --- arm-soc.orig/arch/arm/mach-kirkwood/Makefile 2012-04-18 22:43:01.747599075 +0200 +++ arm-soc/arch/arm/mach-kirkwood/Makefile 2012-04-18 22:56:10.227564384 +0200 @@ -22,3 +22,4 @@ obj-$(CONFIG_MACH_T5325) += t5325-setup obj-$(CONFIG_CPU_IDLE) += cpuidle.o obj-$(CONFIG_ARCH_KIRKWOOD_DT) += board-dt.o obj-$(CONFIG_MACH_DREAMPLUG_DT) += board-dreamplug.o +obj-$(CONFIG_MACH_ICONNECT_DT) += board-iconnect.o Index: arm-soc/arch/arm/mach-kirkwood/board-iconnect.c =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ arm-soc/arch/arm/mach-kirkwood/board-iconnect.c 2012-04-18 22:56:47.187562762 +0200 @@ -0,0 +1,166 @@ +/* + * arch/arm/mach-kirkwood/board-iconnect.c + * + * Iomega i-connect 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "common.h" +#include "mpp.h" + +static struct mv643xx_eth_platform_data iconnect_ge00_data = { + .phy_addr = MV643XX_ETH_PHY_ADDR(11), +}; + +static struct gpio_led iconnect_led_pins[] = { + { + .name = "led_level", + .gpio = 41, + .default_trigger = "default-on", + }, { + .name = "power:blue", + .gpio = 42, + .default_trigger = "timer", + }, { + .name = "power:red", + .gpio = 43, + }, { + .name = "usb1:blue", + .gpio = 44, + }, { + .name = "usb2:blue", + .gpio = 45, + }, { + .name = "usb3:blue", + .gpio = 46, + }, { + .name = "usb4:blue", + .gpio = 47, + }, { + .name = "otb:blue", + .gpio = 48, + }, +}; + +static struct gpio_led_platform_data iconnect_led_data = { + .leds = iconnect_led_pins, + .num_leds = ARRAY_SIZE(iconnect_led_pins), + .gpio_blink_set = orion_gpio_led_blink_set, +}; + +static struct platform_device iconnect_leds = { + .name = "leds-gpio", + .id = -1, + .dev = { + .platform_data = &iconnect_led_data, + } +}; + +static unsigned int iconnect_mpp_config[] __initdata = { + MPP12_GPIO, + MPP35_GPIO, + MPP41_GPIO, + MPP42_GPIO, + MPP43_GPIO, + MPP44_GPIO, + MPP45_GPIO, + MPP46_GPIO, + MPP47_GPIO, + MPP48_GPIO, + 0 +}; + +static struct i2c_board_info __initdata iconnect_board_info[] = { + { + I2C_BOARD_INFO("lm63", 0x4c), + }, +}; + +static struct mtd_partition iconnect_nand_parts[] = { + { + .name = "flash", + .offset = 0, + .size = MTDPART_SIZ_FULL, + }, +}; + +/* yikes... theses are the original input buttons */ +/* but I'm not convinced by the sw event choices */ +static struct gpio_keys_button iconnect_buttons[] = { + { + .type = EV_SW, + .code = SW_LID, + .gpio = 12, + .desc = "Reset Button", + .active_low = 1, + .debounce_interval = 100, + }, { + .type = EV_SW, + .code = SW_TABLET_MODE, + .gpio = 35, + .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, + }, +}; + +void __init iconnect_init(void) +{ + kirkwood_mpp_conf(iconnect_mpp_config); + kirkwood_nand_init(ARRAY_AND_SIZE(iconnect_nand_parts), 25); + kirkwood_i2c_init(); + i2c_register_board_info(0, iconnect_board_info, + ARRAY_SIZE(iconnect_board_info)); + + kirkwood_ehci_init(); + kirkwood_ge00_init(&iconnect_ge00_data); + + platform_device_register(&iconnect_button_device); + platform_device_register(&iconnect_leds); +} + +static int __init iconnect_pci_init(void) +{ + if (of_machine_is_compatible("iom,iconnect")) + kirkwood_pcie_init(KW_PCIE0); + return 0; +} +subsys_initcall(iconnect_pci_init); + Index: arm-soc/arch/arm/boot/dts/kirkwood-iconnect.dts =================================================================== --- /dev/null 1970-01-01 00:00:00.000000000 +0000 +++ arm-soc/arch/arm/boot/dts/kirkwood-iconnect.dts 2012-04-18 22:56:10.343564380 +0200 @@ -0,0 +1,26 @@ +/dts-v1/; + +/include/ "kirkwood.dtsi" + +/ { + model = "Iomega Iconnect"; + compatible = "iom,iconnect-1.1", "iom,iconnect", "mrvl,kirkwood-88f6281", "mrvl,kirkwood"; + + memory { + device_type = "memory"; + reg = <0x00000000 0x10000000>; + }; + + chosen { + bootargs = "console=ttyS0,115200n8 earlyprintk mtdparts=orion_nand:0xc0000@0x0(uboot),0x20000@0xa0000(env),0x300000@0x100000(zImage),0x300000@0x540000(initrd),0x1f400000@0x980000(boot)"; + linux,initrd-start = <0x4500040>; + linux,initrd-end = <0x4800000>; + }; + + ocp@f1000000 { + serial@12000 { + clock-frequency = <200000000>; + status = "ok"; + }; + }; +}; Index: arm-soc/arch/arm/mach-kirkwood/Makefile.boot =================================================================== --- arm-soc.orig/arch/arm/mach-kirkwood/Makefile.boot 2012-04-18 22:43:01.727599075 +0200 +++ arm-soc/arch/arm/mach-kirkwood/Makefile.boot 2012-04-18 22:56:10.351564379 +0200 @@ -3,3 +3,5 @@ params_phys-y := 0x00000100 initrd_phys-y := 0x00800000 dtb-$(CONFIG_MACH_DREAMPLUG_DT) += kirkwood-dreamplug.dtb +dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb + Index: arm-soc/arch/arm/mach-kirkwood/board-dt.c =================================================================== --- arm-soc.orig/arch/arm/mach-kirkwood/board-dt.c 2012-04-18 22:43:01.735599076 +0200 +++ arm-soc/arch/arm/mach-kirkwood/board-dt.c 2012-04-18 22:56:10.359564378 +0200 @@ -55,11 +55,15 @@ static void __init kirkwood_dt_init(void if (of_machine_is_compatible("globalscale,dreamplug")) dreamplug_init(); + if (of_machine_is_compatible("iom,iconnect")) + iconnect_init(); + of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL); } static const char *kirkwood_dt_board_compat[] = { "globalscale,dreamplug", + "iom,iconnect", NULL }; Index: arm-soc/arch/arm/mach-kirkwood/common.h =================================================================== --- arm-soc.orig/arch/arm/mach-kirkwood/common.h 2012-04-18 22:43:01.707599077 +0200 +++ arm-soc/arch/arm/mach-kirkwood/common.h 2012-04-18 22:56:10.371564379 +0200 @@ -57,6 +57,12 @@ void dreamplug_init(void); #else static inline void dreamplug_init(void) {}; #endif +#ifdef CONFIG_MACH_ICONNECT_DT +void iconnect_init(void); +#else +static inline void iconnect_init(void) {}; +#endif + /* early init functions not converted to fdt yet */ char *kirkwood_id(void);