/*
 * Device Tree file for NETGEAR ReadyNAS 104
 *
 * 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.
 */

/dts-v1/;

#include <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>
#include "armada-370.dtsi"

/ {
	model = "NETGEAR ReadyNAS 104";
	compatible = "netgear,readynas-104", "marvell,armada370", "marvell,armada-370-xp";

	chosen {
		bootargs = "console=ttyS0,115200 earlyprintk";
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x20000000>; /* 512 MB */
	};

	soc {
		ranges = <MBUS_ID(0xf0, 0x01) 0 0xd0000000 0x100000
			  MBUS_ID(0x01, 0xe0) 0 0xfff00000 0x100000>;

		pcie-controller {
			status = "okay";

			/* Connected to FL1009 USB 3.0 controller */
			pcie@1,0 {
				/* Port 0, Lane 0 */
				status = "okay";
			};

			/* Connected to Marvell 88SE9215 SATA controller */
			pcie@2,0 {
				/* Port 1, Lane 0 */
				status = "okay";
			};
		};

		internal-regs {
			serial@12000 {
				status = "okay";
			};

			pinctrl {
				poweroff: poweroff {
					marvell,pins = "mpp60";
					marvell,function = "gpio";
				};

				backup_button_pin: backup-button-pin {
					marvell,pins = "mpp52";
					marvell,function = "gpio";
				};

				power_button_pin: power-button-pin {
					marvell,pins = "mpp62";
					marvell,function = "gpio";
				};

				backup_led_pin: backup-led-pin {
					marvell,pins = "mpp63";
					marvell,function = "gpo";
				};

				power_led_pin: power-led-pin {
					marvell,pins = "mpp64";
					marvell,function = "gpio";
				};

				reset_button_pin: reset-button-pin {
					marvell,pins = "mpp65";
					marvell,function = "gpio";
				};
			};

			mdio {
				phy0: ethernet-phy@0 { /* Marvell 88E1318 */
					reg = <0>;
				};

				phy1: ethernet-phy@1 { /* Marvell 88E1318 */
					reg = <1>;
				};
			};

			ethernet@70000 {
				status = "okay";
				phy = <&phy0>;
				phy-mode = "rgmii-id";
			};

			ethernet@74000 {
				status = "okay";
				phy = <&phy1>;
				phy-mode = "rgmii-id";
			};

			usb@50000 {
				status = "okay";
			};

			i2c@11000 {
				compatible = "marvell,mv64xxx-i2c";
				clock-frequency = <100000>;
				status = "okay";

				isl12057: isl12057@68 {
					compatible = "isl,isl12057";
					reg = <0x68>;
				};

				g762: g762@3e {
					compatible = "gmt,g762";
					reg = <0x3e>;
					clocks = <&g762_clk>; /* input clock */
					fan_gear_mode = <0>;
					fan_startv = <1>;
					pwm_polarity = <0>;
				};

				pca9554: pca9554@23 {
					compatible = "nxp,pca9554";
					gpio-controller;
					#gpio-cells = <2>;
					reg = <0x23>;
				};
			};

			nand@d0000 {
				status = "okay";
				num-cs = <1>;
				marvell,nand-keep-config;
				marvell,nand-enable-arbiter;
				nand-on-flash-bbt;

				partition@0 {
					label = "u-boot";
					reg = <0x0000000 0x180000>;  /* 1.5MB */
					read-only;
				};

				partition@180000 {
					label = "u-boot-env";
					reg = <0x180000 0x20000>;    /* 128KB */
					read-only;
				};

				partition@200000 {
					label = "uImage";
					reg = <0x0200000 0x600000>;    /* 6MB */
				};

				partition@800000 {
					label = "minirootfs";
					reg = <0x0800000 0x400000>;    /* 4MB */
				};

				/* Last MB is for the BBT, i.e. not writable */
				partition@c00000 {
					label = "ubifs";
					reg = <0x0c00000 0x7400000>; /* 116MB */
				};
			};
		};
	};

	clocks {
	       g762_clk: g762-oscillator {
			 compatible = "fixed-clock";
			 #clock-cells = <0>;
			 clock-frequency = <8192>;
	       };
	};

	gpio-leds {
		compatible = "gpio-leds";
		pinctrl-0 = <&backup_led_pin &power_led_pin>;
		pinctrl-names = "default";

		blue-backup-led {
			label = "rn104:blue:backup";
			gpios = <&gpio1 31 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		blue-power-led {
			label = "rn104:blue:pwr";
			gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "keep";
		};

		blue-sata1-led {
			label = "rn104:blue:sata1";
			gpios = <&pca9554 0 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		blue-sata2-led {
			label = "rn104:blue:sata2";
			gpios = <&pca9554 1 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		blue-sata3-led {
			label = "rn104:blue:sata3";
			gpios = <&pca9554 2 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};

		blue-sata4-led {
			label = "rn104:blue:sata4";
			gpios = <&pca9554 3 GPIO_ACTIVE_LOW>;
			default-state = "off";
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-0 = <&backup_button_pin
			     &power_button_pin
			     &reset_button_pin>;
		pinctrl-names = "default";

		backup-button {
			label = "Backup Button";
			linux,code = <KEY_COPY>;
			gpios = <&gpio1 20 GPIO_ACTIVE_LOW>;
		};

		power-button {
			label = "Power Button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio1 30 GPIO_ACTIVE_HIGH>;
		};

		reset-button {
			label = "Reset Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio2 1 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-poweroff {
		compatible = "gpio-poweroff";
		pinctrl-0 = <&poweroff>;
		pinctrl-names = "default";
		gpios = <&gpio1 28 GPIO_ACTIVE_LOW>;
	};
};
