/*
 * Copyright (C) 2015 Marek Vasut <marex@denx.de>
 *
 * This program 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; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program 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.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#include "socfpga_cyclone5_mcv.dtsi"

/ {
	model = "Aries/DENX MCV EVK";
	compatible = "denx,mcvevk", "altr,socfpga-cyclone5", "altr,socfpga";

	aliases {
		ethernet0 = &gmac0;
		stmpe-i2c0 = &stmpe1;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};
};

&can0 {
	status = "okay";
};

&can1 {
	status = "okay";
};

&gmac0 {
	phy-mode = "rgmii";
	status = "okay";
};

&gpio0 {	/* GPIO  0 ... 28 */
	status = "okay";
};

&gpio1 {	/* GPIO 29 ... 57 */
	status = "okay";
};

&gpio2 {	/* GPIO 58..66 (HLGPI 0..13 at offset 13) */
	status = "okay";
};

&i2c0 {
	status = "okay";
	speed-mode = <0>;

	stmpe1: stmpe811@41 {
		compatible = "st,stmpe811";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x41>;
		id = <0>;
		blocks = <0x5>;
		irq-gpio = <&portb 28 0x4>;     /* GPIO 57, trig. level HI */

		stmpe_touchscreen {
			compatible = "st,stmpe-ts";
			reg = <0>;
			ts,sample-time = <4>;
			ts,mod-12b = <1>;
			ts,ref-sel = <0>;
			ts,adc-freq = <1>;
			ts,ave-ctrl = <1>;
			ts,touch-det-delay = <3>;
			ts,settling = <4>;
			ts,fraction-z = <7>;
			ts,i-drive = <1>;
		};
	};
};

&uart0 {
	status = "okay";
};

&usb1 {
	status = "okay";
};
