/*
 * Device Tree file for Compulab SBC-A510 Single Board Computer
 *
 * Copyright (C) 2015, Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL 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 file 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; version 2 of the
 *     License.
 *
 *     This file 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 , 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.
 */

/*
 * SBC-A510 comprises a PCA9555 I2C GPIO expander its GPIO lines connected to
 *
 * 0.0 USB0 VBUS_EN (active high)
 * 0.1 USB0 VBUS_GOOD
 * 0.2 DVI transmitter TI TFP410 MSEN
 * 0.3 DVI transmitter TI TFP410 PD# (active low power down)
 * 0.4 LVDS transmitter DS90C365 PD# (active low power down)
 * 0.5 LCD nRST (active low reset)
 * 0.6 PCIe0 nRST (active low reset)
 * 0.7 mini-PCIe slot W_DISABLE#
 *
 * 1.0 MMC WP
 * 1.1 Camera Input FPC FLASH_STB and P21.5
 * 1.2 Camera Input FPC WE        and P21.22
 * 1.3 MMC VCC_EN (active high)   and P21.7
 * 1.4 Camera Input FPC AFTR_RST  and P21.17
 * 1.5 Camera Input FPC OE        and P21.19
 * 1.6 Camera Input FPC SNPSHT    and P21.6
 * 1.7 Camera Input FPC SHTR      and P21.10
 */

/dts-v1/;

#include "dove-cm-a510.dtsi"

/ {
	model = "Compulab SBC-A510";
	compatible = "compulab,sbc-a510", "compulab,cm-a510", "marvell,dove";

	chosen {
		stdout-path = &uart0;
	};

	regulators {
		usb0_power: regulator@2 {
			compatible = "regulator-fixed";
			regulator-name = "USB Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio_ext 0 GPIO_ACTIVE_HIGH>;
		};

		mmc_power: regulator@3 {
			compatible = "regulator-fixed";
			regulator-name = "MMC Power";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio_ext 13 GPIO_ACTIVE_HIGH>;
		};
	};
};

/* Ethernet0 depends on CM-A510 option E1 */
&mdio { status = "disabled"; };
&eth { status = "disabled"; };
&ethphy { status = "disabled"; };

/*
 * USB port 0 can be powered and monitored by I2C GPIO expander:
 *  VBUS_ENABLE on GPIO0, VBUS_GOOD on GPIO1
 */
&ehci0 {
	status = "okay";
	vbus-supply = <&usb0_power>;
};

/* USB port 1 (and ports 2, 3 if CM-A510 has U4 option) */
&ehci1 { status = "okay"; };

/*
 * I2C bus layout:
 * i2c0:
 *  - Audio Codec, 0x1a (option from CM-A510)
 *  - DVI transmitter TI TFP410, 0x39
 *  - HDMI/DVI DDC channel
 * i2c1:
 *  - GPIO expander, NXP PCA9555, 0x20
 *  - VGA DDC channel
 */
&i2c {
	pinctrl-0 = <&pmx_i2c1>;
	pinctrl-names = "default";
};

&i2c0 {
	/* TI TFP410 DVI transmitter */
	dvi: video@39 {
		compatible = "ti,tfp410";
		reg = <0x39>;
		powerdown-gpio = <&gpio_ext 3 GPIO_ACTIVE_LOW>;
	};
};

&i2c1 {
	status = "okay";

	/* NXP PCA9555 GPIO expander */
	gpio_ext: gpio@20 {
		compatible = "nxp,pca9555";
		reg = <0x20>;
		#gpio-cells = <2>;
	};
};

&pcie { status = "okay"; };

/*
 * PCIe0 can be configured by Jumper E1 to be either connected to
 * a mini-PCIe slot or a Pericom PI7C9X111 PCIe-to-PCI bridge.
 */
&pcie0 {
	status = "okay";
	pinctrl-0 = <&pmx_pcie0_clkreq>;
	pinctrl-names = "default";
	reset-gpios = <&gpio_ext 6 GPIO_ACTIVE_LOW>;
};

/* Ethernet1 depends on CM-A510 option E2 */
&pcie1 { status = "disabled"; };

/* SATA connector */
&sata0 { status = "okay"; };

/*
 * SDIO0 is connected to a MMC/SD/SDIO socket, I2C GPIO expander has
 *  VCC_MMC_ENABLE on GPIO13, MMC_WP on GPIO10
 */
&sdio0 {
	vmmc-supply = <&mmc_power>;
	wp-gpios = <&gpio_ext 10 GPIO_ACTIVE_LOW>;
	status = "okay";
};

/* UART0 on RS232 mini-connector */
&uart0 { status = "okay"; };
/* UART2 on pin headers */
&uart2 { status = "okay"; };
