/*
 * 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";

	soc {
		internal-regs{
			i2c@11000 {

				pca9635@68 {
				#address-cells = <1>;
				#size-cells = <0>;

					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";
		};
	};
};
