/*
 * Device Tree file for the Linksys WRT1900ACv2 (Cobra)
 *
 * Copyright (C) 2015 Imre Kaloz <kaloz@openwrt.org>
 *
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file is licensed under the terms of the GNU General Public
 *     License version 2.  This program is licensed "as is" without
 *     any warranty of any kind, whether express or implied.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

/dts-v1/;
#include "armada-385-linksys.dtsi"

/ {
	model = "Linksys WRT1900ACv2";
	compatible = "linksys,cobra", "linksys,armada385", "marvell,armada385",
		     "marvell,armada380";
};

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

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

	wlan_2g@2 {
		label = "cobra:white:wlan_2g";
		reg = <0x2>;
	};

	wlan_5g@3 {
		label = "cobra:white:wlan_5g";
		reg = <0x3>;
	};

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

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

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

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

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

&gpio_leds {
	power {
		label = "cobra:white:power";
	};

	sata {
		label = "cobra:white:sata";
	};
};

&nand {
	/* 128MiB */

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

	partition@100000 {
		label = "u_env";
		reg = <0x200000 0x40000>;    /* 256KiB */
	};

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

	partition@900000 {
		label = "devinfo";
		reg = <0x900000 0x100000>;   /* 1MiB */
		read-only;
	};

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

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

	/* kernel2 overlaps with rootfs2 by design */
	partition@3200000 {
		label = "kernel2";
		reg = <0x3200000 0x2800000>; /* 40MiB */
	};

	partition@3800000 {
		label = "rootfs2";
		reg = <0x3800000 0x2200000>; /* 34MiB */
	};

	/*
	 * 38MiB, last MiB is for the BBT, not writable
	 */
	partition@5a00000 {
		label = "syscfg";
		reg = <0x5a00000 0x2600000>;
	};

	/*
	 * 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 = <0x280000 0x680000>;   /* 6.5MiB */
	};
};
