/*
 * Copyright (C) 2012 Thomas Petazzoni <thomas.petazzoni@free-electrons.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 Orion USB device port init when kernel.org support is added.
 * TODO: add flash write support: see below.
 * TODO: add power-off support.
 * TODO: add I2C EEPROM support.
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include "orion5x-mv88f5182.dtsi"

/ {
	model = "LaCie Ethernet Disk mini V2";
	compatible = "lacie,ethernet-disk-mini-v2", "marvell,orion5x-88f5182", "marvell,orion5x";

	memory {
		reg = <0x00000000 0x4000000>; /* 64 MB */
	};

	chosen {
		bootargs = "console=ttyS0,115200n8 earlyprintk";
		linux,stdout-path = &uart0;
	};

	soc {
		ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000>,
			 <MBUS_ID(0x09, 0x00) 0 0xf2200000 0x800>,
			 <MBUS_ID(0x01, 0x0f) 0 0xfff80000 0x80000>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-0 = <&pmx_power_button>;
		pinctrl-names = "default";
		#address-cells = <1>;
		#size-cells = <0>;
		button@1 {
			label = "Power-on Switch";
			linux,code = <KEY_POWER>;
			gpios = <&gpio0 18 GPIO_ACTIVE_HIGH>;
		};
	};

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

		led@1 {
			label = "power:blue";
			gpios = <&gpio0 16 GPIO_ACTIVE_LOW>;
		};
	};
};

&devbus_bootcs {
	status = "okay";

	/* Read parameters */
	devbus,bus-width    = <8>;
	devbus,turn-off-ps  = <90000>;
	devbus,badr-skew-ps = <0>;
	devbus,acc-first-ps = <186000>;
	devbus,acc-next-ps  = <186000>;

	/* Write parameters */
	devbus,wr-high-ps  = <90000>;
	devbus,wr-low-ps   = <90000>;
	devbus,ale-wr-ps   = <90000>;

	/*
	 * Currently the MTD code does not recognize the MX29LV400CBCT
	 * as a bottom-type device. This could cause risks of
	 * accidentally erasing critical flash sectors. We thus define
	 * a single, write-protected partition covering the whole
	 * flash.  TODO: once the flash part TOP/BOTTOM detection
	 * issue is sorted out in the MTD code, break this into at
	 * least three partitions: 'u-boot code', 'u-boot environment'
	 * and 'whatever is left'.
	 */
	flash@0 {
		compatible = "cfi-flash";
		reg = <0 0x80000>;
		bank-width = <1>;
		#address-cells = <1>;
		#size-cells = <1>;

		partition@0 {
			label = "Full512Kb";
			reg = <0 0x80000>;
			read-only;
		};
	};
};

&ehci0 {
	status = "okay";
};

&eth {
	status = "okay";

	ethernet-port@0 {
		phy-handle = <&ethphy>;
	};
};

&i2c {
	status = "okay";
	clock-frequency = <100000>;
	#address-cells = <1>;

	rtc@32 {
		compatible = "ricoh,rs5c372a";
		reg = <0x32>;
		interrupt-parent = <&gpio0>;
		interrupts = <3 IRQ_TYPE_LEVEL_LOW>;
	};
};

&mdio {
	status = "okay";

	ethphy: ethernet-phy {
		reg = <8>;
	};
};

&pinctrl {
	pinctrl-0 = <&pmx_rtc &pmx_power_led_ctrl>;
	pinctrl-names = "default";

	pmx_power_button: pmx-power-button {
		marvell,pins = "mpp18";
		marvell,function = "gpio";
	};

	pmx_power_led: pmx-power-led {
		marvell,pins = "mpp16";
		marvell,function = "gpio";
	};

	pmx_power_led_ctrl: pmx-power-led-ctrl {
		marvell,pins = "mpp17";
		marvell,function = "gpio";
	};

	pmx_rtc: pmx-rtc {
		marvell,pins = "mpp3";
		marvell,function = "gpio";
	};
};

&sata {
	pinctrl-0 = <&pmx_sata0 &pmx_sata1>;
	pinctrl-names = "default";
	status = "okay";
	nr-ports = <2>;
};

&uart0 {
	status = "okay";
};
