/*
 * 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>;
	cd-gpios = <&gpio1 0 GPIO_ACTIVE_LOW>;
	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__GPIO1_0 0xd5
			>;
		};

		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>;
	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>;
};
