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

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

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

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

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

&srab {
	status = "okay";

	ports {
		port@0 {
			reg = <0>;
			label = "lan1";
		};

		port@1 {
			reg = <1>;
			label = "lan2";
		};

		port@2 {
			reg = <2>;
			label = "lan3";
		};

		port@3 {
			reg = <3>;
			label = "lan4";
		};

		port@4 {
			reg = <4>;
			label = "wan";
		};

		port@8 {
			reg = <8>;
			label = "cpu";
			ethernet = <&gmac2>;

			fixed-link {
				speed = <1000>;
				full-duplex;
			};
		};
	};
};
