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

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