ARM: kirkwood: Add support for NETGEAR ReadyNAS Duo v2 using DT

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>
This commit is contained in:
Arnaud Ebalard 2013-03-19 23:28:06 +01:00 коммит произвёл Jason Cooper
Родитель 8bb9660418
Коммит f236f5aabe
8 изменённых файлов: 230 добавлений и 0 удалений

Просмотреть файл

@ -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 \

Просмотреть файл

@ -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>;
};
};
};

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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

Просмотреть файл

@ -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",

Просмотреть файл

@ -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);
}

Просмотреть файл

@ -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