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

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