// SPDX-License-Identifier: GPL-2.0
/*
 * Device tree file for the Zyxel NSA 310S NAS box.
 *
 * Copyright (c) 2015-2021, Tony Dinh <mibodhi@gmail.com>
 *
 * Based on
 * Copyright (c) 2014, Adam Baker <linux@baker-net.org.uk>
 * Based upon the board setup file created by Peter Schildmann
 */
/dts-v1/;

#include "kirkwood.dtsi"
#include "kirkwood-6281.dtsi"

/ {
	model = "Zyxel NSA310S";
	compatible = "zyxel,nsa320s", "marvell,kirkwood-88f6702", "marvell,kirkwood";

	memory {
		device_type = "memory";
		reg = <0x00000000 0x10000000>;
	};

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

	ocp@f1000000 {
		pinctrl: pin-controller@10000 {
			pinctrl-names = "default";

			pmx_sata0: pmx-sata0 {
				marvell,pins ;
				marvell,function = "sata0";
			};

			pmx_sata1: pmx-sata1 {
				marvell,pins ;
				marvell,function = "sata1";
			};

			pmx_usb_power: pmx-usb-power {
				marvell,pins = "mpp21";
				marvell,function = "gpio";
			};

			pmx_pwr_off: pmx-pwr-off {
				marvell,pins = "mpp27";
				marvell,function = "gpio";
			};

			pmx_btn_reset: pmx-btn-reset {
				marvell,pins = "mpp24";
				marvell,function = "gpio";
			};

			pmx_btn_copy: pmx-btn-copy {
				marvell,pins = "mpp25";
				marvell,function = "gpio";
			};

			pmx_btn_power: pmx-btn-power {
				marvell,pins = "mpp26";
				marvell,function = "gpio";
			};

			pmx_led_hdd2_green: pmx-led-hdd2-green {
				marvell,pins = "mpp34";
				marvell,function = "gpio";
			};

			pmx_led_hdd2_red: pmx-led-hdd2-red {
				marvell,pins = "mpp12";
				marvell,function = "gpio";
			};

			pmx_led_usb_green: pmx-led-usb-green {
				marvell,pins = "mpp15";
				marvell,function = "gpio";
			};

			pmx_led_copy_green: pmx-led-copy-green {
				marvell,pins = "mpp22";
				marvell,function = "gpio";
			};

			pmx_led_copy_red: pmx-led-copy-red {
				marvell,pins = "mpp23";
				marvell,function = "gpio";
			};

			pmx_led_sys_green: pmx-led-sys-green {
				marvell,pins = "mpp28";
				marvell,function = "gpio";
			};

			pmx_led_sys_orange: pmx-led-sys-orange {
				marvell,pins = "mpp29";
				marvell,function = "gpio";
			};

			pmx_led_hdd1_green: pmx-led-hdd1-green {
				marvell,pins = "mpp16";
				marvell,function = "gpio";
			};

			pmx_led_hdd1_red: pmx-led-hdd1-red {
				marvell,pins = "mpp13";
				marvell,function = "gpio";
			};

			pmx_pwr_sata1: pmx-pwr-sata1 {
				marvell,pins = "mpp33";
				marvell,function = "gpio";
			};
		};

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

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

		rtc@10300 {
			status = "disabled";
		};

		i2c@11000 {
			status = "okay";
			ht1382: rtc@68 {
				compatible = "htk,ht1382";
				reg = <0x68>;
			};
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-names = "default";
		pinctrl-0 = <&pmx_usb_power &pmx_pwr_sata1>;

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

		sata1_power: regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "SATA1 Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-always-on;
			regulator-boot-on;
			enable-active-high;
			gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
		};
	};

	gpio_poweroff {
		compatible = "gpio-poweroff";
		pinctrl-0 = <&pmx_pwr_off>;
		pinctrl-names = "default";
		gpios = <&gpio0 27 GPIO_ACTIVE_HIGH>;
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-0 = <&pmx_btn_reset &pmx_btn_copy &pmx_btn_power>;
		pinctrl-names = "default";

		button@1 {
			label = "Power Button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio0 26 GPIO_ACTIVE_HIGH>;
		};
		button@2 {
			label = "Copy Button";
			linux,code = <KEY_COPY>;
			gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
		};
		button@3 {
			label = "Reset Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio0 24 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-leds {
		compatible = "gpio-leds";
		pinctrl-0 = <&pmx_led_hdd2_green &pmx_led_hdd2_red
			     &pmx_led_usb_green
			     &pmx_led_sys_green &pmx_led_sys_orange
			     &pmx_led_copy_green &pmx_led_copy_red
			     &pmx_led_hdd1_green &pmx_led_hdd1_red>;
		pinctrl-names = "default";

		green-sys {
			label = "nsa310s:green:sys";
			gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "default-on";
		};
		orange-sys {
			label = "nsa310s:orange:sys";
			gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
		};
		green-hdd1 {
			label = "nsa310s:green:hdd1";
			gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
		};
		red-hdd1 {
			label = "nsa310s:red:hdd1";
			gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
		};
		green-hdd2 {
			label = "nsa310s:green:hdd2";
			gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
		};
		red-hdd2 {
			label = "nsa310s:red:hdd2";
			gpios = <&gpio0 12 GPIO_ACTIVE_HIGH>;
		};
		green-usb {
			label = "nsa310s:green:usb";
			gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
		};
		green-copy {
			label = "nsa310s:green:copy";
			gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "ide-disk";
		};
		red-copy {
			label = "nsa310s:red:copy";
			gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
		};
	};
};

&nand {
	status = "okay";
	chip-delay = <35>;

	partition@0 {
		label = "uboot";
		reg = <0x0000000 0x0100000>;
	};
	partition@100000 {
		label = "stock_uboot_env";
		reg = <0x0100000 0x0080000>;
	};
	partition@180000 {
		label = "key_store";
		reg = <0x0180000 0x0080000>;
	};
	partition@200000 {
		label = "info";
		reg = <0x0200000 0x0080000>;
	};
	partition@280000 {
		label = "etc";
		reg = <0x0280000 0x0a00000>;
	};
	partition@c80000 {
		label = "kernel_1";
		reg = <0x0c80000 0x0a00000>;
	};
	partition@1680000 {
		label = "rootfs1";
		reg = <0x1680000 0x2fc0000>;
	};
	partition@4640000 {
		label = "kernel_2";
		reg = <0x4640000 0x0a00000>;
	};
	partition@5040000 {
		label = "rootfs2";
		reg = <0x5040000 0x2fc0000>;
	};
};

&mdio {
	status = "okay";
	ethphy0: ethernet-phy@1 {
		compatible = "marvell,88e1510";
		reg = <1>;
	};
};

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

&pciec {
	status = "okay";
};

&pcie0 {
	status = "okay";
};
