/*
 * Copyright (C) 2016 Jamie Lentin <jm@lentin.co.uk>
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2. This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include "orion5x-mv88f5181.dtsi"

/ {
	model = "Netgear WNR854-t";
	compatible = "netgear,wnr854t", "marvell,orion5x-88f5181",
		     "marvell,orion5x";
	aliases {
		serial0 = &uart0;
	};

	memory {
		reg = <0x00000000 0x2000000>; /* 32 MB */
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	soc {
		ranges = <MBUS_ID(0xf0, 0x01) 0 0xf1000000 0x100000>,
			 <MBUS_ID(0x09, 0x00) 0 0xf2200000 0x800>,
			 <MBUS_ID(0x01, 0x0f) 0 0xf4000000 0x800000>;
	};

	gpio-keys {
		compatible = "gpio-keys";
		pinctrl-0 = <&pmx_reset_button>;
		pinctrl-names = "default";

		reset {
			label = "Reset Button";
			linux,code = <KEY_RESTART>;
			gpios = <&gpio0 1 GPIO_ACTIVE_LOW>;
		};
	};

	gpio-leds {
		compatible = "gpio-leds";
		pinctrl-0 = <&pmx_power_led &pmx_power_led_blink &pmx_wan_led>;
		pinctrl-names = "default";

		led@0 {
			label = "wnr854t:green:power";
			gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
		};

		led@1 {
			label = "wnr854t:blink:power";
			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
		};

		led@2 {
			label = "wnr854t:green:wan";
			gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
		};
	};
};

&devbus_bootcs {
	status = "okay";

	devbus,keep-config;

	flash@0 {
		compatible = "cfi-flash";
		reg = <0 0x800000>;
		bank-width = <2>;

		partitions {
			compatible = "fixed-partitions";
			#address-cells = <1>;
			#size-cells = <1>;

			partition@0 {
				label = "kernel";
				reg = <0x0 0x100000>;
			};

			partition@100000 {
				label = "rootfs";
				reg = <0x100000 0x660000>;
			};

			partition@760000 {
				label = "uboot_env";
				reg = <0x760000 0x20000>;
			};

			partition@780000 {
				label = "uboot";
				reg = <0x780000 0x80000>;
				read-only;
			};
		};
	};
};

&mdio {
	status = "okay";

	switch: switch@0 {
		compatible = "marvell,mv88e6085";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0>;
		dsa,member = <0 0>;

		ports {
			#address-cells = <1>;
			#size-cells = <0>;

			port@0 {
				reg = <0>;
				label = "lan3";
				phy-handle = <&lan3phy>;
			};

			port@1 {
				reg = <1>;
				label = "lan4";
				phy-handle = <&lan4phy>;
			};

			port@2 {
				reg = <2>;
				label = "wan";
				phy-handle = <&wanphy>;
			};

			port@3 {
				reg = <3>;
				label = "cpu";
				ethernet = <&ethport>;
			};

			port@5 {
				reg = <5>;
				label = "lan1";
				phy-handle = <&lan1phy>;
			};

			port@7 {
				reg = <7>;
				label = "lan2";
				phy-handle = <&lan2phy>;
			};
		};

		mdio {
			#address-cells = <1>;
			#size-cells = <0>;

			lan3phy: ethernet-phy@0 {
				/* Marvell 88E1121R (port 1) */
				compatible = "ethernet-phy-id0141.0cb0",
					     "ethernet-phy-ieee802.3-c22";
				reg = <0>;
				marvell,reg-init = <3 16 0 0x1777 3 17 0 0x15>;
			};

			lan4phy: ethernet-phy@1 {
				/* Marvell 88E1121R (port 2) */
				compatible = "ethernet-phy-id0141.0cb0",
					     "ethernet-phy-ieee802.3-c22";
				reg = <1>;
				marvell,reg-init = <3 16 0 0x1777 3 17 0 0x15>;
			};

			wanphy: ethernet-phy@2 {
				/* Marvell 88E1121R (port 1) */
				compatible = "ethernet-phy-id0141.0cb0",
					     "ethernet-phy-ieee802.3-c22";
				reg = <2>;
				marvell,reg-init = <3 16 0 0x1777 3 17 0 0x15>;
			};

			lan1phy: ethernet-phy@5 {
				/* Marvell 88E1112 */
				compatible = "ethernet-phy-id0141.0cb0",
					     "ethernet-phy-ieee802.3-c22";
				reg = <5>;
				marvell,reg-init = <3 16 0 0x1777 3 17 0 0x15>;
			};

			lan2phy: ethernet-phy@7 {
				/* Marvell 88E1112 */
				compatible = "ethernet-phy-id0141.0cb0",
					     "ethernet-phy-ieee802.3-c22";
				reg = <7>;
				marvell,reg-init = <3 16 0 0x1777 3 17 0 0x15>;
			};
		};
	};
};

&eth {
	status = "okay";

	ethernet-port@0 {
		/* Hardwired to DSA switch */
		speed = <1000>;
		duplex = <1>;
	};
};

&pinctrl {
	pinctrl-0 = <&pmx_pci_gpios>;
	pinctrl-names = "default";

	pmx_power_led: pmx-power-led {
		marvell,pins = "mpp0";
		marvell,function = "gpio";
	};

	pmx_reset_button: pmx-reset-button {
		marvell,pins = "mpp1";
		marvell,function = "gpio";
	};

	pmx_power_led_blink: pmx-power-led-blink {
		marvell,pins = "mpp2";
		marvell,function = "gpio";
	};

	pmx_wan_led: pmx-wan-led {
		marvell,pins = "mpp3";
		marvell,function = "gpio";
	};

	pmx_pci_gpios: pmx-pci-gpios {
		marvell,pins = "mpp4";
		marvell,function = "gpio";
	};
};

&uart0 {
	/* Pin 1: Tx, Pin 7: Rx, Pin 8: Gnd */
	status = "okay";
};
