// SPDX-License-Identifier: (GPL-2.0+ OR MIT)
/*
 * ZyXEL NSA310S Board Description
 * Copyright 2020-2022 Pawel Dembicki <paweldembicki@gmail.com>
 * Copyright (c) 2015-2021, Tony Dinh <mibodhi@gmail.com>
 * 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"
#include <dt-bindings/leds/common.h>

/ {
	model = "ZyXEL NSA310S";
	compatible = "zyxel,nsa310s", "marvell,kirkwood-88f6702", "marvell,kirkwood";

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

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

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

	keys {
		compatible = "gpio-keys";
		pinctrl-0 = <&pmx_buttons>;
		pinctrl-names = "default";

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

		button-copy {
			label = "Copy Button";
			linux,code = <KEY_COPY>;
			gpios = <&gpio0 25 GPIO_ACTIVE_LOW>;
		};

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

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

		led-1 {
			function = LED_FUNCTION_DISK_ERR;
			color = <LED_COLOR_ID_RED>;
			gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
		};

		led-2 {
			function = LED_FUNCTION_USB;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&gpio0 15 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "usb-host";
		};

		led-3 {
			function = LED_FUNCTION_DISK;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&gpio0 16 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "ata1";
		};

		led-4 {
			function = LED_FUNCTION_INDICATOR;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>;
		};

		led-5 {
			function = LED_FUNCTION_INDICATOR;
			color = <LED_COLOR_ID_RED>;
			gpios = <&gpio0 23 GPIO_ACTIVE_HIGH>;
		};

		led-6 {
			function = LED_FUNCTION_STATUS;
			color = <LED_COLOR_ID_GREEN>;
			gpios = <&gpio0 28 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "default-on";
		};

		led-7 {
			function = LED_FUNCTION_STATUS;
			color = <LED_COLOR_ID_RED>;
			gpios = <&gpio0 29 GPIO_ACTIVE_HIGH>;
		};
	};

	usb0_power: regulator@1 {
		compatible = "regulator-fixed";
		regulator-name = "USB Power";

		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		regulator-boot-on;
		gpio = <&gpio0 21 GPIO_ACTIVE_HIGH>;
	};

	sata1_power: regulator@2 {
		compatible = "regulator-fixed";
		regulator-name = "SATA1 Power";

		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		regulator-boot-on;
		gpio = <&gpio1 1 GPIO_ACTIVE_HIGH>;
	};

	thermal-zones {
		disk-thermal {
			polling-delay = <20000>;
			polling-delay-passive = <2000>;

			thermal-sensors = <&hdd_temp>;

			trips {
				disk_alert: disk-alert {
					temperature = <40000>;
					hysteresis = <5000>;
					type = "active";
				};
				disk_crit: disk-crit {
					temperature = <60000>;
					hysteresis = <2000>;
					type = "critical";
				};
			};
		};
	};
};


&eth0 {
	status = "okay";

	ethernet0-port@0 {
		phy-handle = <&ethphy0>;
	};
};

&i2c0 {
	status = "okay";

	rtc@68 {
		compatible = "htk,ht1382";
		reg = <0x68>;
	};
};

&mdio {
	status = "okay";

	ethphy0: ethernet-phy@1 {
		reg = <1>;
		phy-mode = "rgmii-id";
		marvell,reg-init = <0x1 0x16 0x0 0x3>,
				   <0x1 0x10 0x0 0x1017>,
				   <0x1 0x11 0x0 0x4408>,
				   <0x1 0x16 0x0 0x0>;
	};
};

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

	partition@0 {
		label = "uboot";
		reg = <0x0000000 0x00c0000>;
		read-only;
	};
	partition@c0000 {
		label = "uboot_env";
		reg = <0x00c0000 0x0080000>;
	};
	partition@140000 {
		label = "ubi";
		reg = <0x0140000 0x7ec0000>;
	};
};

&pciec {
	status = "okay";
};

&pcie0 {
	status = "okay";
};

&pinctrl {
	pinctrl-names = "default";

	pmx_buttons: pmx-buttons {
		marvell,pins = "mpp24", "mpp25", "mpp26";
		marvell,function = "gpio";
	};

	pmx_leds: pmx-leds {
		marvell,pins = "mpp13", "mpp15", "mpp16", "mpp22", "mpp23",
						"mpp28", "mpp29";
		marvell,function = "gpio";
	};

	pmx_power: pmx-power {
		marvell,pins = "mpp21", "mpp33";
		marvell,function = "gpio";
	};

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

&rtc {
	status = "disabled";
};

&sata {
	status = "okay";
	nr-ports = <1>;
	#address-cells = <1>;
	#size-cells = <0>;

	hdd_temp: sata-port@0 {
		reg = <0>;
		#thermal-sensor-cells = <0>;
	};
};

&uart0 {
	status = "okay";
};
