/*
 * Copyright (C) 2016 Marvell Technology Group Ltd.
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPLv2 or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This library is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License as
 *     published by the Free Software Foundation; either version 2 of the
 *     License, or (at your option) any later version.
 *
 *     This library is distributed in the hope that it will be useful,
 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *     GNU General Public License for more details.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

/*
 * Device Tree file for Marvell Armada 8040 Development board platform
 */

#include <dt-bindings/gpio/gpio.h>
#include "armada-8040.dtsi"

/ {
	model = "Marvell Armada 8040 DB board";
	compatible = "marvell,armada8040-db", "marvell,armada8040",
		     "marvell,armada-ap806-quad", "marvell,armada-ap806";

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

	memory@00000000 {
		device_type = "memory";
		reg = <0x0 0x0 0x0 0x80000000>;
	};

	cpm_reg_usb3_0_vbus: cpm-usb3-0-vbus {
		compatible = "regulator-fixed";
		regulator-name = "cpm-usb3h0-vbus";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		enable-active-high;
		gpio = <&expander0 0 GPIO_ACTIVE_HIGH>;
	};

	cpm_reg_usb3_1_vbus: cpm-usb3-1-vbus {
		compatible = "regulator-fixed";
		regulator-name = "cpm-usb3h1-vbus";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		enable-active-high;
		gpio = <&expander0 1 GPIO_ACTIVE_HIGH>;
	};

	cpm_usb3_0_phy: cpm-usb3-0-phy {
		compatible = "usb-nop-xceiv";
		vcc-supply = <&cpm_reg_usb3_0_vbus>;
	};

	cpm_usb3_1_phy: cpm-usb3-1-phy {
		compatible = "usb-nop-xceiv";
		vcc-supply = <&cpm_reg_usb3_1_vbus>;
	};

	cps_reg_usb3_0_vbus: cps-usb3-0-vbus {
		compatible = "regulator-fixed";
		regulator-name = "cps-usb3h0-vbus";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		enable-active-high;
		gpio = <&expander1 0 GPIO_ACTIVE_HIGH>;
	};

	cps_usb3_0_phy: cps-usb3-0-phy {
		compatible = "usb-nop-xceiv";
		vcc-supply = <&cps_reg_usb3_0_vbus>;
	};
};

&i2c0 {
	status = "okay";
	clock-frequency = <100000>;
};

&spi0 {
	status = "okay";

	spi-flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "jedec,spi-nor";
		reg = <0>;
		spi-max-frequency = <10000000>;

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

			partition@0 {
				label = "U-Boot";
				reg = <0 0x200000>;
			};
			partition@400000 {
				label = "Filesystem";
				reg = <0x200000 0xce0000>;
			};
		};
	};
};

/* Accessible over the mini-USB CON9 connector on the main board */
&uart0 {
	status = "okay";
};


/* CON5 on CP0 expansion */
&cpm_pcie2 {
	status = "okay";
};

&cpm_i2c0 {
	status = "okay";
	clock-frequency = <100000>;

	/* U31 */
	expander0: pca9555@21 {
		compatible = "nxp,pca9555";
		pinctrl-names = "default";
		gpio-controller;
		#gpio-cells = <2>;
		reg = <0x21>;
	};

	/* U25 */
	expander1: pca9555@25 {
		compatible = "nxp,pca9555";
		pinctrl-names = "default";
		gpio-controller;
		#gpio-cells = <2>;
		reg = <0x25>;
	};

};

/* CON4 on CP0 expansion */
&cpm_sata0 {
	status = "okay";
};

/* CON9 on CP0 expansion */
&cpm_usb3_0 {
	usb-phy = <&cpm_usb3_0_phy>;
	status = "okay";
};

/* CON10 on CP0 expansion */
&cpm_usb3_1 {
	usb-phy = <&cpm_usb3_1_phy>;
	status = "okay";
};

&cpm_mdio {
	status = "okay";

	phy1: ethernet-phy@1 {
		reg = <1>;
	};
};

&cpm_ethernet {
	status = "okay";
};

&cpm_eth2 {
	status = "okay";
	phy = <&phy1>;
	phy-mode = "rgmii-id";
};

/* CON5 on CP1 expansion */
&cps_pcie2 {
	status = "okay";
};

&cps_i2c0 {
	status = "okay";
	clock-frequency = <100000>;
};

/* CON4 on CP1 expansion */
&cps_sata0 {
	status = "okay";
};

/* CON9 on CP1 expansion */
&cps_usb3_0 {
	usb-phy = <&cps_usb3_0_phy>;
	status = "okay";
};

/* CON10 on CP1 expansion */
&cps_usb3_1 {
	status = "okay";
};

&cps_mdio {
	status = "okay";

	phy0: ethernet-phy@0 {
		reg = <0>;
	};
};

&cps_ethernet {
	status = "okay";
};

&cps_eth1 {
	status = "okay";
	phy = <&phy0>;
	phy-mode = "rgmii-id";
};

&ap_sdhci0 {
	status = "okay";
	bus-width = <4>;
	non-removable;
};

&cpm_sdhci0 {
	status = "okay";
	bus-width = <8>;
	non-removable;
};
