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

	soc {
		aips@50000000 { /* AIPS1 */
			spba@50000000 {
				esdhc@50004000 { /* ESDHC1 */
					pinctrl-names = "default";
					pinctrl-0 = <&pinctrl_esdhc1_1>;
					cd-gpios = <&gpio3 13 0>;
					status = "okay";
				};

				ssi2: ssi@50014000 {
					fsl,mode = "i2s-slave";
					status = "okay";
				};

				esdhc@50020000 { /* ESDHC3 */
					pinctrl-names = "default";
					pinctrl-0 = <&pinctrl_esdhc3_1>;
					cd-gpios = <&gpio3 11 0>;
					wp-gpios = <&gpio3 12 0>;
					status = "okay";
				};
			};

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

				hog {
					pinctrl_hog: hoggrp {
						fsl,pins = <
							1071 0x80000000	/* MX53_PAD_GPIO_0__CCM_SSI_EXT1_CLK */
							1141 0x80000000	/* MX53_PAD_GPIO_8__GPIO1_8 */
							982  0x80000000	/* MX53_PAD_PATA_DATA14__GPIO2_14 */
							989  0x80000000	/* MX53_PAD_PATA_DATA15__GPIO2_15 */
							693  0x80000000	/* MX53_PAD_EIM_DA11__GPIO3_11 */
							697  0x80000000	/* MX53_PAD_EIM_DA12__GPIO3_12 */
							701  0x80000000	/* MX53_PAD_EIM_DA13__GPIO3_13 */
							868  0x80000000	/* MX53_PAD_PATA_DA_0__GPIO7_6 */
							873  0x80000000	/* MX53_PAD_PATA_DA_1__GPIO7_7 */
						>;
					};
				};
			};

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

		aips@60000000 {	/* AIPS2 */
			i2c@63fc4000 { /* 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>;
				};
			};

			i2c@63fc8000 { /* 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>;

					regulators {
						buck0 {
							regulator-min-microvolt = <500000>;
							regulator-max-microvolt = <2075000>;
						};

						buck1 {
							regulator-min-microvolt = <500000>;
							regulator-max-microvolt = <2075000>;
						};

						buck2 {
							regulator-min-microvolt = <925000>;
					                regulator-max-microvolt = <2500000>;
						};

						buck3 {
							regulator-min-microvolt = <925000>;
					                regulator-max-microvolt = <2500000>;
						};

						ldo4 {
							regulator-min-microvolt = <600000>;
							regulator-max-microvolt = <1800000>;
						};

						ldo5 {
							regulator-min-microvolt = <600000>;
					                regulator-max-microvolt = <1800000>;
						};

						ldo6 {
							regulator-min-microvolt = <1725000>;
					                regulator-max-microvolt = <3300000>;
						};

						ldo7 {
							regulator-min-microvolt = <1725000>;
					                regulator-max-microvolt = <3300000>;
						};

						ldo8 {
							regulator-min-microvolt = <1200000>;
					                regulator-max-microvolt = <3600000>;
						};

						ldo9 {
							regulator-min-microvolt = <1200000>;
					                regulator-max-microvolt = <3600000>;
						};

						ldo10 {
							regulator-min-microvolt = <1200000>;
					                regulator-max-microvolt = <3600000>;
						};

						ldo11 {
							regulator-min-microvolt = <1200000>;
					                regulator-max-microvolt = <3600000>;
						};

						ldo12 {
							regulator-min-microvolt = <1250000>;
					                regulator-max-microvolt = <3650000>;
						};

						ldo13 {
							regulator-min-microvolt = <1200000>;
					                regulator-max-microvolt = <3600000>;
						};
					};
				};
			};

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

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

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

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