/*
 * 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 Quick Start Board";
	compatible = "fsl,imx53-qsb", "fsl,imx53";

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

	display@di0 {
		compatible = "fsl,imx-parallel-display";
		crtcs = <&ipu 0>;
		interface-pix-fmt = "rgb565";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_ipu_disp0_1>;
		status = "disabled";
		display-timings {
			claawvga {
				native-mode;
				clock-frequency = <27000000>;
				hactive = <800>;
				vactive = <480>;
				hback-porch = <40>;
				hfront-porch = <60>;
				vback-porch = <10>;
				vfront-porch = <10>;
				hsync-len = <20>;
				vsync-len = <10>;
				hsync-active = <0>;
				vsync-active = <0>;
				de-active = <1>;
				pixelclk-active = <0>;
			};
		};
	};

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

		power {
			label = "Power Button";
			gpios = <&gpio1 8 0>;
			linux,code = <116>; /* KEY_POWER */
			gpio-key,wakeup;
		};

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

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

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

		user {
			label = "Heartbeat";
			gpios = <&gpio7 7 0>;
			linux,default-trigger = "heartbeat";
		};
	};

	regulators {
		compatible = "simple-bus";

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

	sound {
		compatible = "fsl,imx53-qsb-sgtl5000",
			     "fsl,imx-audio-sgtl5000";
		model = "imx53-qsb-sgtl5000";
		ssi-controller = <&ssi2>;
		audio-codec = <&sgtl5000>;
		audio-routing =
			"MIC_IN", "Mic Jack",
			"Mic Jack", "Mic Bias",
			"Headphone Jack", "HP_OUT";
		mux-int-port = <2>;
		mux-ext-port = <5>;
	};
};

&esdhc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc1_1>;
	cd-gpios = <&gpio3 13 0>;
	status = "okay";
};

&ssi2 {
	fsl,mode = "i2s-slave";
	status = "okay";
};

&esdhc3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esdhc3_1>;
	cd-gpios = <&gpio3 11 0>;
	wp-gpios = <&gpio3 12 0>;
	status = "okay";
};

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

	hog {
		pinctrl_hog: hoggrp {
			fsl,pins = <
				MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK 0x80000000
				MX53_PAD_GPIO_8__GPIO1_8          0x80000000
				MX53_PAD_PATA_DATA14__GPIO2_14    0x80000000
				MX53_PAD_PATA_DATA15__GPIO2_15    0x80000000
				MX53_PAD_EIM_DA11__GPIO3_11       0x80000000
				MX53_PAD_EIM_DA12__GPIO3_12       0x80000000
				MX53_PAD_EIM_DA13__GPIO3_13       0x80000000
				MX53_PAD_PATA_DA_0__GPIO7_6       0x80000000
				MX53_PAD_GPIO_16__GPIO7_11        0x80000000
			>;
		};

		led_pin_gpio7_7: led_gpio7_7@0 {
			fsl,pins = <
				MX53_PAD_PATA_DA_1__GPIO7_7 0x80000000
			>;
		};
	};

};

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart1_1>;
	status = "okay";
};

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

	sgtl5000: codec@0a {
		compatible = "fsl,sgtl5000";
		reg = <0x0a>;
		VDDA-supply = <&reg_3p2v>;
		VDDIO-supply = <&reg_3p2v>;
		clocks = <&clks 150>;
	};
};

&i2c1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c1_1>;
	status = "okay";

	accelerometer: mma8450@1c {
		compatible = "fsl,mma8450";
		reg = <0x1c>;
	};

	pmic: dialog@48 {
		compatible = "dlg,da9053-aa", "dlg,da9052";
		reg = <0x48>;
		interrupt-parent = <&gpio7>;
		interrupts = <11 0x8>; /* low-level active IRQ at GPIO7_11 */

		regulators {
			buck1_reg: buck1 {
				regulator-min-microvolt = <500000>;
				regulator-max-microvolt = <2075000>;
				regulator-always-on;
			};

			buck2_reg: buck2 {
				regulator-min-microvolt = <500000>;
				regulator-max-microvolt = <2075000>;
				regulator-always-on;
			};

			buck3_reg: buck3 {
				regulator-min-microvolt = <925000>;
				regulator-max-microvolt = <2500000>;
				regulator-always-on;
			};

			buck4_reg: buck4 {
				regulator-min-microvolt = <925000>;
				regulator-max-microvolt = <2500000>;
				regulator-always-on;
			};

			ldo1_reg: ldo1 {
				regulator-min-microvolt = <600000>;
				regulator-max-microvolt = <1800000>;
				regulator-boot-on;
				regulator-always-on;
			};

			ldo2_reg: ldo2 {
				regulator-min-microvolt = <600000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
			};

			ldo3_reg: ldo3 {
				regulator-min-microvolt = <600000>;
				regulator-max-microvolt = <1800000>;
				regulator-always-on;
			};

			ldo4_reg: ldo4 {
				regulator-min-microvolt = <1725000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			ldo5_reg: ldo5 {
				regulator-min-microvolt = <1725000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			ldo6_reg: ldo6 {
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <3600000>;
				regulator-always-on;
			};

			ldo7_reg: ldo7 {
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <3600000>;
				regulator-always-on;
			};

			ldo8_reg: ldo8 {
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <3600000>;
				regulator-always-on;
			};

			ldo9_reg: ldo9 {
				regulator-min-microvolt = <1200000>;
				regulator-max-microvolt = <3600000>;
				regulator-always-on;
			};

			ldo10_reg: ldo10 {
				regulator-min-microvolt = <1250000>;
				regulator-max-microvolt = <3650000>;
				regulator-always-on;
			};
		};
	};
};

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

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

&usbh1 {
       status = "okay";
};

&usbotg {
       status = "okay";
};
