/*
 * Copyright 2012 Free Electrons
 *
 * 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
 */

/*
 * The CFA-10049 is an expansion board for the CFA-10036 module, thus we
 * need to include the CFA-10036 DTS.
 */
/include/ "imx28-cfa10036.dts"

/ {
	model = "Crystalfontz CFA-10049 Board";
	compatible = "crystalfontz,cfa10049", "crystalfontz,cfa10036", "fsl,imx28";

	apb@80000000 {
		apbh@80000000 {
			pinctrl@80018000 {
				pinctrl-names = "default", "default";
				pinctrl-1 = <&hog_pins_cfa10049>;

				hog_pins_cfa10049: hog-10049@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						0x0073 /* MX28_PAD_GPMI_D7__GPIO_0_7 */
						0x1163 /* MX28_PAD_LCD_D22__GPIO_1_22 */
						0x1173 /* MX28_PAD_LCD_D22__GPIO_1_23 */
						0x2153 /* MX28_PAD_SSP2_D5__GPIO_2_21 */
					>;
					fsl,drive-strength = <0>;
					fsl,voltage = <1>;
					fsl,pull-up = <0>;
				};

				spi3_pins_cfa10049: spi3-cfa10049@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						0x0181 /* MX28_PAD_GPMI_RDN__SSP3_SCK */
						0x01c1 /* MX28_PAD_GPMI_RESETN__SSP3_CMD */
						0x0111 /* MX28_PAD_GPMI_CE1N__SSP3_D3 */
						0x01a2 /* MX28_PAD_GPMI_ALE__SSP3_D4 */
						0x01b2 /* MX28_PAD_GPMI_CLE__SSP3_D5 */
					>;
					fsl,drive-strength = <1>;
					fsl,voltage = <1>;
					fsl,pull-up = <1>;
				};
			};

			ssp3: ssp@80016000 {
				compatible = "fsl,imx28-spi";
				pinctrl-names = "default";
				pinctrl-0 = <&spi3_pins_cfa10049>;
				status = "okay";

				gpio5: gpio5@0 {
					compatible = "fairchild,74hc595";
					gpio-controller;
					#gpio-cells = <2>;
					reg = <0>;
					registers-number = <2>;
					spi-max-frequency = <100000>;
				};

				gpio6: gpio6@1 {
					compatible = "fairchild,74hc595";
					gpio-controller;
					#gpio-cells = <2>;
					reg = <1>;
					registers-number = <4>;
					spi-max-frequency = <100000>;
				};

				dac0: dh2228@2 {
					compatible = "rohm,dh2228fv";
					reg = <2>;
					spi-max-frequency = <100000>;
				};
			};
		};

		apbx@80040000 {
			i2c1: i2c@8005a000 {
				pinctrl-names = "default";
				pinctrl-0 = <&i2c1_pins_a>;
				status = "okay";
			};

			i2cmux {
				compatible = "i2c-mux-gpio";
				#address-cells = <1>;
				#size-cells = <0>;
				mux-gpios = <&gpio1 22 0 &gpio1 23 0>;
				i2c-parent = <&i2c1>;

				i2c@0 {
					reg = <0>;
				};

				i2c@1 {
					reg = <1>;
				};

				i2c@2 {
					reg = <2>;
				};

				i2c@3 {
					reg = <3>;
				};
			};

			usbphy1: usbphy@8007e000 {
				status = "okay";
			};
		};
	};

	ahb@80080000 {
		usb1: usb@80090000 {
			vbus-supply = <&reg_usb1_vbus>;
			pinctrl-0 = <&usbphy1_pins_a>;
			pinctrl-names = "default";
			status = "okay";
		};
	};

	regulators {
		compatible = "simple-bus";

		reg_usb1_vbus: usb1_vbus {
			compatible = "regulator-fixed";
			regulator-name = "usb1_vbus";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			gpio = <&gpio0 7 1>;
		};
	};

	ahb@80080000 {
		mac0: ethernet@800f0000 {
			phy-mode = "rmii";
			pinctrl-names = "default";
			pinctrl-0 = <&mac0_pins_a>;
			phy-reset-gpios = <&gpio2 21 0>;
			phy-reset-duration = <100>;
			status = "okay";
		};
	};
};
