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