// SPDX-License-Identifier: GPL-2.0-or-later OR MIT

#include "ar9344.dtsi"

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/leds/common.h>

/ {
	model = "MikroTik RouterBOARD 2011UiAS-2HnD";
	compatible = "mikrotik,routerboard-2011uias-2hnd", "qca,ar9344";

	aliases {
		led-boot = &led_user;
		led-failsafe = &led_user;
		led-running = &led_user;
		led-upgrade = &led_user;
	};

	keys {
		compatible = "gpio-keys";

		reset {
			label = "reset";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio 15 GPIO_ACTIVE_LOW>;
			debounce-interval = <60>;
		};

		poe-in {
			label = "poe-in";
			linux,input-type = <EV_SW>;
			linux,code = <BTN_1>;
			gpios = <&gpio 13 GPIO_ACTIVE_LOW>;
			debounce-interval = <60>;
		};
	};

	beeper {
		compatible = "gpio-beeper";
		gpios = <&gpio 22 GPIO_ACTIVE_HIGH>;
	};

	sfp_i2c: i2c-gpio {
		compatible = "i2c-gpio";
		#address-cells = <1>;
		#size-cells = <0>;

		pictrl-names = "default";
		pinctrl-0 = <&pmx_sfp_i2c>;

		sda-gpios = <&gpio 11 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		scl-gpios = <&gpio 21 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>;
		i2c-gpio,delay-us = <2>;
	};

	sfp {
		/*
		 * SFP port attached throug AR8327 port 6 isn't functional for now
		 * The module detects sucessfully, but lacks some GPIO definitions,
		 * and proper SGMII configuration isn't known yet.
		 */
		compatible = "sff,sfp";
		i2c-bus = <&sfp_i2c>;
		los-gpios = <&gpio 17 GPIO_ACTIVE_HIGH>;
		maximum-power-milliwatt = <1000>;
	};
};

&ref {
	clock-frequency = <25000000>;
};

&gpio {
	nand-nce {
		gpio-hog;
		gpios = <14 GPIO_ACTIVE_LOW>;
		output-high;
		line-name = "nand-nce";
	};
};

&nand {
	status = "okay";

	nand-ecc-mode = "soft";
	nand-ecc-step-size = <2048>;
	qca,nand-swap-dma;
	qca,nand-scan-fixup;

	partitions {
		compatible = "fixed-partitions";
		#address-cells = <1>;
		#size-cells = <1>;

		partition@0 {
			label = "booter";
			reg = <0x0000000 0x0040000>;
			read-only;
		};

		partition@40000 {
			label = "kernel";
			reg = <0x0040000 0x03c0000>;
		};

		partition@400000 {
			label = "ubi";
			reg = <0x0400000 0x0>;
		};
	};
};

&pinmux {
	pmx_sfp_i2c: pinmux_sfp_i2c {
		pinctrl-single,bits = <0x8 0x00000000 0xff000000>; /* set GPIO11 back as GPIO */
	};
};

&spi {
	status = "okay";

	flash@0 {
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <25000000>;

		partitions {
			compatible = "mikrotik,routerboot-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			partition@0 {
				label = "routerboot";
				reg = <0x0 0x0>;
				read-only;
			};

			hard_config {
				read-only;

				nvmem-layout {
					compatible = "fixed-layout";
					#address-cells = <1>;
					#size-cells = <1>;

					macaddr_hardconfig_10: macaddr@10 {
						compatible = "mac-base";
						reg = <0x10 0x6>;
						#nvmem-cell-cells = <1>;
					};
				};
			};

			bios {
				size = <0x1000>;
				read-only;
			};

			soft_config {
			};
		};
	};
};

&mdio0 {
	status = "okay";
	switch@1f {
		compatible = "qca,ar8327";
		reg = <0x1f>;

		qca,ar8327-initvals = <
			0x04 0x07c00000 /* PORT0 PAD MODE CTRL: Mac0_rgmii_en | Mac0_rgmii_txclk_delay_en | Mac0_rgmii_rxclk_delay_en | Mac0_rgmii_txclk_delay_sel3 | Mac0_rgmii_rxclk_delay_sel0 */
			0x0c 0x00000080 /* PORT6 PAD MODE CTRL: Mac6_sgmii_en */
			0x10 0x81000000 /* PWS_REG: POWER_ON_STRAP | LED_OPEN_EN_CSR */
			0x50 0xc731c731 /* LED_CTRL0 */
			0x54 0x00000000 /* LED_CTRL1 */
			0x5c 0x0230c300 /* LED_CTRL3: 5C: enable SFP power */
			0x7c 0x0000007e /* PORT0_STATUS: DUPLEX_MODE_0 | RX_FLOW_EN_0 | TX_FLOW_EN_0 | RXMAC_EN_0 | TXMAC_EN_0 | SPEED_0 1000M */
			0x94 0x0000007e /* PORT6_STATUS: DUPLEX_MODE_0 | RX_FLOW_EN_0 | TX_FLOW_EN_0 | RXMAC_EN_0 | TXMAC_EN_0 | SPEED_0 1000M */
			0xe0 0xc701e7d0 /* SGMII_CTRL */
			>;

		leds {
			led@0 {
				reg = <0>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <1>;
				qca,led-mode = <0>;
			};

			led@1 {
				reg = <1>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <6>;
				qca,led-mode = <1>;
			};

			lcd_backlight: led@2 {
				reg = <2>;
				color = <LED_COLOR_ID_WHITE>;
				function = LED_FUNCTION_BACKLIGHT;
				linux,default-trigger = "backlight";
				active-low;
				qca,led-mode = <1>;
			};

			led@3 {
				reg = <3>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <2>;
				qca,led-mode = <0>;
			};

			led@4 {
				reg = <4>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <7>;
				qca,led-mode = <1>;
			};

			led@6 {
				reg = <6>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <3>;
				qca,led-mode = <0>;
			};

			led@7 {
				reg = <7>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <8>;
				qca,led-mode = <1>;
			};

			led@9 {
				reg = <9>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <4>;
				qca,led-mode = <0>;
			};

			led@10 {
				reg = <10>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <9>;
				qca,led-mode = <1>;
			};

			led@12 {
				reg = <12>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <5>;
				qca,led-mode = <0>;
			};

			led@13 {
				reg = <13>;
				color = <LED_COLOR_ID_GREEN>;
				function = "eth";
				function-enumerator = <10>;
				qca,led-mode = <1>;
			};

			led_user: led@14 {
				reg = <14>;
				color = <LED_COLOR_ID_GREEN>;
				function = "user";
				qca,led-mode = <1>;
			};
		};
	};
};

&eth0 {
	status = "okay";

	/* default for ar934x, except for 1000M */
	pll-data = <0x6f000000 0x00000101 0x00001616>;

	phy-mode = "rgmii";

	nvmem-cells = <&macaddr_hardconfig_10 0>;
	nvmem-cell-names = "mac-address";

	fixed-link {
		speed = <1000>;
		full-duplex;
	};

	gmac-config {
		device = <&gmac>;
		rgmii-gmac0 = <1>;
		switch-phy-swap = <0>;
		switch-only-mode = <1>;
		rxd-delay = <1>;
		rxdv-delay = <1>;
	};
};

&builtin_switch {
	/delete-property/ qca,phy4-mii-enable;
};

&eth1 {
	status = "okay";

	nvmem-cells = <&macaddr_hardconfig_10 5>;
	nvmem-cell-names = "mac-address";
};

&usb {
	status = "okay";
};

&usb_phy {
	status = "okay";
};

&wmac {
	status = "okay";

	qca,no-eeprom;

	led {
		led-sources = <4>;
		led-active-low;
	};
};
