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