]> git.openfabrics.org - ~emulex/infiniband.git/commitdiff
kirkwood: Add iconnect support
authorArnaud Patard (Rtp) <arnaud.patard@rtp-net.org>
Wed, 18 Apr 2012 21:16:41 +0000 (23:16 +0200)
committerJason Cooper <jason@lakedaemon.net>
Tue, 15 May 2012 03:12:27 +0000 (03:12 +0000)
Add support for Iomega Iconnect system.

Signed-off-by: Arnaud Patard <arnaud.patard@rtp-net.org>
Tested-By: Adam Baker <linux@baker-net.org.uk>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
arch/arm/boot/dts/kirkwood-iconnect.dts [new file with mode: 0644]
arch/arm/mach-kirkwood/Kconfig
arch/arm/mach-kirkwood/Makefile
arch/arm/mach-kirkwood/Makefile.boot
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-kirkwood/board-iconnect.c [new file with mode: 0644]
arch/arm/mach-kirkwood/common.h

diff --git a/arch/arm/boot/dts/kirkwood-iconnect.dts b/arch/arm/boot/dts/kirkwood-iconnect.dts
new file mode 100644 (file)
index 0000000..1ba75d4
--- /dev/null
@@ -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 636778e7c526a5d70728350f86bfcbc1811deb4a..bbea3f6f6d36a86659751ce07e7835fb672e914a 100644 (file)
@@ -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_DLINK_KIRKWOOD_DT
        bool "D-Link Kirkwood-based NAS (Flattened Device Tree)"
        select ARCH_KIRKWOOD_DT
index 36781b318ebc522a720eb5dec45db5998a0da0b0..82a3d13e5dc2cd3b08201317c708fa8e8b7441c6 100644 (file)
@@ -22,4 +22,5 @@ obj-$(CONFIG_MACH_T5325)              += t5325-setup.o
 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
 obj-$(CONFIG_MACH_DLINK_KIRKWOOD_DT)   += board-dnskw.o
index 8bbffbe1d9ce15fed1c4e6af15d709e638e15641..a827ca16406518c11b269392a721cba0c4d16462 100644 (file)
@@ -5,3 +5,4 @@ initrd_phys-y   := 0x00800000
 dtb-$(CONFIG_MACH_DREAMPLUG_DT) += kirkwood-dreamplug.dtb
 dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns320.dtb
 dtb-$(CONFIG_MACH_DLINK_KIRKWOOD_DT) += kirkwood-dns325.dtb
+dtb-$(CONFIG_MACH_ICONNECT_DT) += kirkwood-iconnect.dtb
index 3ade0ec20c9ff82cdb9b38b3241f0ee1db67d0a0..7e82a8e93795ee02c4562b604f1d321b6fa0229d 100644 (file)
@@ -59,6 +59,9 @@ static void __init kirkwood_dt_init(void)
        if (of_machine_is_compatible("dlink,dns-kirkwood"))
                dnskw_init();
 
+       if (of_machine_is_compatible("iom,iconnect"))
+               iconnect_init();
+
        of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL);
 }
 
@@ -66,6 +69,7 @@ static const char *kirkwood_dt_board_compat[] = {
        "globalscale,dreamplug",
        "dlink,dns-320",
        "dlink,dns-325",
+       "iom,iconnect",
        NULL
 };
 
diff --git a/arch/arm/mach-kirkwood/board-iconnect.c b/arch/arm/mach-kirkwood/board-iconnect.c
new file mode 100644 (file)
index 0000000..2222c57
--- /dev/null
@@ -0,0 +1,165 @@
+/*
+ * 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 <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/of.h>
+#include <linux/of_address.h>
+#include <linux/of_fdt.h>
+#include <linux/of_irq.h>
+#include <linux/of_platform.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mv643xx_eth.h>
+#include <linux/gpio.h>
+#include <linux/leds.h>
+#include <linux/spi/flash.h>
+#include <linux/spi/spi.h>
+#include <linux/spi/orion_spi.h>
+#include <linux/i2c.h>
+#include <linux/input.h>
+#include <linux/gpio_keys.h>
+#include <asm/mach/arch.h>
+#include <mach/kirkwood.h>
+#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 6195a377080062c0ea3c8b6b4b2b12844c2e4f48..5f0365c74b064babb231964f89d1ae31b027a0f8 100644 (file)
@@ -64,6 +64,12 @@ void dnskw_init(void);
 static inline void dnskw_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);
 void kirkwood_l2_init(void);