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

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

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

	memory@0 {
		device_type = "memory";
		reg = <0x0 0x8000000>;
	};

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

		led-0 {
			gpios = <&gpio2 0 GPIO_ACTIVE_LOW>;
			color = <LED_COLOR_ID_AMBER>;
			function = LED_FUNCTION_FAULT;
		};

		led-1 {
			gpios = <&gpio2 8 GPIO_ACTIVE_LOW>;
			color = <LED_COLOR_ID_GREEN>;
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <1>;
		};

		led-2 {
			gpios = <&gpio2 9 GPIO_ACTIVE_LOW>;
			color = <LED_COLOR_ID_GREEN>;
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <2>;
		};

		led-3 {
			gpios = <&gpio2 10 GPIO_ACTIVE_LOW>;
			color = <LED_COLOR_ID_GREEN>;
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <3>;
		};

		led-4 {
			gpios = <&gpio2 11 GPIO_ACTIVE_LOW>;
			color = <LED_COLOR_ID_GREEN>;
			function = LED_FUNCTION_INDICATOR;
			function-enumerator = <4>;
		};
	};

	keys {
		compatible = "gpio-keys";

		led_mode {
			label = "led-mode";
			gpios = <&gpio2 15 GPIO_ACTIVE_LOW>;
			linux,code = <BTN_0>;
		};
	};

	gpio-restart {
		compatible = "gpio-restart";
		gpios = <&gpio2 3 GPIO_ACTIVE_HIGH>;
	};

	i2c_gpio_0: i2c-gpio-0 {
		compatible = "i2c-gpio";
		i2c-gpio,delay-us = <2>;
		#address-cells = <1>;
		#size-cells = <0>;

		gpio1: gpio@20 {
			compatible = "nxp,pca9555";
			reg = <0x20>;
			gpio-controller;
			#gpio-cells = <2>;
		};

		gpio2: gpio@75 {
			compatible = "nxp,pca9539";
			reg = <0x75>;
			gpio-controller;
			#gpio-cells = <2>;

			/*
			 * GPIO14 (IO1_6): Shift Register RESET (port LED)
			 * - Switch-M8eG  PN28080K:  3x 74HC164
			 * - Switch-M16eG PN28160K:  4x 74HC164
			 * - Switch-M24eG PN28240K:  6x 74HC164
			 * - Switch-M48eG PN28480K: 12x 74HC164
			 */
			portled_sregister_reset {
				gpio-hog;
				gpios = <14 GPIO_ACTIVE_HIGH>;
				output-high;
				line-name = "portled-sregister-reset";
			};
		};
	};

	i2c_gpio_1: i2c-gpio-1 {
		compatible = "i2c-gpio";
		i2c-gpio,delay-us = <2>;
		#address-cells = <1>;
		#size-cells = <0>;

		i2c_switch: i2c-switch@70 {
			compatible = "nxp,pca9545";
			reset-gpios = <&gpio2 13 GPIO_ACTIVE_LOW>;
			reg = <0x70>;
			#address-cells = <1>;
			#size-cells = <0>;
		};
	};
};

&spi0 {
	status = "okay";

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

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

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

			partition@80000 {
				label = "u-boot-env";
				reg = <0x80000 0x10000>;
			};

			partition@90000 {
				label = "u-boot-env2";
				reg = <0x90000 0x10000>;
			};

			partition@a0000 {
				label = "sysinfo";
				reg = <0xa0000 0x60000>;
				read-only;
			};

			/*
			 * Filesystem area in stock firmware
			 * (0x100000-0x1DFFFFF)
			 *
			 * stock firmware images are required to pass
			 * the checking by the U-Boot, also for OpenWrt
			 *
			 * in OpenWrt:
			 * - 0x100000-0xDFFFFF (13M): stock images
			 * - 0xE00000-0x1DFFFFF(16M): OpenWrt image
			 */
			partition@100000 {
				label = "fs_reserved";
				reg = <0x100000 0xd00000>;
			};

			partition@e00000 {
				compatible = "denx,uimage";
				label = "firmware";
				reg = <0xe00000 0x1000000>;
			};

			partition@1e00000 {
				label = "vlog_data";
				reg = <0x1e00000 0x100000>;
				read-only;
			};

			partition@1f00000 {
				label = "elog_data";
				reg = <0x1f00000 0x100000>;
				read-only;
			};
		};
	};
};
