kirkwood: add support for seagate goflexnet and goflexhome
authorLuka Perkov <luka@openwrt.org>
Sun, 15 Jul 2012 12:18:29 +0000 (12:18 +0000)
committerLuka Perkov <luka@openwrt.org>
Sun, 15 Jul 2012 12:18:29 +0000 (12:18 +0000)
Signed-off-by: Martin Mueller <mm@sig21.net>
SVN-Revision: 32725

target/linux/kirkwood/config-3.3
target/linux/kirkwood/files/arch/arm/mach-kirkwood/goflexhome-setup.c [new file with mode: 0644]
target/linux/kirkwood/files/arch/arm/mach-kirkwood/goflexnet-setup.c [new file with mode: 0644]
target/linux/kirkwood/patches/000-boards.patch

index b1cace766cead33d143e2ef8b76f561c8a9ffe7e..44b8a0c58d59be317d0813b23430305b7dddea27 100644 (file)
@@ -99,6 +99,8 @@ CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_MACH_D2NET_V2 is not set
 # CONFIG_MACH_DB88F6281_BP is not set
 CONFIG_MACH_DOCKSTAR=y
 # CONFIG_MACH_D2NET_V2 is not set
 # CONFIG_MACH_DB88F6281_BP is not set
 CONFIG_MACH_DOCKSTAR=y
+CONFIG_MACH_GOFLEXNET=y
+CONFIG_MACH_GOFLEXHOME=y
 # CONFIG_MACH_ESATA_SHEEVAPLUG is not set
 # CONFIG_MACH_GURUPLUG is not set
 CONFIG_MACH_ICONNECT=y
 # CONFIG_MACH_ESATA_SHEEVAPLUG is not set
 # CONFIG_MACH_GURUPLUG is not set
 CONFIG_MACH_ICONNECT=y
diff --git a/target/linux/kirkwood/files/arch/arm/mach-kirkwood/goflexhome-setup.c b/target/linux/kirkwood/files/arch/arm/mach-kirkwood/goflexhome-setup.c
new file mode 100644 (file)
index 0000000..84daeef
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * arch/arm/mach-kirkwood/goflexhome-setup.c
+ *
+ * Seagate GoFlex Home 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/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 goflexhome_nand_parts[] = {
+       {
+               .name = "u-boot",
+               .offset = 0,
+               .size = SZ_1M
+       }, {
+               .name = "uImage",
+               .offset = MTDPART_OFS_NXTBLK,
+               .size = SZ_2M + SZ_4M
+       }, {
+               .name = "root",
+               .offset = MTDPART_OFS_NXTBLK,
+               .size = MTDPART_SIZ_FULL
+       },
+};
+
+static struct mv643xx_eth_platform_data goflexhome_ge00_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
+};
+
+static struct mv_sata_platform_data goflexhome_sata_data = {
+       .n_ports        = 1,
+};
+
+static struct gpio_led goflexhome_led_pins[] = {
+       {
+               .name                   = "status:green:health",
+               .default_trigger        = "default-on",
+               .gpio                   = 46,
+               .active_low             = 1,
+       },
+       {
+               .name                   = "status:orange:fault",
+               .default_trigger        = "none",
+               .gpio                   = 47,
+               .active_low             = 1,
+       },
+       {
+               .name                   = "status:white:misc",
+               .default_trigger        = "none",
+               .gpio                   = 40,
+               .active_low             = 0,
+       }
+};
+
+static struct gpio_led_platform_data goflexhome_led_data = {
+       .leds           = goflexhome_led_pins,
+       .num_leds       = ARRAY_SIZE(goflexhome_led_pins),
+};
+
+static struct platform_device goflexhome_leds = {
+       .name   = "leds-gpio",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &goflexhome_led_data,
+       }
+};
+
+static unsigned int goflexhome_mpp_config[] __initdata = {
+       MPP29_GPIO,     /* USB Power Enable */
+       MPP47_GPIO,     /* LED Orange */
+       MPP46_GPIO,     /* LED Green */
+       MPP40_GPIO,     /* LED White */
+       0
+};
+
+static void __init goflexhome_init(void)
+{
+       /*
+        * Basic setup. Needs to be called early.
+        */
+       kirkwood_init();
+
+       /* setup gpio pin select */
+       kirkwood_mpp_conf(goflexhome_mpp_config);
+
+       kirkwood_uart0_init();
+       kirkwood_nand_init(ARRAY_AND_SIZE(goflexhome_nand_parts), 40);
+
+       if (gpio_request(29, "USB Power Enable") != 0 ||
+           gpio_direction_output(29, 1) != 0)
+               printk(KERN_ERR "can't set up GPIO 29 (USB Power Enable)\n");
+       kirkwood_ehci_init();
+       kirkwood_ge00_init(&goflexhome_ge00_data);
+       kirkwood_sata_init(&goflexhome_sata_data);
+
+       platform_device_register(&goflexhome_leds);
+}
+
+MACHINE_START(GOFLEXHOME, "Seagate GoFlex Home")
+       /* Maintainer: Peter Carmichael <peterjncarm@ovi.com> */
+       .atag_offset    = 0x100,
+       .init_machine   = goflexhome_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/arch/arm/mach-kirkwood/goflexnet-setup.c b/target/linux/kirkwood/files/arch/arm/mach-kirkwood/goflexnet-setup.c
new file mode 100644 (file)
index 0000000..cd9dc9e
--- /dev/null
@@ -0,0 +1,176 @@
+/*
+ * arch/arm/mach-kirkwood/goflexnet-setup.c
+ *
+ * Seagate GoFlex Net 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/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 goflexnet_nand_parts[] = {
+       {
+               .name = "u-boot",
+               .offset = 0,
+               .size = SZ_1M
+       }, {
+               .name = "uImage",
+               .offset = MTDPART_OFS_NXTBLK,
+               .size = SZ_4M
+       }, {
+               .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 goflexnet_ge00_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
+};
+
+static struct mv_sata_platform_data goflexnet_sata_data = {
+       .n_ports        = 2,
+};
+
+static struct gpio_led goflexnet_led_pins[] = {
+       {
+               .name                   = "status:green:health",
+               .default_trigger        = "default-on",
+               .gpio                   = 46, // 0x4000
+               .active_low             = 1,
+       },
+       {
+               .name                   = "status:orange:fault",
+               .default_trigger        = "none",
+               .gpio                   = 47, // 0x8000
+               .active_low             = 1,
+       },
+       {
+               .name                   = "status:white:left0",
+               .default_trigger        = "none",
+               .gpio                   = 42, // 0x0400
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:left1",
+               .default_trigger        = "none",
+               .gpio                   = 43, // 0x0800
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:left2",
+               .default_trigger        = "none",
+               .gpio                   = 44, // 0x1000
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:left3",
+               .default_trigger        = "none",
+               .gpio                   = 45, // 0x2000
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:right0",
+               .default_trigger        = "none",
+               .gpio                   = 38, // 0x0040
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:right1",
+               .default_trigger        = "none",
+               .gpio                   = 39, // 0x0080
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:right2",
+               .default_trigger        = "none",
+               .gpio                   = 40, // 0x0100
+               .active_low             = 0,
+       },
+       {
+               .name                   = "status:white:right3",
+               .default_trigger        = "none",
+               .gpio                   = 41, // 0x0200
+               .active_low             = 0,
+       }
+};
+
+static struct gpio_led_platform_data goflexnet_led_data = {
+       .leds           = goflexnet_led_pins,
+       .num_leds       = ARRAY_SIZE(goflexnet_led_pins),
+};
+
+static struct platform_device goflexnet_leds = {
+       .name   = "leds-gpio",
+       .id     = -1,
+       .dev    = {
+               .platform_data  = &goflexnet_led_data,
+       }
+};
+
+static unsigned int goflexnet_mpp_config[] __initdata = {
+       MPP29_GPIO,     /* USB Power Enable */
+       MPP47_GPIO,     /* LED Orange */
+       MPP46_GPIO,     /* LED Green */
+       MPP45_GPIO,     /* LED Left Capacity 3 */
+       MPP44_GPIO,     /* LED Left Capacity 2 */
+       MPP43_GPIO,     /* LED Left Capacity 1 */
+       MPP42_GPIO,     /* LED Left Capacity 0 */
+       MPP41_GPIO,     /* LED Right Capacity 3 */
+       MPP40_GPIO,     /* LED Right Capacity 2 */
+       MPP39_GPIO,     /* LED Right Capacity 1 */
+       MPP38_GPIO,     /* LED Right Capacity 0 */
+       0
+};
+
+static void __init goflexnet_init(void)
+{
+       /*
+        * Basic setup. Needs to be called early.
+        */
+       kirkwood_init();
+
+       /* setup gpio pin select */
+       kirkwood_mpp_conf(goflexnet_mpp_config);
+
+       kirkwood_uart0_init();
+       kirkwood_nand_init(ARRAY_AND_SIZE(goflexnet_nand_parts), 40);
+
+       if (gpio_request(29, "USB Power Enable") != 0 ||
+           gpio_direction_output(29, 1) != 0)
+               printk(KERN_ERR "can't set up GPIO 29 (USB Power Enable)\n");
+       kirkwood_ehci_init();
+       kirkwood_ge00_init(&goflexnet_ge00_data);
+       kirkwood_sata_init(&goflexnet_sata_data);
+
+       platform_device_register(&goflexnet_leds);
+}
+
+MACHINE_START(GOFLEXNET, "Seagate GoFlex Net")
+       /* Maintainer: Peter Carmichael <peterjncarm@ovi.com> */
+       .atag_offset    = 0x100,
+       .init_machine   = goflexnet_init,
+       .map_io         = kirkwood_map_io,
+       .init_early     = kirkwood_init_early,
+       .init_irq       = kirkwood_init_irq,
+       .timer          = &kirkwood_timer,
+       .restart        = kirkwood_restart,
+MACHINE_END
index 4fe376e9bc9ce5f05a7a0433d0a7526f8a483ef1..22bd2b66b649218a10688948606ab20fef4229e8 100644 (file)
@@ -1,6 +1,15 @@
 --- a/arch/arm/mach-kirkwood/Makefile
 +++ b/arch/arm/mach-kirkwood/Makefile
 --- a/arch/arm/mach-kirkwood/Makefile
 +++ b/arch/arm/mach-kirkwood/Makefile
-@@ -18,5 +18,8 @@ obj-$(CONFIG_MACH_D2NET_V2)          += d2net_v2
+@@ -8,6 +8,8 @@ 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_GOFLEXNET)          += goflexnet-setup.o
++obj-$(CONFIG_MACH_GOFLEXHOME)         += goflexhome-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
+@@ -18,5 +20,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_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_CPU_IDLE)                        += cpuidle.o
 --- a/arch/arm/mach-kirkwood/Kconfig
 +++ b/arch/arm/mach-kirkwood/Kconfig
  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
+@@ -64,6 +64,18 @@ config MACH_DOCKSTAR
+         Say 'Y' here if you want your kernel to support the
+         Seagate FreeAgent DockStar.
++config MACH_GOFLEXNET
++        bool "Seagate GoFlex Net"
++        help
++          Say 'Y' here if you want your kernel to support the
++          Seagate GoFlex Net.
++
++config MACH_GOFLEXHOME
++        bool "Seagate GoFlex Home"
++        help
++          Say 'Y' here if you want your kernel to support the
++          Seagate GoFlex Home.
++
+ config MACH_OPENRD
+         bool
+@@ -130,6 +142,24 @@ config MACH_T5325
          Say 'Y' here if you want your kernel to support the
          HP t5325 Thin Client.
  
          Say 'Y' here if you want your kernel to support the
          HP t5325 Thin Client.