/*
 * Device Tree common file for the Seagate NAS 2 and 4-bay (Armada 370 SoC).
 *
 * Copyright (C) 2015 Seagate
 *
 * Author: Vincent Donnefort <vdonnefort@gmail.com>
 *
 * 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.
 */

/*
 * TODO: add support for the white SATA LEDs associated with HDD 0 and 1.
 */

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

/ {
	chosen {
		stdout-path = "serial0:115200n8";
	};

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

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

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

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

			ethernet@70000 {
				status = "okay";
				pinctrl-0 = <&ge0_rgmii_pins>;
				pinctrl-names = "default";
				phy = <&phy0>;
				phy-mode = "rgmii-id";
			};

			i2c@11000 {
				status = "okay";
				pinctrl-0 = <&i2c0_pins>;
				pinctrl-names = "default";
				clock-frequency = <100000>;

				/* RTC - NXP 8563T (second source) */
				rtc@51 {
					compatible = "nxp,pcf8563";
					reg = <0x51>;
					interrupts = <110>;
				};
				/* RTC - MCP7940NT */
				rtc@6f {
					compatible = "microchip,mcp7941x";
					reg = <0x6f>;
					interrupts = <110>;
				};
			};

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

				partition@0 {
					label = "u-boot";
					reg = <0x0 0x300000>;
				};
				partition@300000 {
					label = "device-tree";
					reg = <0x300000 0x20000>;
				};
				partition@320000 {
					label = "linux";
					reg = <0x320000 0x2000000>;
				};
				partition@2320000 {
					label = "rootfs";
					reg = <0x2320000 0xdce0000>;
				};
			};
		};

	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-names = "default";

		regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "SATA0 power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio1 18 GPIO_ACTIVE_HIGH>;
		};
		regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "SATA1 power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio1 22 GPIO_ACTIVE_HIGH>;
		};
	};

	gpio-fan {
		compatible = "gpio-fan";
		gpios = <&gpio2 0 GPIO_ACTIVE_HIGH
			 &gpio2 1 GPIO_ACTIVE_HIGH>;
	};

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

		power {
			label = "Power button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
		backup {
			label = "Backup button";
			linux,code = <KEY_OPTION>;
			gpios = <&gpio0 31 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
		reset {
			label = "Reset Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio1 23 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
	};

	gpio-leds {
		compatible = "gpio-leds";

		white-power {
			label = "dart:white:power";
			gpios = <&gpio1 28 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "timer";

		};
		red-power {
			label = "dart:red:power";
			gpios = <&gpio1 31 GPIO_ACTIVE_HIGH>;
		};
		red-sata0 {
			label = "dart:red:sata0";
			gpios = <&gpio1 15 GPIO_ACTIVE_LOW>;
		};
		red-sata1 {
			label = "dart:red:sata1";
			gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
		};
	};

	gpio_poweroff {
		compatible = "gpio-poweroff";
		gpios = <&gpio1 30 GPIO_ACTIVE_LOW>;
	};
};

&pciec {
	status = "okay";

	/* USB 3.0 bridge ASM1042A */
	pcie@2,0 {
		status = "okay";
	};
};


&mdio {
	pinctrl-0 = <&mdio_pins>;
	pinctrl-names = "default";

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

&pinctrl {
	pinctrl-0 = <&hdd0_led_sata_pin>, <&hdd1_led_sata_pin>;
	pinctrl-names = "default";

	hdd0_led_sata_pin: hdd0-led-sata-pin {
		marvell,pins = "mpp48";
		marvell,function = "sata1";
	};
	hdd0_led_gpio_pin: hdd0-led-gpio-pin {
		marvell,pins = "mpp48";
		marvell,function = "gpio";
	};
	hdd1_led_sata_pin: hdd1-led-sata-pin {
		marvell,pins = "mpp57";
		marvell,function = "sata0";
	};
	hdd1_led_gpio_pin: hdd1-led-gpio-pin {
		marvell,pins = "mpp57";
		marvell,function = "gpio";
	};
};
