/*
 * Device Tree file for NETGEAR ReadyNAS 102
 *
 * 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 "armada-370.dtsi"

/ {
	model = "NETGEAR ReadyNAS 102";
	compatible = "netgear,readynas-102", "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 Marvell SATA controller */
			pcie@1,0 {
				/* Port 0, Lane 0 */
				status = "okay";
			};

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

		internal-regs {
			serial@12000 {
				clock-frequency = <200000000>;
				status = "okay";
			};

			sata@a0000 {
				nr-ports = <2>;
				status = "okay";
			};

			pinctrl {
				power_led_pin: power-led-pin {
					marvell,pins = "mpp57";
					marvell,function = "gpio";
				};
				sata1_led_pin: sata1-led-pin {
					marvell,pins = "mpp15";
					marvell,function = "gpio";
				};

				sata2_led_pin: sata2-led-pin {
					marvell,pins = "mpp14";
					marvell,function = "gpio";
				};

				backup_led_pin: backup-led-pin {
					marvell,pins = "mpp56";
					marvell,function = "gpio";
				};

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

			mdio {
				phy0: ethernet-phy@0 {
					reg = <0>;
				};
			};

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

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

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

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

	clocks {
	       #address-cells = <1>;
	       #size-cells = <0>;

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

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

		blue_power_led {
			label = "rn102:blue:pwr";
			gpios = <&gpio1 25 1>;  /* GPIO 57 Active Low */
			linux,default-trigger = "heartbeat";
		};

		green_sata1_led {
			label = "rn102:green:sata1";
			gpios = <&gpio0 15 1>;  /* GPIO 15 Active Low */
			default-state = "on";
		};

		green_sata2_led {
			label = "rn102:green:sata2";
			gpios = <&gpio0 14 1>;   /* GPIO 14 Active Low */
			default-state = "on";
		};

		green_backup_led {
			label = "rn102:green:backup";
			gpios = <&gpio1 24 1>;   /* GPIO 56 Active Low */
			default-state = "on";
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;

		button@1 {
			label = "Power Button";
			linux,code = <116>;     /* KEY_POWER */
			gpios = <&gpio1 30 0>;
		};

		button@2 {
			label = "Reset Button";
			linux,code = <0x198>;   /* KEY_RESTART */
			gpios = <&gpio0 6 1>;
		};

		button@3 {
			label = "Backup Button";
			linux,code = <133>;     /* KEY_COPY */
			gpios = <&gpio1 26 1>;
		};
	};

	gpio_poweroff {
		compatible = "gpio-poweroff";
		pinctrl-0 = <&poweroff>;
		pinctrl-names = "default";
		gpios = <&gpio0 8 1>;
	};

};
