/*
 * Copyright 2018
 * Lukasz Majewski, DENX Software Engineering, lukma@denx.de
 *
 * SPDX-License-Identifier:     GPL-2.0+ or X11
 */

/dts-v1/;
#include <dt-bindings/gpio/gpio.h>
#include "imx53.dtsi"
#include "imx53-pinfunc.h"

/ {
	model = "K+P iMX53";
	compatible = "kp,imx53-kp", "fsl,imx53";

	chosen {
		stdout-path = &uart2;
	};

	aliases {
		mmc0 = &esdhc3;
	};

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

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

};

&esdhc3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc3>;
	bus-width = <8>;
	non-removable;
	status = "okay";
};

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

&i2c2 {
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c2>;
	pinctrl-1 = <&pinctrl_i2c2_gpio>;
	clock_frequency = <100000>;

	scl-gpios = <&gpio4 12 GPIO_ACTIVE_HIGH>;
	sda-gpios = <&gpio4 13 GPIO_ACTIVE_HIGH>;

	status = "okay";

	pmic: mc34708@8 {
		compatible = "fsl,mc34708";
		reg = <0x8>;
	};
};

&i2c3 {
	pinctrl-names = "default", "gpio";
	pinctrl-0 = <&pinctrl_i2c3>;
	pinctrl-1 = <&pinctrl_i2c3_gpio>;
	clock_frequency = <100000>;

	scl-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>;
	sda-gpios = <&gpio1 6 GPIO_ACTIVE_HIGH>;

	status = "okay";
};

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

	imx53-kp {
		pinctrl_esdhc3: esdhc3grp {
			fsl,pins = <
				MX53_PAD_PATA_DATA8__ESDHC3_DAT0        0x1d4
				MX53_PAD_PATA_DATA9__ESDHC3_DAT1        0x1d4
				MX53_PAD_PATA_DATA10__ESDHC3_DAT2       0x1d4
				MX53_PAD_PATA_DATA11__ESDHC3_DAT3       0x1d4
				MX53_PAD_PATA_DATA0__ESDHC3_DAT4        0x1d4
				MX53_PAD_PATA_DATA1__ESDHC3_DAT5        0x1d4
				MX53_PAD_PATA_DATA2__ESDHC3_DAT6        0x1d4
				MX53_PAD_PATA_DATA3__ESDHC3_DAT7        0x1d4
				MX53_PAD_PATA_RESET_B__ESDHC3_CMD       0x1e4
				MX53_PAD_PATA_IORDY__ESDHC3_CLK         0x1d4
			>;
		};

		pinctrl_eth: ethgrp {
			fsl,pins = <
				MX53_PAD_FEC_MDIO__FEC_MDIO 0x1fc
				MX53_PAD_FEC_MDC__FEC_MDC 0x4
				MX53_PAD_FEC_RXD1__FEC_RDATA_1 0x180
				MX53_PAD_FEC_RXD0__FEC_RDATA_0 0x180
				MX53_PAD_FEC_TXD1__FEC_TDATA_1 0x4
				MX53_PAD_FEC_TXD0__FEC_TDATA_0 0x4
				MX53_PAD_FEC_TX_EN__FEC_TX_EN 0x4
				MX53_PAD_FEC_REF_CLK__FEC_TX_CLK 0x180
				/* The RX_ER pin needs to be pull down */
				/* for this device */
				MX53_PAD_FEC_RX_ER__FEC_RX_ER 0x1c0
				MX53_PAD_FEC_CRS_DV__FEC_RX_DV 0x180
				>;
		};

		pinctrl_hog: hoggrp {
			fsl,pins = <
				/* PHY RESET */
				MX53_PAD_PATA_DA_0__GPIO7_6 0x182
				/* BOOSTER_OFF */
				MX53_PAD_EIM_CS0__GPIO2_23 0x1e4
				/* LCD BACKLIGHT */
				MX53_PAD_GPIO_1__GPIO1_1 0x1e4
				/* KEY1 GPIO */
				MX53_PAD_EIM_RW__GPIO2_26 0x1e4
				/* LED GREEN GPIO */
				MX53_PAD_EIM_WAIT__GPIO5_0 0x1e4
				/* LED RED GPIO */
				MX53_PAD_EIM_D28__GPIO3_28 0x1e4
			>;
		};

		pinctrl_i2c2: i2c2grp {
			fsl,pins = <
				MX53_PAD_KEY_ROW3__I2C2_SDA
						 (0x1ee | IMX_PAD_SION)
				MX53_PAD_KEY_COL3__I2C2_SCL
						 (0x1ee | IMX_PAD_SION)
			>;
		};

		pinctrl_i2c2_gpio: i2c2grpgpio {
			fsl,pins = <
				MX53_PAD_KEY_ROW3__GPIO4_13 0x1e4
				MX53_PAD_KEY_COL3__GPIO4_12 0x1e4
			>;
		};

		pinctrl_i2c3: i2c3grp {
			fsl,pins = <
				MX53_PAD_GPIO_6__I2C3_SDA (0x1ee | IMX_PAD_SION)
				MX53_PAD_GPIO_5__I2C3_SCL (0x1ee | IMX_PAD_SION)
			>;
		};

		pinctrl_i2c3_gpio: i2c3grpgpio {
			fsl,pins = <
				MX53_PAD_GPIO_6__GPIO1_6 0x1e4
				MX53_PAD_GPIO_5__GPIO1_5 0x1e4
			>;
		};

		pinctrl_uart2: uart2grp {
			fsl,pins = <
				MX53_PAD_PATA_BUFFER_EN__UART2_RXD_MUX 0x1e4
				MX53_PAD_PATA_DMARQ__UART2_TXD_MUX 0x1e4
			>;
		};

		pinctrl_usbh1: usbh1grp {
			fsl,pins = <
				/* VBUS_PWR_EN */
				MX53_PAD_PATA_DA_2__GPIO7_8 0x1e4
			>;
		};
	};
};

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

&usbh1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usbh1>;
	vbus-supply = <&reg_usbh1_vbus>;
	status = "okay";
};
