// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Device Tree file for Synology DS116 NAS
 *
 * Copyright (C) 2017 Willy Tarreau <w@1wt.eu>
 */

/dts-v1/;
#include "armada-385.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	model = "Synology DS116";
	compatible = "marvell,a385-gp", "marvell,armada385", "marvell,armada380";

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

	memory {
		device_type = "memory";
		reg = <0x00000000 0x40000000>; /* 1 GB */
	};

	soc {
		ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000
			  MBUS_ID(0x01, 0x1d) 0 0xfff00000 0x100000
			  MBUS_ID(0x09, 0x19) 0 0xf1100000 0x10000
			  MBUS_ID(0x09, 0x15) 0 0xf1110000 0x10000
			  MBUS_ID(0x0c, 0x04) 0 0xf1200000 0x100000>;

		internal-regs {
			i2c@11000 {
				pinctrl-names = "default";
				pinctrl-0 = <&i2c0_pins>;
				status = "okay";
				clock-frequency = <100000>;

				eeprom@57 {
					compatible = "atmel,24c64";
					reg = <0x57>;
				};
			};

			serial@12000 {
				pinctrl-names = "default";
				pinctrl-0 = <&uart0_pins>;
				status = "okay";
			};

			serial@12100 {
				/* A PIC16F1829 is connected to uart1 at 9600 bps,
				 * and takes single-character orders :
				 *   "1" : power off // already handled by the poweroff node
				 *   "2" : short beep
				 *   "3" : long beep
				 *   "4" : turn the power LED ON
				 *   "5" : flash the power LED
				 *   "6" : turn the power LED OFF
				 *   "7" : turn the status LED OFF
				 *   "8" : turn the status LED ON
				 *   "9" : flash the status LED
				 *   "A" : flash the motherboard LED (D8)
				 *   "B" : turn the motherboard LED OFF
				 *   "C" : hard reset
				 */
				pinctrl-names = "default";
				pinctrl-0 = <&uart1_pins>;
				status = "okay";
			};

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

			ethernet@70000 {
				pinctrl-names = "default";
				phy = <&phy0>;
				phy-mode = "sgmii";
				buffer-manager = <&bm>;
				bm,pool-long = <0>;
				status = "okay";
			};

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

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

			sata@a8000 {
				pinctrl-names = "default";
				pinctrl-0 = <&sata0_pins>;
				status = "okay";
				#address-cells = <1>;
				#size-cells = <0>;

				sata0: sata-port@0 {
					reg = <0>;
					target-supply = <&reg_5v_sata0>;
				};
			};

			bm@c8000 {
				status = "okay";
			};

			usb3@f0000 {
				usb-phy = <&usb3_0_phy>;
				status = "okay";
			};

			usb3@f8000 {
				usb-phy = <&usb3_1_phy>;
				status = "okay";
			};
		};

		bm-bppi {
			status = "okay";
		};

		gpio-fan {
			compatible = "gpio-fan";
			gpios = <&gpio1 18 GPIO_ACTIVE_HIGH>,
				<&gpio1 17 GPIO_ACTIVE_HIGH>,
				<&gpio1 16 GPIO_ACTIVE_HIGH>;
			gpio-fan,speed-map = <   0 0
					      1500 1
					      2500 2
					      3000 3
					      3400 4
					      3700 5
					      3900 6
					      4000 7>;
			#cooling-cells = <2>;
		};

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

			/* The green part is on gpio0.20 which is also used by
			 * sata0, and accesses to SATA disk 0 make it blink so it
			 * doesn't need to be declared here.
			 */
			orange {
				gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
				label = "ds116:orange:disk";
				default-state = "off";
			};
		};
	};

	usb3_0_phy: usb3_0_phy {
		compatible = "usb-nop-xceiv";
		vcc-supply = <&reg_usb3_0_vbus>;
		#phy-cells = <0>;
	};

	usb3_1_phy: usb3_1_phy {
		compatible = "usb-nop-xceiv";
		vcc-supply = <&reg_usb3_1_vbus>;
		#phy-cells = <0>;
	};

	reg_usb3_0_vbus: usb3-vbus0 {
		compatible = "regulator-fixed";
		regulator-name = "usb3-vbus0";
		pinctrl-names = "default";
		pinctrl-0 = <&xhci0_vbus_pins>;
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		enable-active-high;
		gpio = <&gpio1 26 GPIO_ACTIVE_HIGH>;
	};

	reg_usb3_1_vbus: usb3-vbus1 {
		compatible = "regulator-fixed";
		regulator-name = "usb3-vbus1";
		pinctrl-names = "default";
		pinctrl-0 = <&xhci1_vbus_pins>;
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		enable-active-high;
		gpio = <&gpio1 27 GPIO_ACTIVE_HIGH>;
	};

	reg_sata0: pwr-sata0 {
		compatible = "regulator-fixed";
		regulator-name = "pwr_en_sata0";
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
		enable-active-high;
		regulator-boot-on;
		gpio = <&gpio0 15 GPIO_ACTIVE_HIGH>;
	};

	reg_5v_sata0: v5-sata0 {
		compatible = "regulator-fixed";
		regulator-name = "v5.0-sata0";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		vin-supply = <&reg_sata0>;
	};

	reg_12v_sata0: v12-sata0 {
		compatible = "regulator-fixed";
		regulator-name = "v12.0-sata0";
		regulator-min-microvolt = <12000000>;
		regulator-max-microvolt = <12000000>;
		vin-supply = <&reg_sata0>;
	};
};

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

	spi-flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "macronix,mx25l6405d", "jedec,spi-nor";
		reg = <0>; /* Chip select 0 */
		spi-max-frequency = <50000000>;
		m25p,fast-read;

		/* Note: there is a redboot partition table despite u-boot
		 * being used. The names presented here are the same as those
		 * found in the FIS directory. There is also a small device
		 * tree in the last 64kB of the RedBoot partition which is not
		 * enumerated. The MAC address and the serial number are listed
		 * in the "vendor" partition.
		 */
		partition@0 {
			label = "RedBoot";
			reg = <0x00000000 0x000f0000>;
			read-only;
		};

		partition@c0000 {
			label = "zImage";
			reg = <0x000f0000 0x002d0000>;
		};

		partition@390000 {
			label = "rd.gz";
			reg = <0x003c0000 0x00410000>;
		};

		partition@7d0000 {
			label = "vendor";
			reg = <0x007d0000 0x00010000>;
			read-only;
		};

		partition@7e0000 {
			label = "RedBoot config";
			reg = <0x007e0000 0x00010000>;
			read-only;
		};

		partition@7f0000 {
			label = "FIS directory";
			reg = <0x007f0000 0x00010000>;
			read-only;
		};
	};
};

&pinctrl {
	/* use only one pin for UART1, as mpp20 is used by sata0 */
	uart1_pins: uart-pins-1 {
		marvell,pins = "mpp19";
		marvell,function = "ua1";
	};

	xhci0_vbus_pins: xhci0_vbus_pins {
		marvell,pins = "mpp58";
		marvell,function = "gpio";
	};
	xhci1_vbus_pins: xhci1_vbus_pins {
		marvell,pins = "mpp59";
		marvell,function = "gpio";
	};
};
