/*
 * Device Tree Source for Meraki MR24 (Ikarem)
 *
 * Copyright (C) 2016 Chris Blake <chrisrblake93@gmail.com>
 *
 * Based on Cisco Meraki GPL Release r23-20150601 MR24 DTS
 *
 * 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 "apm82181.dtsi"

/ {
	model = "Meraki MR24 Access Point";
	compatible = "meraki,mr24", "meraki,ikarem", "apm,bluestone";

	aliases {
		serial0 = &UART1;
		led-boot = &status;
		led-failsafe = &failsafe;
		led-running = &status;
		led-upgrade = &status;
	};

	chosen {
		stdout-path = "/plb/opb/serial@ef600400";
	};
};


&CRYPTO {
	status = "okay";
};

&PKA {
	status = "okay";
};

&TRNG {
	status = "okay";
};

&EBC0 {
	/* Ikarem has 32MB of NAND */
	ndfc@1,0 {
		status = "okay";
		/* 32 MiB NAND Flash */
		nand {
			partition@0 {
				label = "u-boot";
				reg = <0x00000000 0x00150000>;
				read-only;
			};

			partition@150000 {
				/*
				 * The u-boot environment size is one NAND
				 * block (16KiB). u-boot allocates four NAND
				 * blocks (64KiB) in order to have spares
				 * around for bad block management
				 */
				label = "u-boot-env";
				reg = <0x00150000 0x00010000>;
				read-only;
			};

			partition@160000 {
				/*
				 * redundant u-boot environment.
				 * has to be kept it in sync with the
				 * data in "u-boot-env".
				 */
				label = "u-boot-env-redundant";
				reg = <0x00160000 0x00010000>;
				read-only;
			};

			partition@170000 {
				label = "oops";
				reg = <0x00170000 0x00010000>;
			};

			partition@180000 {
				label = "ubi";
				reg = <0x00180000 0x01e80000>;
			};
		};
	};
};

&UART1 {
	status = "okay";
};

&GPIO0 {
	status = "okay";
};

&IIC0 {
	status = "okay";
	/* Boot ROM is at 0x52-0x53, do not touch */
	/* Unknown chip at 0x6e, not sure what it is */
};

&EMAC0 {
	status = "okay";

	phy-mode = "rgmii-id";
	phy-map = <0x2>;
	phy-address = <0x1>;
	phy-handle = <&phy>;

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

		phy: phy@1 {
			compatible = "ethernet-phy-ieee802.3-c22";
			reg = <1>;
		};
	};
};

&POB0 {
	leds {
		compatible = "gpio-leds";

		status: power-green {
			label = "mr24:green:power";
			gpios = <&GPIO0 18 GPIO_ACTIVE_LOW>;
		};

		failsafe: power-orange {
			label = "mr24:orange:power";
			gpios = <&GPIO0 19 GPIO_ACTIVE_LOW>;
		};

		lan {
			label = "mr24:green:wan";
			gpios = <&GPIO0 17 GPIO_ACTIVE_LOW>;
		};

		ssi-0 {
			label = "mr24:green:wifi1";
			gpios = <&GPIO0 23 GPIO_ACTIVE_LOW>;
		};

		ssi-1 {
			label = "mr24:green:wifi2";
			gpios = <&GPIO0 22 GPIO_ACTIVE_LOW>;
		};

		ssi-2 {
			label = "mr24:green:wifi3";
			gpios = <&GPIO0 21 GPIO_ACTIVE_LOW>;
		};

		ssi-3 {
			label = "mr24:green:wifi4";
			gpios = <&GPIO0 20 GPIO_ACTIVE_LOW>;
		};
	};

	keys {
		compatible = "gpio-keys";

		reset {
			/* Label as per Meraki's "MR24 Installation Guide" */
			label = "Factory Reset Button";
			linux,code = <KEY_RESTART>;
			interrupt-parent = <&UIC1>;
			interrupts = <0x15 IRQ_TYPE_EDGE_FALLING>;
			gpios = <&GPIO0 16 GPIO_ACTIVE_LOW>;
			debounce-interval = <60>;
		};
	};
};

&PCIE0 {
	status = "okay";
};

&MSI {
	status = "okay";
};