// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree common file for the Seagate Personal Cloud NAS 1 and 2-Bay
 * (Armada 370 SoC).
 *
 * Copyright (C) 2015 Seagate
 *
 * Author: Simon Guinot <simon.guinot@sequanux.org>
 */

/*
 * TODO: add support for the white SATA LED.
 */

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

/ {
	chosen {
		stdout-path = "serial0:115200n8";
	};

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

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

		internal-regs {
			coherency-fabric@20200 {
				broken-idle;
			};

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

			ethernet@74000 {
				status = "okay";
				pinctrl-0 = <&ge1_rgmii_pins>;
				pinctrl-names = "default";
				phy = <&phy0>;
				phy-mode = "rgmii-id";
			};

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

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			regulator-name = "USB Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio1 27 GPIO_ACTIVE_LOW>;
		};
		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>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		button-power {
			label = "Power button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio1 19 GPIO_ACTIVE_HIGH>;
			debounce-interval = <100>;
		};
		button-reset {
			label = "Reset Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio1 23 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
		button-usb {
			label = "USB VBUS error";
			linux,code = <KEY_UNKNOWN>;
			gpios = <&gpio1 21 GPIO_ACTIVE_LOW>;
			debounce-interval = <100>;
		};
	};

	gpio-leds {
		compatible = "gpio-leds";

		led-red-sata0 {
			label = "cumulus:red:sata0";
			gpios = <&gpio1 26 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};
	};

	gpio_poweroff {
		compatible = "gpio-poweroff";
		gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>;
	};
};

&pciec {
	status = "okay";

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

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

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

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

	sata_led_pin: sata-led-pin {
		marvell,pins = "mpp60";
		marvell,function = "sata0";
	};
	gpio_led_pin: gpio-led-pin {
		marvell,pins = "mpp60";
		marvell,function = "gpio";
	};
};

&spi0 {
	status = "okay";
	pinctrl-0 = <&spi0_pins2>;
	pinctrl-names = "default";

	flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		/* MX25L8006E */
		compatible = "mxicy,mx25l8005", "jedec,spi-nor";
		reg = <0>; /* Chip select 0 */
		spi-max-frequency = <50000000>;

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