/*
 *  Copyright (C) 2013 Steffen Trumtrar <s.trumtrar@pengutronix.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.dtsi"

/ {
	model = "Terasic SoCkit";
	compatible = "altr,socfpga-cyclone5", "altr,socfpga";

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

	memory {
		name = "memory";
		device_type = "memory";
		reg = <0x0 0x40000000>; /* 1GB */
	};

	aliases {
		/* this allow the ethaddr uboot environmnet variable contents
		 * to be added to the gmac1 device tree blob.
		 */
		ethernet0 = &gmac1;
	};

	leds {
		compatible = "gpio-leds";

		hps_led0 {
			label = "hps:blue:led0";
			gpios = <&portb 24 0>;	/* HPS_GPIO53 */
			linux,default-trigger = "heartbeat";
		};

		hps_led1 {
			label = "hps:blue:led1";
			gpios = <&portb 25 0>;	/* HPS_GPIO54 */
			linux,default-trigger = "heartbeat";
		};

		hps_led2 {
			label = "hps:blue:led2";
			gpios = <&portb 26 0>;	/* HPS_GPIO55 */
			linux,default-trigger = "heartbeat";
		};

		hps_led3 {
			label = "hps:blue:led3";
			gpios = <&portb 27 0>;	/* HPS_GPIO56 */
			linux,default-trigger = "heartbeat";
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		hps_sw0 {
			label = "hps_sw0";
			gpios = <&portc 20 0>;	/* HPS_GPI7 */
			linux,input-type = <5>;	/* EV_SW */
			linux,code = <0x0>;	/* SW_LID */
		};

		hps_sw1 {
			label = "hps_sw1";
			gpios = <&portc 19 0>;	/* HPS_GPI6 */
			linux,input-type = <5>;	/* EV_SW */
			linux,code = <0x5>;	/* SW_DOCK */
		};

		hps_sw2 {
			label = "hps_sw2";
			gpios = <&portc 18 0>;	/* HPS_GPI5 */
			linux,input-type = <5>;	/* EV_SW */
			linux,code = <0xa>;	/* SW_KEYPAD_SLIDE */
		};

		hps_sw3 {
			label = "hps_sw3";
			gpios = <&portc 17 0>;	/* HPS_GPI4 */
			linux,input-type = <5>;	/* EV_SW */
			linux,code = <0xc>;	/* SW_ROTATE_LOCK */
		};

		hps_hkey0 {
			label = "hps_hkey0";
			gpios = <&portc 21 1>;	/* HPS_GPI8 */
			linux,code = <187>;	/* KEY_F17 */
		};

		hps_hkey1 {
			label = "hps_hkey1";
			gpios = <&portc 22 1>;	/* HPS_GPI9 */
			linux,code = <188>;	/* KEY_F18 */
		};

		hps_hkey2 {
			label = "hps_hkey2";
			gpios = <&portc 23 1>;	/* HPS_GPI10 */
			linux,code = <189>;	/* KEY_F19 */
		};

		hps_hkey3 {
			label = "hps_hkey3";
			gpios = <&portc 24 1>;	/* HPS_GPI11 */
			linux,code = <190>;	/* KEY_F20 */
		};
	};

	regulator_3_3v: vcc3p3-regulator {
		compatible = "regulator-fixed";
		regulator-name = "VCC3P3";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
	};
};

&gmac1 {
	status = "okay";
	phy-mode = "rgmii";

	rxd0-skew-ps = <0>;
	rxd1-skew-ps = <0>;
	rxd2-skew-ps = <0>;
	rxd3-skew-ps = <0>;
	txen-skew-ps = <0>;
	txc-skew-ps = <2600>;
	rxdv-skew-ps = <0>;
	rxc-skew-ps = <2000>;
};

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

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

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

&i2c1 {
	status = "okay";

	accel1: accelerometer@53 {
		compatible = "adi,adxl345";
		reg = <0x53>;

		interrupt-parent = <&portc>;
		interrupts = <3 2>;
	};
};

&mmc0 {
	vmmc-supply = <&regulator_3_3v>;
	vqmmc-supply = <&regulator_3_3v>;
	status = "okay";
};

&usb1 {
	status = "okay";
};
