/*
 * Broadcom BCM470X / BCM5301X ARM platform code.
 * DTS for Buffalo WXR-1900DHP
 *
 * Copyright (C) 2015 Felix Fietkau <nbd@openwrt.org>
 *
 * Licensed under the GNU/GPL. See COPYING for details.
 */

/dts-v1/;

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

/ {
	compatible = "buffalo,wxr-1900dhp", "brcm,bcm4709", "brcm,bcm4708";
	model = "Buffalo WXR-1900DHP";

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

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

	leds {
		compatible = "gpio-leds";

		usb {
			label = "bcm53xx:green:usb";
			gpios = <&chipcommon 4 GPIO_ACTIVE_HIGH>;
		};

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

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

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

		router-white {
			label = "bcm53xx:white:router";
			gpios = <&chipcommon 8 GPIO_ACTIVE_HIGH>;
		};

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

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

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

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

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

		power {
			label = "Power";
			linux,code = <KEY_POWER>;
			gpios = <&chipcommon 1 GPIO_ACTIVE_LOW>;
		};

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

		aoss {
			label = "AOSS";
			linux,code = <KEY_WPS_BUTTON>;
			gpios = <&chipcommon 16 GPIO_ACTIVE_LOW>;
		};

		/* Commit mode set by switch? */
		mode {
			label = "Mode";
			linux,code = <KEY_SETUP>;
			gpios = <&chipcommon 17 GPIO_ACTIVE_LOW>;
		};

		/* Switch: AP mode */
		sw_ap {
			label = "AP";
			linux,code = <BTN_0>;
			gpios = <&chipcommon 18 GPIO_ACTIVE_LOW>;
		};

		eject {
			label = "USB eject";
			linux,code = <KEY_EJECTCD>;
			gpios = <&chipcommon 20 GPIO_ACTIVE_LOW>;
		};
	};
};


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

&spi_nor {
	status = "okay";
};
