/*
 * 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 {
		device_type = "memory";
		reg = <0x00000000 0x20000000>; /* 512 MB */
	};

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

		pcie-controller {
			status = "okay";

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

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

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

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

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

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

		button@1 {
			label = "Power button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio1 19 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
		button@2 {
			label = "Backup button";
			linux,code = <KEY_OPTION>;
			gpios = <&gpio0 31 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
		button@3 {
			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>;
	};
};

&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";
	};
};
