/*
 * Broadcom BCM470X / BCM5301X ARM platform code.
 * DTS for Netgear R8000
 *
 * Copyright (C) 2015 Rafał Miłecki <zajec5@gmail.com>
 *
 * Permission to use, copy, modify, and/or distribute this software for any
 * purpose with or without fee is hereby granted, provided that the above
 * copyright notice and this permission notice appear in all copies.
 *
 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES WITH
 * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, DIRECT,
 * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
 * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
 * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
 * PERFORMANCE OF THIS SOFTWARE.
 */

/dts-v1/;

#include "bcm4709.dtsi"
#include "bcm5301x-nand-cs0-bch8.dtsi"

/ {
	compatible = "netgear,r8000", "brcm,bcm4709", "brcm,bcm4708";
	model = "Netgear R8000 (BCM4709)";

	chosen {
		bootargs = "console=ttyS0,115200";
	};

	memory {
		device_type = "memory";
		reg = <0x00000000 0x08000000
		       0x88000000 0x08000000>;
	};

	leds {
		compatible = "gpio-leds";

		power-white {
			label = "bcm53xx:white:power";
			gpios = <&chipcommon 2 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "default-on";
		};

		power-amber {
			label = "bcm53xx:amber:power";
			gpios = <&chipcommon 3 GPIO_ACTIVE_LOW>;
		};

		wan-white {
			label = "bcm53xx:white:wan";
			gpios = <&chipcommon 8 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "default-on";
		};

		wan-amber {
			label = "bcm53xx:amber:wan";
			gpios = <&chipcommon 9 GPIO_ACTIVE_HIGH>;
		};

		5ghz-1 {
			label = "bcm53xx:white:5ghz-1";
			gpios = <&chipcommon 12 GPIO_ACTIVE_LOW>;
		};

		2ghz {
			label = "bcm53xx:white:2ghz";
			gpios = <&chipcommon 13 GPIO_ACTIVE_LOW>;
		};

		wireless {
			label = "bcm53xx:white:wireless";
			gpios = <&chipcommon 14 GPIO_ACTIVE_HIGH>;
		};

		wps {
			label = "bcm53xx:white:wps";
			gpios = <&chipcommon 15 GPIO_ACTIVE_HIGH>;
		};

		5ghz-2 {
			label = "bcm53xx:white:5ghz-2";
			gpios = <&chipcommon 16 GPIO_ACTIVE_LOW>;
		};

		usb3 {
			label = "bcm53xx:white:usb3";
			gpios = <&chipcommon 17 GPIO_ACTIVE_LOW>;
		};

		usb2 {
			label = "bcm53xx:white:usb2";
			gpios = <&chipcommon 18 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;

		rfkill {
			label = "WiFi";
			linux,code = <KEY_RFKILL>;
			gpios = <&chipcommon 4 GPIO_ACTIVE_LOW>;
		};

		wps {
			label = "WPS";
			linux,code = <KEY_WPS_BUTTON>;
			gpios = <&chipcommon 5 GPIO_ACTIVE_LOW>;
		};

		restart {
			label = "Reset";
			linux,code = <KEY_RESTART>;
			gpios = <&chipcommon 6 GPIO_ACTIVE_LOW>;
		};

		brightness {
			label = "Backlight";
			linux,code = <KEY_BRIGHTNESS_ZERO>;
			gpios = <&chipcommon 19 GPIO_ACTIVE_LOW>;
		};
	};
};

&pcie0 {
	#address-cells = <3>;
	#size-cells = <2>;

	bridge@0,0,0 {
		reg = <0x0000 0 0 0 0>;

		#address-cells = <3>;
		#size-cells = <2>;

		wifi@0,1,0 {
			reg = <0x0000 0 0 0 0>;
			ieee80211-freq-limit = <5735000 5835000>;
		};
	};
};

&pcie1 {
	#address-cells = <3>;
	#size-cells = <2>;

	bridge@1,0,0 {
		reg = <0x0000 0 0 0 0>;

		#address-cells = <3>;
		#size-cells = <2>;

		bridge@1,1,0 {
			reg = <0x0000 0 0 0 0>;

			#address-cells = <3>;
			#size-cells = <2>;

			bridge@1,2,2 {
				reg = <0x1000 0 0 0 0>;

				#address-cells = <3>;
				#size-cells = <2>;

				wifi@1,4,0 {
					reg = <0x0000 0 0 0 0>;
					ieee80211-freq-limit = <5170000 5730000>;
				};
			};
		};
	};
};

&usb2 {
	vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
};

&usb3 {
	vcc-gpio = <&chipcommon 0 GPIO_ACTIVE_HIGH>;
};

&usb3_phy {
	status = "okay";
};
