/*
 * Device Tree file for Synology DS213j
 *
 * Copyright (C) 2014, Arnaud EBALARD <arno@natisbad.org>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file 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.
 *
 *     This file is distributed in the hope that it will be useful
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 * Or, alternatively
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED , WITHOUT WARRANTY OF ANY KIND
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 *
 * Note: this Device Tree assumes that the bootloader has remapped the
 * internal registers to 0xf1000000 (instead of the old 0xd0000000).
 * The 0xf1000000 is the default used by the recent, DT-capable, U-Boot
 * bootloaders provided by Marvell. It is used in recent versions of
 * DSM software provided by Synology. Nonetheless, some earlier boards
 * were delivered with an older version of u-boot that left internal
 * registers mapped at 0xd0000000. If you have such a device you will
 * not be able to directly boot a kernel based on this Device Tree. In
 * that case, the preferred solution is to update your bootloader (e.g.
 * by upgrading to latest version of DSM, or building a new one and
 * installing it from u-boot prompt) or adjust the Devive Tree
 * (s/0xf1000000/0xd0000000/ in 'ranges' below).
 */

/dts-v1/;

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

/ {
	model = "Synology DS213j";
	compatible = "synology,ds213j", "marvell,armada370",
		     "marvell,armada-370-xp";

	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
			  MBUS_ID(0x09, 0x01) 0 0xf1100000 0x10000>;

		internal-regs {

			/* RTC provided by Seiko S-35390A I2C RTC chip below */
			rtc@10300 {
				status = "disabled";
			};

			i2c@11000 {
				compatible = "marvell,mv64xxx-i2c";
				pinctrl-0 = <&i2c0_pins>;
				pinctrl-names = "default";
				clock-frequency = <400000>;
				status = "okay";

				/* Main device RTC chip */
				s35390a: s35390a@30 {
					 compatible = "sii,s35390a";
					 reg = <0x30>;
				};
			};

			/* Connected to a header on device's PCB */
			serial@12000 {
				status = "okay";
			};

			/* Connected to a TI MSP430F2111 for power control */
			serial@12100 {
				status = "okay";
			};

			poweroff@12100 {
				compatible = "synology,power-off";
				reg = <0x12100 0x100>;
				clocks = <&coreclk 0>;
			};

			/* rear USB port, near reset button */
			usb@50000 {
				status = "okay";
			};

			/* rear USB port, near RJ45 port */
			usb@51000 {
				status = "okay";
			};

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

			ethernet@70000 {
			       status = "okay";
			       phy = <&phy1>;
			       phy-mode = "sgmii";
			};

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

	gpio-fan-32-38 {
		status = "okay";
		compatible = "gpio-fan";
		pinctrl-0 = <&fan_ctrl_low_pin &fan_ctrl_mid_pin
			     &fan_ctrl_high_pin &fan_alarm_pin>;
		pinctrl-names = "default";
		gpios = <&gpio1 31 GPIO_ACTIVE_HIGH
			 &gpio2  0 GPIO_ACTIVE_HIGH
			 &gpio2  1 GPIO_ACTIVE_HIGH>;
		alarm-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;
		gpio-fan,speed-map = <    0 0
				       1000 1
				       1150 2
				       1350 4
				       1500 3
				       1650 5
				       1750 6
				       1900 7 >;
	};

	gpio-leds {
		compatible = "gpio-leds";
		pinctrl-0 = <&disk1_led_pin
			     &disk2_led_pin>;
		pinctrl-names = "default";

		disk1-led-amber {
			label = "synology:amber:disk1";
			gpios = <&gpio0 31 GPIO_ACTIVE_LOW>;
			default-state = "keep";
		};

		disk2-led-amber {
			label = "synology:amber:disk2";
			gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
			default-state = "keep";
		};
	};

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

		sata1_regulator: sata1-regulator {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "SATA1 Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			startup-delay-us = <2000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio1 5 GPIO_ACTIVE_HIGH>;
		};

		sata2_regulator: sata2-regulator {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "SATA2 Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			startup-delay-us = <4000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio1 30 GPIO_ACTIVE_HIGH>;
		};
	};
};

&pinctrl {
	disk1_led_pin: disk1-led-pin {
		marvell,pins = "mpp31";
		marvell,function = "gpio";
	};

	disk2_led_pin: disk2-led-pin {
		marvell,pins = "mpp32";
		marvell,function = "gpio";
	};

	sata1_pwr_pin: sata1-pwr-pin {
		marvell,pins = "mpp37";
		marvell,function = "gpio";
	};

	sata2_pwr_pin: sata2-pwr-pin {
		marvell,pins = "mpp62";
		marvell,function = "gpio";
	};

	sata1_pres_pin: sata1-pres-pin {
		marvell,pins = "mpp60";
		marvell,function = "gpio";
	};

	sata2_pres_pin: sata2-pres-pin {
		marvell,pins = "mpp48";
		marvell,function = "gpio";
	};

	syno_id_bit0_pin: syno-id-bit0-pin {
		marvell,pins = "mpp55";
		marvell,function = "gpio";
	};

	syno_id_bit1_pin: syno-id-bit1-pin {
		marvell,pins = "mpp56";
		marvell,function = "gpio";
	};

	syno_id_bit2_pin: syno-id-bit2-pin {
		marvell,pins = "mpp57";
		marvell,function = "gpio";
	};

	syno_id_bit3_pin: syno-id-bit3-pin {
		marvell,pins = "mpp58";
		marvell,function = "gpio";
	};

	fan_ctrl_low_pin: fan-ctrl-low-pin {
		marvell,pins = "mpp65";
		marvell,function = "gpio";
	};

	fan_ctrl_mid_pin: fan-ctrl-mid-pin {
		marvell,pins = "mpp64";
		marvell,function = "gpio";
	};

	fan_ctrl_high_pin: fan-ctrl-high-pin {
		marvell,pins = "mpp63";
		marvell,function = "gpio";
	};

	fan_alarm_pin: fan-alarm-pin {
		marvell,pins = "mpp38";
		marvell,function = "gpio";
	};
};

&spi0 {
	status = "okay";

	spi-flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "micron,n25q064", "jedec,spi-nor";
		reg = <0>; /* Chip select 0 */
		spi-max-frequency = <20000000>;

		/*
		 * Warning!
		 *
		 * Synology u-boot uses its compiled-in environment
		 * and it seems Synology did not care to change u-boot
		 * default configuration in order to allow saving a
		 * modified environment at a sensible location. So,
		 * if you do a 'saveenv' under u-boot, your modified
		 * environment will be saved at 1MB after the start
		 * of the flash, i.e. in the middle of the uImage.
		 * For that reason, it is strongly advised not to
		 * change the default environment, unless you know
		 * what you are doing.
		 */
		partition@00000000 { /* u-boot */
			label = "RedBoot";
			reg = <0x00000000 0x000c0000>; /* 768KB */
		};

		partition@000c0000 { /* uImage */
			label = "zImage";
			reg = <0x000c0000 0x002d0000>; /* 2880KB */
		};

		partition@00390000 { /* uInitramfs */
			label = "rd.gz";
			reg = <0x00390000 0x00440000>; /* 4250KB */
		};

		partition@007d0000 { /* MAC address and serial number */
			label = "vendor";
			reg = <0x007d0000 0x00010000>; /* 64KB */
		};

		partition@007e0000 {
			label = "RedBoot config";
			reg = <0x007e0000 0x00010000>; /* 64KB */
		};

		partition@007f0000 {
			label = "FIS directory";
			reg = <0x007f0000 0x00010000>; /* 64KB */
		};
	};
};
