/*
 * 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 "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.
 */

/*
 * 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"; };
