/*
 * Copyright 2011 Freescale Semiconductor, Inc.
 * Copyright 2011 Linaro Ltd.
 *
 * 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 = "Freescale i.MX53 Automotive Reference Design Board";
	compatible = "fsl,imx53-ard", "fsl,imx53";

	memory {
		reg = <0x70000000 0x40000000>;
	};

	soc {
		aips@50000000 { /* AIPS1 */
			spba@50000000 {
				esdhc@50004000 { /* ESDHC1 */
					pinctrl-names = "default";
					pinctrl-0 = <&pinctrl_esdhc1_2>;
					cd-gpios = <&gpio1 1 0>;
					wp-gpios = <&gpio1 9 0>;
					status = "okay";
				};
			};

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

				hog {
					pinctrl_hog: hoggrp {
						fsl,pins = <
							1077 0x80000000	/* MX53_PAD_GPIO_1__GPIO1_1 */
							1085 0x80000000	/* MX53_PAD_GPIO_9__GPIO1_9 */
							486  0x80000000	/* MX53_PAD_EIM_EB3__GPIO2_31 */
							739  0x80000000	/* MX53_PAD_GPIO_10__GPIO4_0 */
							218  0x80000000	/* MX53_PAD_DISP0_DAT16__GPIO5_10 */
							226  0x80000000	/* MX53_PAD_DISP0_DAT17__GPIO5_11 */
							233  0x80000000	/* MX53_PAD_DISP0_DAT18__GPIO5_12 */
							241  0x80000000	/* MX53_PAD_DISP0_DAT19__GPIO5_13 */
							429  0x80000000	/* MX53_PAD_EIM_D16__EMI_WEIM_D_16 */
							435  0x80000000	/* MX53_PAD_EIM_D17__EMI_WEIM_D_17 */
							441  0x80000000	/* MX53_PAD_EIM_D18__EMI_WEIM_D_18 */
							448  0x80000000	/* MX53_PAD_EIM_D19__EMI_WEIM_D_19 */
							456  0x80000000	/* MX53_PAD_EIM_D20__EMI_WEIM_D_20 */
							464  0x80000000	/* MX53_PAD_EIM_D21__EMI_WEIM_D_21 */
							471  0x80000000	/* MX53_PAD_EIM_D22__EMI_WEIM_D_22 */
							477  0x80000000	/* MX53_PAD_EIM_D23__EMI_WEIM_D_23 */
							492  0x80000000	/* MX53_PAD_EIM_D24__EMI_WEIM_D_24 */
							500  0x80000000	/* MX53_PAD_EIM_D25__EMI_WEIM_D_25 */
							508  0x80000000	/* MX53_PAD_EIM_D26__EMI_WEIM_D_26 */
							516  0x80000000	/* MX53_PAD_EIM_D27__EMI_WEIM_D_27 */
							524  0x80000000	/* MX53_PAD_EIM_D28__EMI_WEIM_D_28 */
							532  0x80000000	/* MX53_PAD_EIM_D29__EMI_WEIM_D_29 */
							540  0x80000000	/* MX53_PAD_EIM_D30__EMI_WEIM_D_30 */
							548  0x80000000	/* MX53_PAD_EIM_D31__EMI_WEIM_D_31 */
							637  0x80000000	/* MX53_PAD_EIM_DA0__EMI_NAND_WEIM_DA_0 */
							642  0x80000000	/* MX53_PAD_EIM_DA1__EMI_NAND_WEIM_DA_1 */
							647  0x80000000	/* MX53_PAD_EIM_DA2__EMI_NAND_WEIM_DA_2 */
							652  0x80000000	/* MX53_PAD_EIM_DA3__EMI_NAND_WEIM_DA_3 */
							657  0x80000000	/* MX53_PAD_EIM_DA4__EMI_NAND_WEIM_DA_4 */
							662  0x80000000	/* MX53_PAD_EIM_DA5__EMI_NAND_WEIM_DA_5 */
							667  0x80000000	/* MX53_PAD_EIM_DA6__EMI_NAND_WEIM_DA_6 */
							611  0x80000000	/* MX53_PAD_EIM_OE__EMI_WEIM_OE */
							616  0x80000000	/* MX53_PAD_EIM_RW__EMI_WEIM_RW */
							607  0x80000000	/* MX53_PAD_EIM_CS1__EMI_WEIM_CS_1 */
						>;
					};
				};
			};

			uart1: serial@53fbc000 {
				pinctrl-names = "default";
				pinctrl-0 = <&pinctrl_uart1_2>;
				status = "okay";
			};
		};
	};

	eim-cs1@f4000000 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "fsl,eim-bus", "simple-bus";
		reg = <0xf4000000 0x3ff0000>;
		ranges;

		lan9220@f4000000 {
			compatible = "smsc,lan9220", "smsc,lan9115";
			reg = <0xf4000000 0x2000000>;
			phy-mode = "mii";
			interrupt-parent = <&gpio2>;
			interrupts = <31 0x8>;
			reg-io-width = <4>;
			/*
			 * VDD33A and VDDVARIO of LAN9220 are supplied by
			 * SW4_3V3 of LTC3589.  Before the regulator driver
			 * for this PMIC is available, we use a fixed dummy
			 * 3V3 regulator to get LAN9220 driver probing work.
			 */
			vdd33a-supply = <&reg_3p3v>;
			vddvario-supply = <&reg_3p3v>;
			smsc,irq-push-pull;
		};
	};

	regulators {
		compatible = "simple-bus";

		reg_3p3v: 3p3v {
			compatible = "regulator-fixed";
			regulator-name = "3P3V";
			regulator-min-microvolt = <3300000>;
			regulator-max-microvolt = <3300000>;
			regulator-always-on;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		home {
			label = "Home";
			gpios = <&gpio5 10 0>;
			linux,code = <102>; /* KEY_HOME */
			gpio-key,wakeup;
		};

		back {
			label = "Back";
			gpios = <&gpio5 11 0>;
			linux,code = <158>; /* KEY_BACK */
			gpio-key,wakeup;
		};

		program {
			label = "Program";
			gpios = <&gpio5 12 0>;
			linux,code = <362>; /* KEY_PROGRAM */
			gpio-key,wakeup;
		};

		volume-up {
			label = "Volume Up";
			gpios = <&gpio5 13 0>;
			linux,code = <115>; /* KEY_VOLUMEUP */
		};

		volume-down {
			label = "Volume Down";
			gpios = <&gpio4 0 0>;
			linux,code = <114>; /* KEY_VOLUMEDOWN */
		};
	};
};
