ARM: kirkwood: Add support for NETGEAR ReadyNAS Duo v2 using DT
authorArnaud Ebalard <arno@natisbad.org>
Tue, 19 Mar 2013 22:28:06 +0000 (23:28 +0100)
committerJason Cooper <jason@lakedaemon.net>
Thu, 28 Mar 2013 18:32:40 +0000 (18:32 +0000)
Add support for NETGEAR ReadyNAS Duo v2 (Hardware specs available
here: http://natisbad.org/NAS/). Almost everything is supported via
provided .dts. A board-readynas.c file is nonetheless required for
device not only converted to DT (Gbit controller).

Signed-off-by: Arnaud Ebalard <arno@natisbad.org>
Tested-By: Arnaud Ebalard <arno@natisbad.org>
Acked-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Jason Cooper <jason@lakedaemon.net>
arch/arm/boot/dts/Makefile
arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts [new file with mode: 0644]
arch/arm/configs/kirkwood_defconfig
arch/arm/mach-kirkwood/Kconfig
arch/arm/mach-kirkwood/Makefile
arch/arm/mach-kirkwood/board-dt.c
arch/arm/mach-kirkwood/board-readynas.c [new file with mode: 0644]
arch/arm/mach-kirkwood/common.h

index 9c62558..125211d 100644 (file)
@@ -65,6 +65,7 @@ dtb-$(CONFIG_ARCH_KIRKWOOD) += kirkwood-dns320.dtb \
        kirkwood-lschlv2.dtb \
        kirkwood-lsxhl.dtb \
        kirkwood-mplcec4.dtb \
+       kirkwood-netgear_readynas_duo_v2.dtb \
        kirkwood-ns2.dtb \
        kirkwood-ns2lite.dtb \
        kirkwood-ns2max.dtb \
diff --git a/arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts b/arch/arm/boot/dts/kirkwood-netgear_readynas_duo_v2.dts
new file mode 100644 (file)
index 0000000..1ca66ab
--- /dev/null
@@ -0,0 +1,180 @@
+/dts-v1/;
+
+/include/ "kirkwood.dtsi"
+/include/ "kirkwood-6282.dtsi"
+
+/ {
+       model = "NETGEAR ReadyNAS Duo v2";
+       compatible = "netgear,readynas-duo-v2", "netgear,readynas", "marvell,kirkwood-88f6282", "marvell,kirkwood";
+
+       memory { /* 256 MB */
+               device_type = "memory";
+               reg = <0x00000000 0x10000000>;
+       };
+
+       chosen {
+               bootargs = "console=ttyS0,115200n8 earlyprintk";
+       };
+
+       ocp@f1000000 {
+               pinctrl: pinctrl@10000 {
+
+                       pinctrl-0 = < &pmx_uart0
+                                     &pmx_button_power
+                                     &pmx_button_backup
+                                     &pmx_button_reset
+                                     &pmx_led_blue_power
+                                     &pmx_led_blue_activity
+                                     &pmx_led_blue_disk1
+                                     &pmx_led_blue_disk2
+                                     &pmx_led_blue_backup >;
+                       pinctrl-names = "default";
+
+                       pmx_button_power: pmx-button-power {
+                               marvell,pins = "mpp47";
+                               marvell,function = "gpio";
+                       };
+                       pmx_button_backup: pmx-button-backup {
+                               marvell,pins = "mpp45";
+                               marvell,function = "gpio";
+                       };
+                       pmx_button_reset: pmx-button-reset {
+                               marvell,pins = "mpp13";
+                               marvell,function = "gpio";
+                       };
+                       pmx_led_blue_power: pmx-led-blue-power {
+                               marvell,pins = "mpp31";
+                               marvell,function = "gpio";
+                       };
+                       pmx_led_blue_activity: pmx-led-blue-activity {
+                               marvell,pins = "mpp38";
+                               marvell,function = "gpio";
+                       };
+                       pmx_led_blue_disk1: pmx-led-blue-disk1 {
+                               marvell,pins = "mpp23";
+                               marvell,function = "gpio";
+                       };
+                       pmx_led_blue_disk2: pmx-led-blue-disk2 {
+                               marvell,pins = "mpp22";
+                               marvell,function = "gpio";
+                       };
+                       pmx_led_blue_backup: pmx-led-blue-backup {
+                               marvell,pins = "mpp29";
+                               marvell,function = "gpio";
+                       };
+               };
+
+               i2c@11000 {
+                       status = "okay";
+
+                       rs5c372a: rs5c372a@32 {
+                               compatible = "ricoh,rs5c372a";
+                               reg = <0x32>;
+                       };
+               };
+
+               serial@12000 {
+                       status = "okay";
+               };
+
+               nand@3000000 {
+                       status = "okay";
+
+                       partition@0 {
+                               label = "u-boot";
+                               reg = <0x0000000 0x180000>;
+                               read-only;
+                       };
+
+                       partition@180000 {
+                               label = "u-boot-env";
+                               reg = <0x180000 0x20000>;
+                       };
+
+                       partition@200000 {
+                               label = "uImage";
+                               reg = <0x0200000 0x600000>;
+                       };
+
+                       partition@800000 {
+                               label = "minirootfs";
+                               reg = <0x0800000 0x1000000>;
+                       };
+
+                       partition@1800000 {
+                               label = "jffs2";
+                               reg = <0x1800000 0x6800000>;
+                       };
+               };
+
+               sata@80000 {
+                       status = "okay";
+                       nr-ports = <2>;
+               };
+       };
+
+       gpio-leds {
+               compatible = "gpio-leds";
+
+               power_led {
+                       label = "status:blue:power_led";
+                       gpios = <&gpio0 31 1>;   /* GPIO 31 Active Low */
+                       linux,default-trigger = "default-on";
+               };
+               activity_led {
+                       label = "status:blue:activity_led";
+                       gpios = <&gpio1 6 1>;    /* GPIO 38 Active Low */
+               };
+               disk1_led {
+                       label = "status:blue:disk1_led";
+                       gpios = <&gpio0 23 1>;   /* GPIO 23 Active Low */
+               };
+               disk2_led {
+                       label = "status:blue:disk2_led";
+                       gpios = <&gpio0 22 1>;   /* GPIO 22 Active Low */
+               };
+               backup_led {
+                       label = "status:blue:backup_led";
+                       gpios = <&gpio0 29 1>;   /* GPIO 29 Active Low*/
+               };
+       };
+
+       gpio_keys {
+               compatible = "gpio-keys";
+               #address-cells = <1>;
+               #size-cells = <0>;
+               button@1 {
+                       label = "Power Button";
+                       linux,code = <116>;     /* KEY_POWER */
+                       gpios = <&gpio1 15 1>;
+               };
+               button@2 {
+                       label = "Reset Button";
+                       linux,code = <0x198>;   /* KEY_RESTART */
+                       gpios = <&gpio0 13 1>;
+               };
+               button@3 {
+                       label = "Backup Button";
+                       linux,code = <133>;     /* KEY_COPY */
+                       gpios = <&gpio1 13 1>;
+               };
+       };
+
+        regulators {
+                compatible = "simple-bus";
+                #address-cells = <1>;
+                #size-cells = <0>;
+
+                usb_power: regulator@1 {
+                        compatible = "regulator-fixed";
+                        reg = <1>;
+                        regulator-name = "USB 3.0 Power";
+                        regulator-min-microvolt = <5000000>;
+                        regulator-max-microvolt = <5000000>;
+                        enable-active-high;
+                        regulator-always-on;
+                        regulator-boot-on;
+                        gpio = <&gpio1 14 0>;
+                };
+        };
+};
index 13482ea..9eb9f48 100644 (file)
@@ -34,6 +34,7 @@ CONFIG_MACH_NETSPACE_MAX_V2_DT=y
 CONFIG_MACH_NETSPACE_LITE_V2_DT=y
 CONFIG_MACH_NETSPACE_MINI_V2_DT=y
 CONFIG_MACH_OPENBLOCKS_A6_DT=y
+CONFIG_MACH_READYNAS_DT=y
 CONFIG_MACH_TOPKICK_DT=y
 CONFIG_MACH_TS219=y
 CONFIG_MACH_TS41X=y
index 7b6a64b..3fd07eb 100644 (file)
@@ -194,6 +194,15 @@ config MACH_OPENBLOCKS_A6_DT
          Say 'Y' here if you want your kernel to support the
          Plat'Home OpenBlocks A6 (Flattened Device Tree).
 
+config MACH_READYNAS_DT
+       bool "NETGEAR ReadyNAS Duo v2 (Flattened Device Tree)"
+       select ARCH_KIRKWOOD_DT
+       select ARM_APPENDED_DTB
+       select ARM_ATAG_DTB_COMPAT
+       help
+         Say 'Y' here if you want your kernel to support the
+         NETGEAR ReadyNAS Duo v2 using Fattened Device Tree.
+
 config MACH_TOPKICK_DT
        bool "USI Topkick (Flattened Device Tree)"
        select ARCH_KIRKWOOD_DT
index 4cc4bee..ff0f3cb 100644 (file)
@@ -39,4 +39,5 @@ obj-$(CONFIG_MACH_NETSPACE_LITE_V2_DT)        += board-ns2.o
 obj-$(CONFIG_MACH_NETSPACE_MINI_V2_DT) += board-ns2.o
 obj-$(CONFIG_MACH_NSA310_DT)           += board-nsa310.o
 obj-$(CONFIG_MACH_OPENBLOCKS_A6_DT)    += board-openblocks_a6.o
+obj-$(CONFIG_MACH_READYNAS_DT)         += board-readynas.o
 obj-$(CONFIG_MACH_TOPKICK_DT)          += board-usi_topkick.o
index d367aa6..e5a3cfe 100644 (file)
@@ -149,6 +149,9 @@ static void __init kirkwood_dt_init(void)
        if (of_machine_is_compatible("mpl,cec4"))
                mplcec4_init();
 
+       if (of_machine_is_compatible("netgear,readynas-duo-v2"))
+               netgear_readynas_init();
+
        if (of_machine_is_compatible("plathome,openblocks-a6"))
                openblocks_a6_init();
 
@@ -177,6 +180,7 @@ static const char * const kirkwood_dt_board_compat[] = {
        "lacie,netspace_lite_v2",
        "lacie,netspace_mini_v2",
        "mpl,cec4",
+       "netgear,readynas-duo-v2",
        "plathome,openblocks-a6",
        "usi,topkick",
        "zyxel,nsa310",
diff --git a/arch/arm/mach-kirkwood/board-readynas.c b/arch/arm/mach-kirkwood/board-readynas.c
new file mode 100644 (file)
index 0000000..fb42c20
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * NETGEAR ReadyNAS Duo v2 Board setup for drivers not already
+ * converted to DT.
+ *
+ * Copyright (C) 2013, Arnaud EBALARD <arno@natisbad.org>
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version
+ * 2 of the License, or (at your option) any later version.
+ */
+
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mv643xx_eth.h>
+#include <mach/kirkwood.h>
+#include "common.h"
+
+static struct mv643xx_eth_platform_data netgear_readynas_ge00_data = {
+       .phy_addr       = MV643XX_ETH_PHY_ADDR(0),
+};
+
+void __init netgear_readynas_init(void)
+{
+       kirkwood_ge00_init(&netgear_readynas_ge00_data);
+       kirkwood_pcie_init(KW_PCIE0);
+}
index 5ed7056..7ee8670 100644 (file)
@@ -141,6 +141,12 @@ void openblocks_a6_init(void);
 static inline void openblocks_a6_init(void) {};
 #endif
 
+#ifdef CONFIG_MACH_READYNAS_DT
+void netgear_readynas_init(void);
+#else
+static inline void netgear_readynas_init(void) {};
+#endif
+
 #ifdef CONFIG_MACH_TOPKICK_DT
 void usi_topkick_init(void);
 #else