// SPDX-License-Identifier: (GPL-2.0 OR MIT)
/*
 * Device Tree file for the Linksys WRT3200ACM (Rango)
 *
 * Copyright (C) 2016 Imre Kaloz <kaloz@openwrt.org>
 */

/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "armada-385-linksys.dtsi"

/ {
	model = "Linksys WRT3200ACM";
	compatible = "linksys,rango", "linksys,armada385", "marvell,armada385",
		     "marvell,armada380";
};

&expander0 {
	wan_amber@0 {
		label = "rango:amber:wan";
		reg = <0x0>;
	};

	wan_white@1 {
		label = "rango:white:wan";
		reg = <0x1>;
	};

	usb2@5 {
		label = "rango:white:usb2";
		reg = <0x5>;
	};

	usb3_1@6 {
		label = "rango:white:usb3_1";
		reg = <0x6>;
	};

	usb3_2@7 {
		label = "rango:white:usb3_2";
		reg = <0x7>;
	};

	wps_white@8 {
		label = "rango:white:wps";
		reg = <0x8>;
	};

	wps_amber@9 {
		label = "rango:amber:wps";
		reg = <0x9>;
	};
};

&gpio_leds {
	power {
		gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
		label = "rango:white:power";
	};

	sata {
		gpios = <&gpio0 21 GPIO_ACTIVE_LOW>;
		label = "rango:white:sata";
	};

	wlan_2g {
		gpios = <&gpio1 13 GPIO_ACTIVE_LOW>;
		label = "rango:white:wlan_2g";
	};

	wlan_5g {
		gpios = <&gpio1 14 GPIO_ACTIVE_LOW>;
		label = "rango:white:wlan_5g";
	};
};

&gpio_leds_pins {
	marvell,pins = "mpp21", "mpp45", "mpp46", "mpp56";
};

&nand {
	/* AMD/Spansion S34ML02G2 256MiB, OEM Layout */

	partition@0 {
		label = "u-boot";
		reg = <0x0000000 0x200000>;  /* 2MiB */
		read-only;
	};

	partition@200000 {
		label = "u_env";
		reg = <0x200000 0x20000>;    /* 128KiB */
	};

	partition@220000 {
		label = "s_env";
		reg = <0x220000 0x40000>;    /* 256KiB */
	};

	partition@7e0000 {
		label = "devinfo";
		reg = <0x7e0000 0x40000>;   /* 256KiB */
		read-only;
	};

	partition@820000 {
		label = "sysdiag";
		reg = <0x820000 0x1e0000>;   /* 1920KiB */
		read-only;
	};

	/* kernel1 overlaps with rootfs1 by design */
	partition@a00000 {
		label = "kernel1";
		reg = <0xa00000 0x5000000>;  /* 80MiB */
	};

	partition@1000000 {
		label = "rootfs1";
		reg = <0x1000000 0x4a00000>;  /* 74MiB */
	};

	/* kernel2 overlaps with rootfs2 by design */
	partition@5a00000 {
		label = "kernel2";
		reg = <0x5a00000 0x5000000>; /* 80MiB */
	};

	partition@6000000 {
		label = "rootfs2";
		reg = <0x6000000 0x4a00000>; /* 74MiB */
	};

	/*
	 * 86MiB, last MiB is for the BBT, not writable
	 */
	partition@aa00000 {
		label = "syscfg";
		reg = <0xaa00000 0x5600000>;
	};

	/*
	 * Unused area between "s_env" and "devinfo".
	 * Moved here because otherwise the renumbered
	 * partitions would break the bootloader
	 * supplied bootargs
	 */
	partition@180000 {
		label = "unused_area";
		reg = <0x260000 0x5c0000>;   /* 5.75MiB */
	};
};

&sdhci {
	pinctrl-names = "default";
	pinctrl-0 = <&sdhci_pins>;
	no-1-8-v;
	non-removable;
	wp-inverted;
	bus-width = <8>;
	status = "okay";
};

&usb3_1_vbus {
	gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>;
};

&usb3_1_vbus_pins {
	marvell,pins = "mpp44";
};
