// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree common file for LaCie 2Big and 5Big Network v2
 *
 * Copyright (C) 2014
 *
 * Andrew Lunn <andrew@lunn.ch>
 *
 * Based on netxbig_v2-setup.c,
 * Copyright (C) 2010 Simon Guinot <sguinot@lacie.com>
 *
*/

#include <dt-bindings/leds/leds-netxbig.h>
#include "kirkwood.dtsi"
#include "kirkwood-6281.dtsi"

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

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

		spi@10600 {
			status = "okay";

			flash@0 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "mxicy,mx25l4005a", "jedec,spi-nor";
				reg = <0>;
				spi-max-frequency = <20000000>;
				mode = <0>;

				partition@0 {
					reg = <0x0 0x80000>;
					label = "u-boot";
				};
			};
		};

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

	};

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

		/*
		 * esc and power represent a three position rocker
		 * switch. Thus the conventional KEY_POWER does not fit
		 */
		exc {
			label = "Back power switch (on|auto)";
			linux,code = <KEY_ESC>;
			linux,input-type = <5>;
			gpios = <&gpio0 13 GPIO_ACTIVE_LOW>;
		};
		power {
			label = "Back power switch (auto|off)";
			linux,code = <KEY_1>;
			linux,input-type = <5>;
			gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
		};
		option {
			label = "Function button";
			linux,code = <KEY_OPTION>;
			gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
		};

	};

	gpio-poweroff {
		compatible = "gpio-poweroff";
		gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;
	};

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

		regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "hdd0power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio0 16 GPIO_ACTIVE_HIGH>;
		};
	};

	netxbig_gpio_ext: netxbig-gpio-ext {
		compatible = "lacie,netxbig-gpio-ext";

		addr-gpios = <&gpio1 15 GPIO_ACTIVE_HIGH
			      &gpio1 16 GPIO_ACTIVE_HIGH
			      &gpio1 17 GPIO_ACTIVE_HIGH>;
		data-gpios = <&gpio1 12 GPIO_ACTIVE_HIGH
			      &gpio1 13 GPIO_ACTIVE_HIGH
			      &gpio1 14 GPIO_ACTIVE_HIGH>;
		enable-gpio = <&gpio0 29 GPIO_ACTIVE_HIGH>;
	};

	netxbig-leds {
		compatible = "lacie,netxbig-leds";

		gpio-ext = <&netxbig_gpio_ext>;

		timers = <NETXBIG_LED_TIMER1 500 500
			  NETXBIG_LED_TIMER2 500 1000>;

		blue-power {
			label = "netxbig:blue:power";
			mode-addr = <0>;
			mode-val = <NETXBIG_LED_OFF 0
				    NETXBIG_LED_ON 1
				    NETXBIG_LED_TIMER1 3
				    NETXBIG_LED_TIMER2 7>;
			bright-addr = <1>;
			max-brightness = <7>;
		};
		red-power {
			label = "netxbig:red:power";
			mode-addr = <0>;
			mode-val = <NETXBIG_LED_OFF 0
				    NETXBIG_LED_ON 2
				    NETXBIG_LED_TIMER1 4>;
			bright-addr = <1>;
			max-brightness = <7>;
		};
		blue-sata0 {
			label = "netxbig:blue:sata0";
			mode-addr = <3>;
			mode-val = <NETXBIG_LED_OFF 0
				    NETXBIG_LED_ON 7
				    NETXBIG_LED_SATA 1
				    NETXBIG_LED_TIMER1 3>;
			bright-addr = <2>;
			max-brightness = <7>;
		};
		red-sata0 {
			label = "netxbig:red:sata0";
			mode-addr = <3>;
			mode-val = <NETXBIG_LED_OFF 0
				    NETXBIG_LED_ON 2
				    NETXBIG_LED_TIMER1 4>;
			bright-addr = <2>;
			max-brightness = <7>;
		};
		blue-sata1 {
			label = "netxbig:blue:sata1";
			mode-addr = <4>;
			mode-val = <NETXBIG_LED_OFF 0
				    NETXBIG_LED_ON 7
				    NETXBIG_LED_SATA 1
				    NETXBIG_LED_TIMER1 3>;
			bright-addr = <2>;
			max-brightness = <7>;
		};
		red-sata1 {
			label = "netxbig:red:sata1";
			mode-addr = <4>;
			mode-val = <NETXBIG_LED_OFF 0
				    NETXBIG_LED_ON 2
				    NETXBIG_LED_TIMER1 4>;
			bright-addr = <2>;
			max-brightness = <7>;
		};
	};
};

&mdio {
	status = "okay";

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

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

&eth0 {
	status = "okay";
	ethernet0-port@0 {
		phy-handle = <&ethphy0>;
	};
};

&pinctrl {
	pinctrl-names = "default";

	pmx_button_function: pmx-button-function {
		marvell,pins = "mpp34";
		marvell,function = "gpio";
	};
	pmx_button_power_off: pmx-button-power-off {
		marvell,pins = "mpp15";
		marvell,function = "gpio";
	};
	pmx_button_power_on: pmx-button-power-on {
		marvell,pins = "mpp13";
		marvell,function = "gpio";
	};
};

&i2c0 {
	status = "okay";

	eeprom@50 {
		compatible = "atmel,24c04";
		pagesize = <16>;
		reg = <0x50>;
	};
};
