/*
 * Device Tree file for the Linksys WRT1900ACS (Shelby)
 *
 * 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 WRT1900ACS";
	compatible = "linksys,shelby", "linksys,armada385", "marvell,armada385",
		     "marvell,armada380";
};

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

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

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

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

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

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

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

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

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

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

	sata {
		label = "shelby: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 */
	};
};
