/*
 * Device Tree include for Compulab CM-A510 System-on-Module
 *
 * 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.
 */

/*
 * The CM-A510 comes with several optional components:
 *
 * Memory options:
 *  D512: 512M
 *  D1024: 1G
 *
 * NAND options:
 *  N512: 512M NAND
 *
 * Ethernet options:
 *  E1: PHY RTL8211D on internal GbE (SMI address 0x03)
 *  E2: Additional ethernet NIC RTL8111D on PCIe1
 *
 * Audio options:
 *  A: TI TLV320AIC23b audio codec (I2C address 0x1a)
 *
 * Touchscreen options:
 *  I: TI TSC2046 touchscreen controller (on SPI1)
 *
 * USB options:
 *  U2: 2 dual-role USB2.0 ports
 *  U4: 2 additional USB2.0 host ports (via USB1)
 *
 * WiFi options:
 *  W: Broadcom BCM4319 802.11b/g/n (USI WM-N-BM-01 on SDIO1)
 *
 * GPIOs used on CM-A510:
 *   1 GbE PHY reset (active low)
 *   3 WakeUp
 *   8 PowerOff (active low)
 *  13 Touchscreen pen irq (active low)
 *  65 System LED (active high)
 *  69 USB Hub reset (active low)
 *  70 WLAN reset (active low)
 *  71 WLAN regulator (active high)
 */

#include "dove.dtsi"

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

	/*
	 * Set the minimum memory size here and let the
	 * bootloader set the real size.
	 */
	memory {
		device_type = "memory";
		reg = <0x00000000 0x20000000>;
	};

	leds {
		compatible = "gpio-leds";
		/* Set upper NAND data bit to GPO */
		pinctrl-0 = <&pmx_nand_gpo>;
		pinctrl-names = "default";

		system {
			label = "cm-a510:system:green";
			gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
			default-state = "keep";
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		wifi_power: regulator@1 {
			compatible = "regulator-fixed";
			regulator-name = "WiFi Power";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio2 7 GPIO_ACTIVE_HIGH>;
		};
	};
};

/* Optional RTL8211D GbE PHY on SMI address 0x03 */
&ethphy {
	reg = <3>;
	status = "disabled";
};

&i2c0 {
	/* Optional TI TLV320AIC23b audio codec */
	opt_audio: audio@1a {
		compatible = "ti,tlv320aic23";
		reg = <0x1a>;
		status = "disabled";
	};
};

/* Optional RTL8111D GbE NIC on PCIe1 */
&pcie { status = "disabled"; };

&pcie1 {
	pinctrl-0 = <&pmx_pcie1_clkreq>;
	pinctrl-names = "default";
	status = "disabled";
};

&pinctrl {
	pmx_uart2: pmx-uart2 {
		marvell,pins = "mpp14", "mpp15";
		marvell,function = "uart2";
	};
};

/* Optional Broadcom BCM4319 802.11b/g/n WiFi module */
&sdio1 {
	non-removable;
	vmmc-supply = <&wifi_power>;
	reset-gpio = <&gpio2 6 GPIO_ACTIVE_LOW>;
	status = "disabled";
};

&spi0 {
	status = "okay";

	/* 1M Flash Winbond W25Q80BL */
	flash@0 {
		compatible = "winbond,w25q80";
		spi-max-frequency = <80000000>;
		reg = <0>;
	};
};

&spi1 {
	pinctrl-0 = <&pmx_spi1_20_23>;
	pinctrl-names = "default";
	status = "disabled";

	/* Optional TI TSC2046 touchscreen controller */
	opt_touch: touchscreen@0 {
		compatible = "ti,tsc2046";
		spi-max-frequency = <2500000>;
		reg = <0>;
		pinctrl-0 = <&pmx_gpio_13>;
		pinctrl-names = "default";
		interrupts-extended = <&gpio0 13 IRQ_TYPE_EDGE_FALLING>;
	};
};

&uart2 {
	pinctrl-0 = <&pmx_uart2>;
	pinctrl-names = "default";
};
