/*
 *  BSD LICENSE
 *
 *  Copyright(c) 2016-2017 Broadcom.  All rights reserved.
 *
 *  Redistribution and use in source and binary forms, with or without
 *  modification, are permitted provided that the following conditions
 *  are met:
 *
 *    * Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *    * Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in
 *      the documentation and/or other materials provided with the
 *      distribution.
 *    * Neither the name of Broadcom nor the names of its
 *      contributors may be used to endorse or promote products derived
 *      from this software without specific prior written permission.
 *
 *  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
 *  "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
 *  LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
 *  A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
 *  OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
 *  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
 *  LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 *  DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 *  THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 *  (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
 *  OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */

#include "stingray.dtsi"

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

	aliases {
		serial0 = &uart1;
		serial1 = &uart0;
		serial2 = &uart2;
		serial3 = &uart3;
	};

	sdio0_vddo_ctrl_reg: sdio0_vddo_ctrl {
		compatible = "regulator-gpio";
		regulator-name = "sdio0_vddo_ctrl_reg";
		regulator-type = "voltage";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;
		gpios = <&pca9505 18 0>;
		states = <3300000 0x0
			  1800000 0x1>;
	};

	sdio1_vddo_ctrl_reg: sdio1_vddo_ctrl {
		compatible = "regulator-gpio";
		regulator-name = "sdio1_vddo_ctrl_reg";
		regulator-type = "voltage";
		regulator-min-microvolt = <1800000>;
		regulator-max-microvolt = <3300000>;
		gpios = <&pca9505 19 0>;
		states = <3300000 0x0
			  1800000 0x1>;
	};
};

&memory { /* Default DRAM banks */
	reg = <0x00000000 0x80000000 0x0 0x80000000>, /* 2G @ 2G */
	      <0x00000008 0x80000000 0x1 0x80000000>; /* 6G @ 34G */
};

&sata0 {
	status = "okay";
};

&sata_phy0{
	status = "okay";
};

&sata1 {
	status = "okay";
};

&sata_phy1{
	status = "okay";
};

&sata2 {
	status = "okay";
};

&sata_phy2{
	status = "okay";
};

&sata3 {
	status = "okay";
};

&sata_phy3{
	status = "okay";
};

&sata4 {
	status = "okay";
};

&sata_phy4{
	status = "okay";
};

&sata5 {
	status = "okay";
};

&sata_phy5{
	status = "okay";
};

&sata6 {
	status = "okay";
};

&sata_phy6{
	status = "okay";
};

&sata7 {
	status = "okay";
};

&sata_phy7{
	status = "okay";
};

&mdio_mux_iproc {
	mdio@10 {
		gphy0: eth-phy@10 {
			reg = <0x10>;
		};
	};
};

&uart1 {
	status = "okay";
};

&pwm {
	status = "okay";
};

&i2c0 {
	status = "okay";

	pca9505: pca9505@20 {
		compatible = "nxp,pca9505";
		gpio-controller;
		#gpio-cells = <2>;
		reg = <0x20>;
	};
};

&i2c1 {
	status = "okay";

	pcf8574: pcf8574@20 {
		compatible = "nxp,pcf8574a";
		gpio-controller;
		#gpio-cells = <2>;
		reg = <0x27>;
	};
};

&enet {
	phy-mode = "rgmii-id";
	phy-handle = <&gphy0>;
	status = "okay";
};

&nand {
	status = "ok";
	nandcs@0 {
		compatible = "brcm,nandcs";
		reg = <0>;
		nand-ecc-mode = "hw";
		nand-ecc-strength = <8>;
		nand-ecc-step-size = <512>;
		nand-bus-width = <16>;
		brcm,nand-oob-sector-size = <16>;
		#address-cells = <1>;
		#size-cells = <1>;
	};
};

&sdio0 {
	vqmmc-supply = <&sdio0_vddo_ctrl_reg>;
	non-removable;
	full-pwr-cycle;
	status = "okay";
};

&sdio1 {
	vqmmc-supply = <&sdio1_vddo_ctrl_reg>;
	full-pwr-cycle;
	status = "okay";
};
