/*
 * Device Tree file for Lenovo Iomega ix4-300d
 *
 * Copyright (C) 2014, Benoit Masson <yahoo@perenite.com>
 *
 * 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 <dt-bindings/input/input.h>
#include <dt-bindings/gpio/gpio.h>
#include "armada-xp-mv78230.dtsi"

/ {
	model = "Lenovo Iomega ix4-300d";
	compatible = "lenovo,ix4-300d", "marvell,armadaxp-mv78230",
		     "marvell,armadaxp", "marvell,armada-370-xp";

	chosen {
		bootargs = "console=ttyS0,115200 earlyprintk";
		stdout-path = "/soc/internal-regs/serial@12000";
	};

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

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

		pcie-controller {
			status = "okay";

			/* Quad port sata: Marvell 88SX7042 */
			pcie@1,0 {
				/* Port 0, Lane 0 */
				status = "okay";
			};

			/* USB 3.0 xHCI controller: NEC D720200F1 */
			pcie@5,0 {
				/* Port 1, Lane 0 */
				status = "okay";
			};
		};

		internal-regs {
			pinctrl {
				poweroff_pin: poweroff-pin {
					marvell,pins = "mpp24";
					marvell,function = "gpio";
				};

				power_button_pin: power-button-pin {
					marvell,pins = "mpp44";
					marvell,function = "gpio";
				};

				reset_button_pin: reset-button-pin {
					marvell,pins = "mpp45";
					marvell,function = "gpio";
				};
				select_button_pin: select-button-pin {
					marvell,pins = "mpp41";
					marvell,function = "gpio";
				};

				scroll_button_pin: scroll-button-pin {
					marvell,pins = "mpp42";
					marvell,function = "gpio";
				};

				hdd_led_pin: hdd-led-pin {
					marvell,pins = "mpp26";
					marvell,function = "gpio";
				};
			};

			serial@12000 {
				status = "okay";
			};

			mdio {
				phy0: ethernet-phy@0 { /* Marvell 88E1318 */
					reg = <0>;
				};

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

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

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

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

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

			i2c@11000 {
				clock-frequency = <400000>;
				status = "okay";

				adt7473@2e {
					compatible = "adi,adt7473";
					reg = <0x2e>;
				};

				pcf8563@51 {
					compatible = "nxp,pcf8563";
					reg = <0x51>;
				};

			};

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

				partition@0 {
					label = "u-boot";
					reg = <0x0000000 0xe0000>;
					read-only;
				};

				partition@e0000 {
					label = "u-boot-env";
					reg = <0xe0000 0x20000>;
					read-only;
				};

				partition@100000 {
					label = "u-boot-env2";
					reg = <0x100000 0x20000>;
					read-only;
				};

				partition@120000 {
					label = "zImage";
					reg = <0x120000 0x400000>;
				};

				partition@520000 {
					label = "initrd";
					reg = <0x520000 0x400000>;
				};

				partition@xE00000 {
					label = "boot";
					reg = <0xE00000 0x3F200000>;
				};

				partition@flash {
					label = "flash";
					reg = <0x0 0x40000000>;
				};
			};
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-0 = <&power_button_pin &reset_button_pin
			&select_button_pin &scroll_button_pin>;
		pinctrl-names = "default";

		power-button {
			label = "Power Button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
		};

		reset-button {
			label = "Reset Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
		};

		select-button {
			label = "Select Button";
			linux,code = <BTN_SELECT>;
			gpios = <&gpio1 9 GPIO_ACTIVE_LOW>;
		};

		scroll-button {
			label = "Scroll Button";
			linux,code = <KEY_SCROLLDOWN>;
			gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;
		};
	};

	spi3 {
		compatible = "spi-gpio";
		status = "okay";
		gpio-sck = <&gpio0 25 GPIO_ACTIVE_LOW>;
		gpio-mosi = <&gpio1 15 GPIO_ACTIVE_LOW>; /*gpio 47*/
		cs-gpios = <&gpio0 27 GPIO_ACTIVE_LOW>;
		num-chipselects = <1>;
		#address-cells = <1>;
		#size-cells = <0>;

		gpio_spi: gpio_spi@0 {
			compatible = "fairchild,74hc595";
			gpio-controller;
			#gpio-cells = <2>;
			reg = <0>;
			registers-number = <2>;
			spi-max-frequency = <100000>;
		};
	};

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

		hdd-led {
			label = "ix4-300d:hdd:blue";
			gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		power-led {
			label = "ix4-300d:power:white";
			gpios = <&gpio_spi 1 GPIO_ACTIVE_LOW>;
			/* init blinking while booting */
			linux,default-trigger = "timer";
			default-state = "on";
		};

		sysfail-led {
			label = "ix4-300d:sysfail:red";
			gpios = <&gpio_spi 2 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		sys-led {
			label = "ix4-300d:sys:blue";
			gpios = <&gpio_spi 3 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		hddfail-led {
			label = "ix4-300d:hddfail:red";
			gpios = <&gpio_spi 4 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

	};

	/*
	 * Warning: you need both eth1 & 0 PHY initialized (i.e having
	 * them up does the tweak) for poweroff to shutdown otherwise it
	 * reboots
	 */
	gpio-poweroff {
		compatible = "gpio-poweroff";
		pinctrl-0 = <&poweroff_pin>;
		pinctrl-names = "default";
		gpios = <&gpio0 24 GPIO_ACTIVE_HIGH>;
	};
};
