// SPDX-License-Identifier: GPL-2.0
/*
 * Device Tree file for D-Link DNS-313 1-Bay Network Storage Enclosure
 */

/dts-v1/;

#include "gemini.dtsi"
#include <dt-bindings/input/input.h>
#include <dt-bindings/thermal/thermal.h>

/ {
	model = "D-Link DNS-313 1-Bay Network Storage Enclosure";
	compatible = "dlink,dns-313", "cortina,gemini";
	#address-cells = <1>;
	#size-cells = <1>;

	memory@0 {
		/* 64 MB SDRAM in a Nanya NT5DS32M16BS-6K package */
		device_type = "memory";
		reg = <0x00000000 0x4000000>;
	};

	aliases {
		mdio-gpio0 = &mdio0;
	};

	chosen {
		bootargs = "console=ttyS0,19200n8 root=/dev/sda4 rw rootwait";
		stdout-path = "uart0:19200n8";
	};

	gpio_keys {
		compatible = "gpio-keys";

		button-esc {
			debounce-interval = <50>;
			wakeup-source;
			linux,code = <KEY_ESC>;
			label = "reset";
			gpios = <&gpio1 31 GPIO_ACTIVE_LOW>;
		};
	};

	leds {
		compatible = "gpio-leds";
		led-power {
			label = "dns313:blue:power";
			gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
			default-state = "on";
			linux,default-trigger = "heartbeat";
		};
		led-disk-blue {
			label = "dns313:blue:disk";
			gpios = <&gpio0 2 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};
		led-disk-green {
			label = "dns313:green:disk";
			gpios = <&gpio0 3 GPIO_ACTIVE_HIGH>;
			default-state = "off";
			linux,default-trigger = "disk-read";
		};
		led-disk-red {
			label = "dns313:red:disk";
			gpios = <&gpio0 4 GPIO_ACTIVE_HIGH>;
			default-state = "off";
			linux,default-trigger = "disk-write";
		};
	};

	/*
	 * This is a ADDA AD0405GB-G73 fan @3000 and 6000 RPM.
	 */
	fan0: gpio-fan {
		compatible = "gpio-fan";
		gpios = <&gpio0 11 GPIO_ACTIVE_HIGH>,
			<&gpio0 12 GPIO_ACTIVE_HIGH>;
		gpio-fan,speed-map = <0 0>, <3000 1>, <6000 2>;
		#cooling-cells = <2>;
	};


	/* Global Mixed-Mode Technology G751 mounted on GPIO I2C */
	gpio-i2c {
		compatible = "i2c-gpio";
		sda-gpios = <&gpio0 15 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		scl-gpios = <&gpio0 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
		#address-cells = <1>;
		#size-cells = <0>;

		g751: temperature-sensor@48 {
			compatible = "gmt,g751";
			reg = <0x48>;
			#thermal-sensor-cells = <0>;
		};
	};

	thermal-zones {
		chassis-thermal {
			/* Poll every 20 seconds */
			polling-delay = <20000>;
			/* Poll every 2nd second when cooling */
			polling-delay-passive = <2000>;

			thermal-sensors = <&g751>;

			/* Tripping points from the fan.script in the rootfs */
			trips {
				chassis_alert0: chassis-alert0 {
					/* At 43 degrees turn on low speed */
					temperature = <43000>;
					hysteresis = <3000>;
					type = "active";
				};
				chassis_alert1: chassis-alert1 {
					/* At 47 degrees turn on high speed */
					temperature = <47000>;
					hysteresis = <3000>;
					type = "active";
				};
				chassis_crit: chassis-crit {
					/* Just shut down at 60 degrees */
					temperature = <60000>;
					hysteresis = <2000>;
					type = "critical";
				};
			};

			cooling-maps {
				map0 {
					trip = <&chassis_alert0>;
					cooling-device = <&fan0 1 1>;
				};
				map1 {
					trip = <&chassis_alert1>;
					cooling-device = <&fan0 2 2>;
				};
			};
		};
	};

	mdio0: mdio {
		compatible = "virtual,mdio-gpio";
		/* Uses MDC and MDIO */
		gpios = <&gpio0 22 GPIO_ACTIVE_HIGH>, /* MDC */
			<&gpio0 21 GPIO_ACTIVE_HIGH>; /* MDIO */
		#address-cells = <1>;
		#size-cells = <0>;

		/* This is a Realtek RTL8211B Gigabit ethernet transceiver */
		phy0: ethernet-phy@1 {
			reg = <1>;
			device_type = "ethernet-phy";
		};
	};

	soc {
		flash@30000000 {
			/*
			 * This is a Eon EN29LV400AB 512 KiB flash with
			 * three partitions.
			 */
			compatible = "cortina,gemini-flash", "jedec-flash";
			status = "okay";
			reg = <0x30000000 0x00080000>;

			/*
			 * This "RedBoot" is the Storlink derivative.
			 */
			partition@0 {
				label = "RedBoot";
				reg = <0x00000000 0x00040000>;
				read-only;
			};
			partition@40000 {
				label = "MTD1";
				reg = <0x00040000 0x00020000>;
				read-only;
			};
			partition@60000 {
				label = "MTD2";
				reg = <0x00060000 0x00020000>;
				read-only;
			};
		};

		syscon: syscon@40000000 {
			pinctrl {
				/*
				 */
				gpio0_default_pins: pinctrl-gpio0 {
					mux {
						function = "gpio0";
						groups =
						/* Used by LEDs conflicts ICE */
						"gpio0bgrp",
						/* Used by ? conflicts ICE */
						"gpio0cgrp",
						/*
						 * Used by fan & G751, conflicts LPC,
						 * UART modem lines, SSP
						 */
						"gpio0egrp",
						/* Used by G751 */
						"gpio0fgrp",
						/* Used by MDIO */
						"gpio0igrp";
					};
				};
				gpio1_default_pins: pinctrl-gpio1 {
					mux {
						function = "gpio1";
						/* Used by "reset" button */
						groups = "gpio1dgrp";
					};
				};
				pinctrl-gmii {
					mux {
						function = "gmii";
						groups = "gmii_gmac0_grp";
					};
					/*
					 * In the vendor Linux tree, these values are set for the C3
					 * version of the SL3512 ASIC with the comment "benson suggest"
					 */
					conf0 {
						pins = "R8 GMAC0 RXDV", "U11 GMAC1 RXDV";
						skew-delay = <0>;
					};
					conf1 {
						pins = "T8 GMAC0 RXC";
						skew-delay = <10>;
					};
					conf2 {
						pins = "T11 GMAC1 RXC";
						skew-delay = <15>;
					};
					conf3 {
						pins = "P8 GMAC0 TXEN", "V11 GMAC1 TXEN";
						skew-delay = <7>;
					};
					conf4 {
						pins = "V7 GMAC0 TXC", "P10 GMAC1 TXC";
						skew-delay = <10>;
					};
					conf5 {
						/* The data lines all have default skew */
						pins = "U8 GMAC0 RXD0", "V8 GMAC0 RXD1",
						       "P9 GMAC0 RXD2", "R9 GMAC0 RXD3",
						       "R11 GMAC1 RXD0", "P11 GMAC1 RXD1",
						       "V12 GMAC1 RXD2", "U12 GMAC1 RXD3",
						       "R10 GMAC1 TXD0", "T10 GMAC1 TXD1",
						       "U10 GMAC1 TXD2", "V10 GMAC1 TXD3";
						skew-delay = <7>;
					};
					conf6 {
						pins = "U7 GMAC0 TXD0", "T7 GMAC0 TXD1",
						       "R7 GMAC0 TXD2", "P7 GMAC0 TXD3";
						skew-delay = <5>;
					};
					/* Set up drive strength on GMAC0 to 16 mA */
					conf7 {
						groups = "gmii_gmac0_grp";
						drive-strength = <16>;
					};
				};
			};
		};

		sata: sata@46000000 {
			/* The ROM uses this muxmode */
			cortina,gemini-ata-muxmode = <0>;
			cortina,gemini-enable-sata-bridge;
			status = "okay";
		};

		gpio0: gpio@4d000000 {
			pinctrl-names = "default";
			pinctrl-0 = <&gpio0_default_pins>;
		};

		gpio1: gpio@4e000000 {
			pinctrl-names = "default";
			pinctrl-0 = <&gpio1_default_pins>;
		};

		ethernet@60000000 {
			status = "okay";

			ethernet-port@0 {
				phy-mode = "rgmii";
				phy-handle = <&phy0>;
			};
			ethernet-port@1 {
				/* Not used in this platform */
			};
		};

		ata@63000000 {
			status = "okay";
		};
	};
};
