/*
 * Broadcom BCM470X / BCM5301X arm platform code.
 * DTS for Netgear R6250 V1
 *
 * Copyright 2013 Hauke Mehrtens <hauke@hauke-m.de>
 *
 * Licensed under the GNU/GPL. See COPYING for details.
 */

/dts-v1/;

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

/ {
	compatible = "netgear,r6250v1", "brcm,bcm4708";
	model = "Netgear R6250 V1 (BCM4708)";

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

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

	leds {
		compatible = "gpio-leds";

		logo {
			label = "bcm53xx:white:logo";
			gpios = <&chipcommon 1 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "default-on";
		};

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

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

		usb {
			label = "bcm53xx:blue:usb";
			gpios = <&chipcommon 8 GPIO_ACTIVE_LOW>;
			trigger-sources = <&ohci_port1>, <&ehci_port1>,
					  <&xhci_port1>;
			linux,default-trigger = "usbport";
		};

		wireless {
			label = "bcm53xx:blue:wireless";
			gpios = <&chipcommon 11 GPIO_ACTIVE_LOW>;
		};
	};

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

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

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

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

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

&spi_nor {
	status = "okay";
};
