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

#include "qca955x.dtsi"

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

/ {
	compatible = "meraki,mr18", "qca,qca9558";
	model = "Meraki MR18";

	aliases {
		label-mac-device = &eth0;
		led-boot = &white;
		led-failsafe = &orange;
		led-running = &green;
		led-upgrade = &white;
	};

	leds {
		compatible = "gpio-leds";

		white: white {
			function = LED_FUNCTION_POWER;
			color = <LED_COLOR_ID_WHITE>;
			gpios = <&gpio 18 GPIO_ACTIVE_LOW>;
		};

		orange: orange {
			function = LED_FUNCTION_POWER;
			color = <LED_COLOR_ID_ORANGE>;
			gpios = <&gpio 21 GPIO_ACTIVE_HIGH>;
			panic-indicator;
		};
	};

	uleds {
		compatible = "virtual-leds";
#if 0
		/*
		 * RGB leds are not supported by uleds driver.
		 * but this is what the definitions for a as
		 * of yet unwritten leds_nu801 would look like.
		 */

		rgbled-0 {
			function = LED_FUNCTION_POWER;
			color = <LED_COLOR_ID_RGB>;
			#address-cells = <1>;
			#size-cells = <0>;

			led@0 {
				reg = <0>;
				color = <LED_COLOR_ID_RED>;
			};

			green: led@1 {
				reg = <1>;
				color = <LED_COLOR_ID_GREEN>;
			};

			led@2 {
				reg = <2>;
				color = <LED_COLOR_ID_BLUE>;
			};
		};

#else
		red {
			color = <LED_COLOR_ID_RED>;
		};

		green: green {
			color = <LED_COLOR_ID_GREEN>;
		};

		blue {
			color = <LED_COLOR_ID_BLUE>;
		};
#endif
	};

	button {
		compatible = "gpio-keys";

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

	};
};

&nand {
	status = "okay";

	nand-ecc-mode = "soft";
	nand-ecc-algo = "bch";
	nand-ecc-strength = <4>;
	nand-ecc-step-size = <512>;
	nand-is-boot-medium;

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

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

		partition@80000 {
			label = "kernel";
			reg = <0x80000 0x800000>;
		};

		partition@880000 {
			label = "recovery";
			reg = <0x880000 0x800000>;
		};

		partition@1080000 {
			label = "ubi";
			reg = <0x1080000 0x6f00000>;
		};

		partition@7fe0000 {
			/*
			 * This is not always present. And if
			 * it is, then Meraki (or contractor)
			 * used a different ecc method than
			 * the one we need for the UBI partition.
			 * Reading this causes various reading
			 * errors.
			 *
			 * As a result: Please don't convert
			 * this to nvmem-cells. Instead there's
			 * a ubi-volume "caldata" that has the
			 * necessary data.
			 */

			label = "odm-caldata";
			reg = <0x7fe0000 0x20000>;
			read-only;
		};
	};
};

&pcie0 {
	status = "okay";

	wifi@0,0 {
		compatible = "pci168c,0033";
		reg = <0x0000 0 0 0 0>;
		qca,no-eeprom;
	};
};

&pcie1 {
	status = "okay";

	wifi@0,0 {
		compatible = "pci168c,0033";
		reg = <0x0000 0 0 0 0>;
		qca,no-eeprom;
	};
};

&mdio0 {
	status = "okay";

	phy: ethernet-phy@3 {
		reg = <3>;
	};
};

&eth0 {
	status = "okay";
	pll-data = <0xa6000000 0xa0000101 0x80001313>;
	phy-handle = <&phy>;

	gmac-config {
		device = <&gmac>;
		rgmii-enabled = <1>;
		rxd-delay = <3>;
		rxdv-delay = <3>;
	};
};

&wmac {
	status = "okay";
	qca,no-eeprom;
};
