/*
 * Copyright 2013 Eukréa Electromatique <denis@eukrea.com>
 *
 * 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, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
 * MA 02110-1301, USA.
 */

/dts-v1/;
#include "imx51-eukrea-cpuimx51.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	model = "Eukrea CPUIMX51";
	compatible = "eukrea,mbimxsd51","eukrea,cpuimx51", "fsl,imx51";

	clocks {
		clk24M: can_clock {
			compatible = "fixed-clock";
			#clock-cells = <0>;
			clock-frequency = <24000000>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpiokeys_1>;

		button-1 {
			label = "BP1";
			gpios = <&gpio3 31 GPIO_ACTIVE_LOW>;
			linux,code = <256>;
			gpio-key,wakeup;
			linux,input-type = <1>;
		};
	};

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_gpioled>;

		led1 {
			label = "led1";
			gpios = <&gpio3 30 GPIO_ACTIVE_LOW>;
			linux,default-trigger = "heartbeat";
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		reg_can: regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			regulator-name = "CAN_RST";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			gpio = <&gpio4 15 GPIO_ACTIVE_HIGH>;
			startup-delay-us = <20000>;
			enable-active-high;
		};
	};

	sound {
		compatible = "eukrea,asoc-tlv320";
		eukrea,model = "imx51-eukrea-tlv320aic23";
		ssi-controller = <&ssi2>;
		fsl,mux-int-port = <2>;
		fsl,mux-ext-port = <3>;
	};

	usbphy {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "simple-bus";

		usbh1phy: usbh1phy@0 {
			compatible = "usb-nop-xceiv";
			reg = <0>;
			clocks = <&clks IMX5_CLK_USB_PHY_GATE>;
			clock-names = "main_clk";
			clock-frequency = <19200000>;
		};
	};
};

&audmux {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_audmux>;
	status = "okay";
};

&esdhc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc1 &pinctrl_esdhc1_cd>;
	fsl,cd-controller;
	status = "okay";
};

&ecspi1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_ecspi1>;
	fsl,spi-num-chipselects = <1>;
	cs-gpios = <&gpio4 24 GPIO_ACTIVE_LOW>;
	status = "okay";

	can0: can@0 {
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_can>;
		compatible = "microchip,mcp2515";
		reg = <0>;
		clocks = <&clk24M>;
		spi-max-frequency = <10000000>;
		interrupt-parent = <&gpio1>;
		interrupts = <1 IRQ_TYPE_EDGE_FALLING>;
		vdd-supply = <&reg_can>;
	};
};

&i2c1 {
	tlv320aic23: codec@1a {
		compatible = "ti,tlv320aic23";
		reg = <0x1a>;
	};
};

&iomuxc {
	imx51-eukrea {
		pinctrl_audmux: audmuxgrp {
			fsl,pins = <
				MX51_PAD_AUD3_BB_TXD__AUD3_TXD		0x80000000
				MX51_PAD_AUD3_BB_RXD__AUD3_RXD		0x80000000
				MX51_PAD_AUD3_BB_CK__AUD3_TXC		0x80000000
				MX51_PAD_AUD3_BB_FS__AUD3_TXFS		0x80000000
			>;
		};


		pinctrl_can: cangrp {
			fsl,pins = <
				MX51_PAD_CSI2_PIXCLK__GPIO4_15		0x80000000	/* nReset */
				MX51_PAD_GPIO1_1__GPIO1_1		0x80000000	/* IRQ */
			>;
		};

		pinctrl_ecspi1: ecspi1grp {
			fsl,pins = <
				MX51_PAD_CSPI1_MISO__ECSPI1_MISO	0x185
				MX51_PAD_CSPI1_MOSI__ECSPI1_MOSI	0x185
				MX51_PAD_CSPI1_SCLK__ECSPI1_SCLK	0x185
				MX51_PAD_CSPI1_SS0__GPIO4_24		0x80000000 	/* CS0 */
			>;
		};

		pinctrl_esdhc1: esdhc1grp {
			fsl,pins = <
				MX51_PAD_SD1_CMD__SD1_CMD		0x400020d5
				MX51_PAD_SD1_CLK__SD1_CLK		0x20d5
				MX51_PAD_SD1_DATA0__SD1_DATA0		0x20d5
				MX51_PAD_SD1_DATA1__SD1_DATA1		0x20d5
				MX51_PAD_SD1_DATA2__SD1_DATA2		0x20d5
				MX51_PAD_SD1_DATA3__SD1_DATA3		0x20d5
			>;
		};

		pinctrl_uart1: uart1grp {
			fsl,pins = <
				MX51_PAD_UART1_RXD__UART1_RXD		0x1c5
				MX51_PAD_UART1_TXD__UART1_TXD		0x1c5
			>;
		};

		pinctrl_uart3: uart3grp {
			fsl,pins = <
				MX51_PAD_UART3_RXD__UART3_RXD		0x1c5
				MX51_PAD_UART3_TXD__UART3_TXD		0x1c5
			>;
		};

		pinctrl_uart3_rtscts: uart3rtsctsgrp {
			fsl,pins = <
				MX51_PAD_KEY_COL4__UART3_RTS		0x1c5
				MX51_PAD_KEY_COL5__UART3_CTS		0x1c5
			>;
		};

		pinctrl_backlight_1: backlightgrp-1 {
			fsl,pins = <
				MX51_PAD_DI1_D1_CS__GPIO3_4 0x1f5
			>;
		};

		pinctrl_esdhc1_cd: esdhc1_cd {
			fsl,pins = <
				MX51_PAD_GPIO1_0__SD1_CD 0x20d5
			>;
		};

		pinctrl_gpiokeys_1: gpiokeysgrp-1 {
			fsl,pins = <
				MX51_PAD_NANDF_D9__GPIO3_31 0x1f5
			>;
		};

		pinctrl_gpioled: gpioledgrp-1 {
			fsl,pins = <
				MX51_PAD_NANDF_D10__GPIO3_30 0x80000000
			>;
		};

		pinctrl_reg_lcd_3v3: reg_lcd_3v3 {
			fsl,pins = <
				MX51_PAD_CSI1_D9__GPIO3_13 0x1f5
			>;
		};

		pinctrl_usbh1: usbh1grp {
			fsl,pins = <
				MX51_PAD_USBH1_CLK__USBH1_CLK     0x1e5
				MX51_PAD_USBH1_DIR__USBH1_DIR     0x1e5
				MX51_PAD_USBH1_NXT__USBH1_NXT     0x1e5
				MX51_PAD_USBH1_DATA0__USBH1_DATA0 0x1e5
				MX51_PAD_USBH1_DATA1__USBH1_DATA1 0x1e5
				MX51_PAD_USBH1_DATA2__USBH1_DATA2 0x1e5
				MX51_PAD_USBH1_DATA3__USBH1_DATA3 0x1e5
				MX51_PAD_USBH1_DATA4__USBH1_DATA4 0x1e5
				MX51_PAD_USBH1_DATA5__USBH1_DATA5 0x1e5
				MX51_PAD_USBH1_DATA6__USBH1_DATA6 0x1e5
				MX51_PAD_USBH1_DATA7__USBH1_DATA7 0x1e5
				MX51_PAD_USBH1_STP__USBH1_STP     0x1e5
			>;
		};

		pinctrl_usbh1_vbus: usbh1-vbusgrp {
			fsl,pins = <
				MX51_PAD_EIM_CS3__GPIO2_28 0x1f5
			>;
		};
	};
};

&ssi2 {
	codec-handle = <&tlv320aic23>;
	fsl,mode = "i2s-slave";
	status = "okay";
};

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart1>;
	fsl,uart-has-rtscts;
	status = "okay";
};

&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart3 &pinctrl_uart3_rtscts>;
	fsl,uart-has-rtscts;
	status = "okay";
};

&usbh1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usbh1>;
	fsl,usbphy = <&usbh1phy>;
	dr_mode = "host";
	phy_type = "ulpi";
	status = "okay";
};

&usbotg {
	dr_mode = "otg";
	phy_type = "utmi_wide";
	status = "okay";
};

&usbphy0 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usbh1_vbus>;
	reset-gpios = <&gpio2 28 GPIO_ACTIVE_LOW>;
};
