/*
 * Copyright (C) 2016 Rafał Miłecki <rafal@milecki.pl>
 *
 * Licensed under the ISC license.
 */

/dts-v1/;

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

/ {
	compatible = "netgear,r8500", "brcm,bcm47094", "brcm,bcm4708";
	model = "Netgear R8500";

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

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

	leds {
		compatible = "gpio-leds";

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

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

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

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

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

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

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

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

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

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

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

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