/*
 *  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 = "terasic,socfpga-cyclone5-sockit", "altr,socfpga-cyclone5", "altr,socfpga";

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

	memory@0 {
		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";
};

&qspi {
	status = "okay";

	flash: flash@0 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "n25q00";
		reg = <0>;
		spi-max-frequency = <100000000>;

		m25p,fast-read;
		cdns,page-size = <256>;
		cdns,block-size = <16>;
		cdns,read-delay = <4>;
		cdns,tshsl-ns = <50>;
		cdns,tsd2d-ns = <50>;
		cdns,tchsh-ns = <4>;
		cdns,tslch-ns = <4>;
	};
};

&usb1 {
	status = "okay";
};
