/*
 * Copyright 2017 Beckhoff Automation GmbH & Co. KG
 * based on imx53-qsb.dts
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/dts-v1/;
#include "imx53.dtsi"

/ {
	model = "Beckhoff CX9020 Embedded PC";
	compatible = "bhf,cx9020", "fsl,imx53";

	chosen {
		stdout-path = &uart2;
	};

	memory {
		reg = <0x70000000 0x20000000>,
		      <0xb0000000 0x20000000>;
	};

	display-0 {
		#address-cells =<1>;
		#size-cells = <0>;
		compatible = "fsl,imx-parallel-display";
		interface-pix-fmt = "rgb24";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_ipu_disp0>;

		port@0 {
			reg = <0>;

			display0_in: endpoint {
				remote-endpoint = <&ipu_di0_disp0>;
			};
		};

		port@1 {
			reg = <1>;

			display0_out: endpoint {
				remote-endpoint = <&tfp410_in>;
			};
		};
	};

	dvi-connector {
		compatible = "dvi-connector";
		ddc-i2c-bus = <&i2c2>;
		digital;

		port {
			dvi_connector_in: endpoint {
				remote-endpoint = <&tfp410_out>;
			};
		};
	};

	dvi-converter {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "ti,tfp410";

		port@0 {
			reg = <0>;

			tfp410_in: endpoint {
				remote-endpoint = <&display0_out>;
			};
		};

		port@1 {
			reg = <1>;

			tfp410_out: endpoint {
				remote-endpoint = <&dvi_connector_in>;
			};
		};
	};

	leds {
		compatible = "gpio-leds";

		pwr-r {
			gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		pwr-g {
			gpios = <&gpio3 24 GPIO_ACTIVE_HIGH>;
			default-state = "on";
		};

		pwr-b {
			gpios = <&gpio3 23 GPIO_ACTIVE_HIGH>;
			default-state = "off";
		};

		sd1-b {
			linux,default-trigger = "mmc0";
			gpios = <&gpio3 20 GPIO_ACTIVE_HIGH>;
		};

		sd2-b {
			linux,default-trigger = "mmc1";
			gpios = <&gpio3 17 GPIO_ACTIVE_HIGH>;
		};
	};

	regulator-3p2v {
		compatible = "regulator-fixed";
		regulator-name = "3P2V";
		regulator-min-microvolt = <3200000>;
		regulator-max-microvolt = <3200000>;
		regulator-always-on;
	};

	reg_usb_vbus: regulator-vbus {
		compatible = "regulator-fixed";
		regulator-name = "usb_vbus";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		gpio = <&gpio7 8 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};
};

&esdhc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc1>;
	cd-gpios = <&gpio1 1 GPIO_ACTIVE_LOW>;
	bus-width = <4>;
	status = "okay";
};

&esdhc2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc2>;
	cd-gpios = <&gpio1 4 GPIO_ACTIVE_LOW>;
	bus-width = <4>;
	status = "okay";
};

&fec {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_fec>;
	phy-mode = "rmii";
	phy-reset-gpios = <&gpio7 6 GPIO_ACTIVE_HIGH>;
	status = "okay";
};

&i2c2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c2>;
	status = "okay";
};

&ipu_di0_disp0 {
	remote-endpoint = <&display0_in>;
};

&uart2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart2>;
	fsl,dte-mode;
	status = "okay";
};

&usbh1 {
	vbus-supply = <&reg_usb_vbus>;
	phy_type = "utmi";
	status = "okay";
};

&usbotg {
	dr_mode = "peripheral";
	status = "okay";
};

&vpu {
	status = "okay";
};

&iomuxc {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_hog>;

	pinctrl_hog: hoggrp {
		fsl,pins = <
			MX53_PAD_GPIO_0__CCM_CLKO               0x1c4
			MX53_PAD_GPIO_16__I2C3_SDA              0x1c4
			MX53_PAD_EIM_D22__GPIO3_22              0x1c4
			MX53_PAD_EIM_D23__GPIO3_23              0x1e4
			MX53_PAD_EIM_D24__GPIO3_24              0x1e4
		>;
	};

	pinctrl_esdhc1: esdhc1grp {
		fsl,pins = <
			MX53_PAD_SD1_DATA0__ESDHC1_DAT0		0x1d5
			MX53_PAD_SD1_DATA1__ESDHC1_DAT1		0x1d5
			MX53_PAD_SD1_DATA2__ESDHC1_DAT2		0x1d5
			MX53_PAD_SD1_DATA3__ESDHC1_DAT3		0x1d5
			MX53_PAD_SD1_CMD__ESDHC1_CMD		0x1d5
			MX53_PAD_SD1_CLK__ESDHC1_CLK		0x1d5
			MX53_PAD_GPIO_1__ESDHC1_CD              0x1c4
			MX53_PAD_EIM_D17__GPIO3_17              0x1e4
			MX53_PAD_GPIO_3__GPIO1_3                0x1c4
		>;
	};

	pinctrl_esdhc2: esdhc2grp {
		fsl,pins = <
			MX53_PAD_SD2_DATA0__ESDHC2_DAT0		0x1d5
			MX53_PAD_SD2_DATA1__ESDHC2_DAT1		0x1d5
			MX53_PAD_SD2_DATA2__ESDHC2_DAT2		0x1d5
			MX53_PAD_SD2_DATA3__ESDHC2_DAT3		0x1d5
			MX53_PAD_SD2_CMD__ESDHC2_CMD		0x1d5
			MX53_PAD_SD2_CLK__ESDHC2_CLK		0x1d5
			MX53_PAD_GPIO_4__ESDHC2_CD              0x1e4
			MX53_PAD_EIM_D20__GPIO3_20              0x1e4
			MX53_PAD_GPIO_8__GPIO1_8                0x1c4
		>;
	};

	pinctrl_fec: fecgrp {
		fsl,pins = <
			MX53_PAD_FEC_MDC__FEC_MDC		0x4
			MX53_PAD_FEC_MDIO__FEC_MDIO		0x1fc
			MX53_PAD_FEC_REF_CLK__FEC_TX_CLK	0x180
			MX53_PAD_FEC_RX_ER__FEC_RX_ER		0x180
			MX53_PAD_FEC_CRS_DV__FEC_RX_DV		0x180
			MX53_PAD_FEC_RXD1__FEC_RDATA_1		0x180
			MX53_PAD_FEC_RXD0__FEC_RDATA_0		0x180
			MX53_PAD_FEC_TX_EN__FEC_TX_EN		0x4
			MX53_PAD_FEC_TXD1__FEC_TDATA_1		0x4
			MX53_PAD_FEC_TXD0__FEC_TDATA_0		0x4
		>;
	};

	pinctrl_i2c2: i2c2grp {
		fsl,pins = <
			MX53_PAD_KEY_ROW3__I2C2_SDA             0xc0000000
			MX53_PAD_KEY_COL3__I2C2_SCL             0xc0000000
		>;
	};

	pinctrl_ipu_disp0: ipudisp0grp {
		fsl,pins = <
			MX53_PAD_DI0_DISP_CLK__IPU_DI0_DISP_CLK	0x5
			MX53_PAD_DI0_PIN15__IPU_DI0_PIN15	0x5
			MX53_PAD_DI0_PIN2__IPU_DI0_PIN2		0x5
			MX53_PAD_DI0_PIN3__IPU_DI0_PIN3		0x5
			MX53_PAD_DI0_PIN4__IPU_DI0_PIN4		0x5
			MX53_PAD_DISP0_DAT0__IPU_DISP0_DAT_0	0x5
			MX53_PAD_DISP0_DAT1__IPU_DISP0_DAT_1	0x5
			MX53_PAD_DISP0_DAT2__IPU_DISP0_DAT_2	0x5
			MX53_PAD_DISP0_DAT3__IPU_DISP0_DAT_3	0x5
			MX53_PAD_DISP0_DAT4__IPU_DISP0_DAT_4	0x5
			MX53_PAD_DISP0_DAT5__IPU_DISP0_DAT_5	0x5
			MX53_PAD_DISP0_DAT6__IPU_DISP0_DAT_6	0x5
			MX53_PAD_DISP0_DAT7__IPU_DISP0_DAT_7	0x5
			MX53_PAD_DISP0_DAT8__IPU_DISP0_DAT_8	0x5
			MX53_PAD_DISP0_DAT9__IPU_DISP0_DAT_9	0x5
			MX53_PAD_DISP0_DAT10__IPU_DISP0_DAT_10	0x5
			MX53_PAD_DISP0_DAT11__IPU_DISP0_DAT_11	0x5
			MX53_PAD_DISP0_DAT12__IPU_DISP0_DAT_12	0x5
			MX53_PAD_DISP0_DAT13__IPU_DISP0_DAT_13	0x5
			MX53_PAD_DISP0_DAT14__IPU_DISP0_DAT_14	0x5
			MX53_PAD_DISP0_DAT15__IPU_DISP0_DAT_15	0x5
			MX53_PAD_DISP0_DAT16__IPU_DISP0_DAT_16	0x5
			MX53_PAD_DISP0_DAT17__IPU_DISP0_DAT_17	0x5
			MX53_PAD_DISP0_DAT18__IPU_DISP0_DAT_18	0x5
			MX53_PAD_DISP0_DAT19__IPU_DISP0_DAT_19	0x5
			MX53_PAD_DISP0_DAT20__IPU_DISP0_DAT_20	0x5
			MX53_PAD_DISP0_DAT21__IPU_DISP0_DAT_21	0x5
			MX53_PAD_DISP0_DAT22__IPU_DISP0_DAT_22	0x5
			MX53_PAD_DISP0_DAT23__IPU_DISP0_DAT_23	0x5
		>;
	};

	pinctrl_uart2: uart2grp {
		fsl,pins = <
			MX53_PAD_EIM_D26__UART2_RXD_MUX	0x1e4
			MX53_PAD_EIM_D27__UART2_TXD_MUX 0x1e4
			MX53_PAD_EIM_D28__UART2_RTS 0x1e4
			MX53_PAD_EIM_D29__UART2_CTS 0x1e4
		>;
	};
};
