]> git.karo-electronics.de Git - linux-beck.git/commitdiff
ARM: kirkwood: Add support for RaidSonic IB-NAS6210/6220 using devicetree
authorSimon Baatz <gmbnomis@gmail.com>
Mon, 30 Apr 2012 21:55:17 +0000 (23:55 +0200)
committerJason Cooper <jason@lakedaemon.net>
Tue, 15 May 2012 03:18:49 +0000 (03:18 +0000)
Add support for the IB-NAS6210 and IB-NAS 6220. Describe as much as
currently possible in the devicetree files, including the NAND partitions.
Use the partition scheme of the original firmware by default.

Create a board-ib62x0.c for everything else.

Signed-off-by: Simon Baatz <gmbnomis@gmail.com>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
arch/arm/boot/dts/kirkwood-ib62x0.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-ib62x0.c [new file with mode: 0644]
arch/arm/mach-kirkwood/common.h

diff --git a/arch/arm/boot/dts/kirkwood-ib62x0.dts b/arch/arm/boot/dts/kirkwood-ib62x0.dts
new file mode 100644 (file)
index 0000000..ada0f0c
--- /dev/null
@@ -0,0 +1,44 @@
+/dts-v1/;
+
+/include/ "kirkwood.dtsi"
+
+/ {
+       model = "RaidSonic ICY BOX IB-NAS62x0 (Rev B)";
+       compatible = "raidsonic,ib-nas6210-b", "raidsonic,ib-nas6220-b", "raidsonic,ib-nas6210", "raidsonic,ib-nas6220", "raidsonic,ib-nas62x0",  "mrvl,kirkwood-88f6281", "mrvl,kirkwood";
+
+       memory {
+               device_type = "memory";
+               reg = <0x00000000 0x10000000>;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8 earlyprintk";
+       };
+
+       ocp@f1000000 {
+               serial@12000 {
+                       clock-frequency = <200000000>;
+                       status = "okay";
+               };
+
+               nand@3000000 {
+                       status = "okay";
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x0000000 0x100000>;
+                       };
+
+                       partition@100000 {
+                               label = "uImage";
+                               reg = <0x0100000 0x600000>;
+                       };
+
+                       partition@700000 {
+                               label = "root";
+                               reg = <0x0700000 0xf900000>;
+                       };
+
+               };
+       };
+};
index bbea3f6f6d36a86659751ce07e7835fb672e914a..199764fe0fb06d6d2da5798a2fbfa5610ffdd022 100644 (file)
@@ -72,6 +72,14 @@ config MACH_DLINK_KIRKWOOD_DT
          Kirkwood-based D-Link NASes such as DNS-320 & DNS-325,
          using Flattened Device Tree.
 
+config MACH_IB62X0_DT
+       bool "RaidSonic IB-NAS6210, IB-NAS6220 (Flattened Device Tree)"
+       select ARCH_KIRKWOOD_DT
+       help
+         Say 'Y' here if you want your kernel to support the
+         RaidSonic IB-NAS6210 & IB-NAS6220 devices, using
+         Flattened Device Tree.
+
 config MACH_TS219
        bool "QNAP TS-110, TS-119, TS-119P+, TS-210, TS-219, TS-219P and TS-219P+ Turbo NAS"
        help
index 82a3d13e5dc2cd3b08201317c708fa8e8b7441c6..d2b05907b10e57fea036b5e403f3cb2769dd9c9f 100644 (file)
@@ -24,3 +24,4 @@ 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
+obj-$(CONFIG_MACH_IB62X0_DT)           += board-ib62x0.o
index a827ca16406518c11b269392a721cba0c4d16462..02edbdf5b0657b70ea23880468ce0f6f862b9761 100644 (file)
@@ -6,3 +6,4 @@ 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
+dtb-$(CONFIG_MACH_IB62X0_DT) += kirkwood-ib62x0.dtb
index 7e82a8e93795ee02c4562b604f1d321b6fa0229d..10d1969b9e3a8050b66ead369458419c9bb8b1b0 100644 (file)
@@ -62,6 +62,9 @@ static void __init kirkwood_dt_init(void)
        if (of_machine_is_compatible("iom,iconnect"))
                iconnect_init();
 
+       if (of_machine_is_compatible("raidsonic,ib-nas62x0"))
+               ib62x0_init();
+
        of_platform_populate(NULL, kirkwood_dt_match_table, NULL, NULL);
 }
 
@@ -70,6 +73,7 @@ static const char *kirkwood_dt_board_compat[] = {
        "dlink,dns-320",
        "dlink,dns-325",
        "iom,iconnect",
+       "raidsonic,ib-nas62x0",
        NULL
 };
 
diff --git a/arch/arm/mach-kirkwood/board-ib62x0.c b/arch/arm/mach-kirkwood/board-ib62x0.c
new file mode 100644 (file)
index 0000000..eddf1df
--- /dev/null
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2012 (C), Simon Baatz <gmbnomis@gmail.com>
+ *
+ * arch/arm/mach-kirkwood/board-ib62x0.c
+ *
+ * RaidSonic ICY BOX IB-NAS6210 & IB-NAS6220 init for drivers not
+ * converted to flattened device tree yet.
+ *
+ * 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/mtd/partitions.h>
+#include <linux/ata_platform.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 IB62X0_GPIO_POWER_OFF  24
+
+static struct mv643xx_eth_platform_data ib62x0_ge00_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(8),
+};
+
+static struct mv_sata_platform_data ib62x0_sata_data = {
+       .n_ports        = 2,
+};
+
+static unsigned int ib62x0_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,     /* OS LED red */
+       MPP24_GPIO,     /* Power off device */
+       MPP25_GPIO,     /* OS LED green */
+       MPP27_GPIO,     /* USB transfer LED */
+       MPP28_GPIO,     /* Reset button */
+       MPP29_GPIO,     /* USB Copy button */
+       0
+};
+
+static struct gpio_led ib62x0_led_pins[] = {
+       {
+               .name                   = "ib62x0:green:os",
+               .default_trigger        = "default-on",
+               .gpio                   = 25,
+               .active_low             = 0,
+       },
+       {
+               .name                   = "ib62x0:red:os",
+               .default_trigger        = "none",
+               .gpio                   = 22,
+               .active_low             = 0,
+       },
+       {
+               .name                   = "ib62x0:red:usb_copy",
+               .default_trigger        = "none",
+               .gpio                   = 27,
+               .active_low             = 0,
+       },
+};
+
+static struct gpio_led_platform_data ib62x0_led_data = {
+       .leds           = ib62x0_led_pins,
+       .num_leds       = ARRAY_SIZE(ib62x0_led_pins),
+};
+
+static struct platform_device ib62x0_led_device = {
+       .name   = "leds-gpio",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &ib62x0_led_data,
+       }
+};
+
+static struct gpio_keys_button ib62x0_button_pins[] = {
+       {
+               .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 ib62x0_button_data = {
+       .buttons        = ib62x0_button_pins,
+       .nbuttons       = ARRAY_SIZE(ib62x0_button_pins),
+};
+
+static struct platform_device ib62x0_button_device = {
+       .name           = "gpio-keys",
+       .id             = -1,
+       .num_resources  = 0,
+       .dev            = {
+               .platform_data  = &ib62x0_button_data,
+       }
+};
+
+static void ib62x0_power_off(void)
+{
+       gpio_set_value(IB62X0_GPIO_POWER_OFF, 1);
+}
+
+void __init ib62x0_init(void)
+{
+       /*
+        * Basic setup. Needs to be called early.
+        */
+       kirkwood_mpp_conf(ib62x0_mpp_config);
+
+       kirkwood_ehci_init();
+       kirkwood_ge00_init(&ib62x0_ge00_data);
+       kirkwood_sata_init(&ib62x0_sata_data);
+       platform_device_register(&ib62x0_led_device);
+       platform_device_register(&ib62x0_button_device);
+       if (gpio_request(IB62X0_GPIO_POWER_OFF, "ib62x0:power:off") == 0 &&
+           gpio_direction_output(IB62X0_GPIO_POWER_OFF, 0) == 0)
+               pm_power_off = ib62x0_power_off;
+       else
+               pr_err("board-ib62x0: failed to configure power-off GPIO\n");
+}
index 5f0365c74b064babb231964f89d1ae31b027a0f8..a34c41a5172eb0bdfd13f441c8569ee564a00e42 100644 (file)
@@ -70,6 +70,12 @@ void iconnect_init(void);
 static inline void iconnect_init(void) {};
 #endif
 
+#ifdef CONFIG_MACH_IB62X0_DT
+void ib62x0_init(void);
+#else
+static inline void ib62x0_init(void) {};
+#endif
+
 /* early init functions not converted to fdt yet */
 char *kirkwood_id(void);
 void kirkwood_l2_init(void);