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

/dts-v1/;
#include "imx28.dtsi"

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

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

	apb@80000000 {
		apbh@80000000 {
			pinctrl@80018000 {
				ssd1306_cfa10036: ssd1306-10036@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_SSP0_DATA7__GPIO_2_7
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				led_pins_cfa10036: leds-10036@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_AUART1_RX__GPIO_3_4
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				usb0_otg_cfa10036: otg-10036@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_GPMI_RDY0__USB0_ID
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				mmc_pwr_cfa10036: mmc_pwr_cfa10036@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						0x31c3 /*
						MX28_PAD_PWM3__GPIO_3_28 */
					>;
					fsl,drive-strength = <0>;
					fsl,voltage = <1>;
					fsl,pull-up = <0>;
				};

			};

			ssp0: ssp@80010000 {
				compatible = "fsl,imx28-mmc";
				pinctrl-names = "default";
				pinctrl-0 = <&mmc0_4bit_pins_a
					&mmc0_cd_cfg &mmc0_sck_cfg>;
				vmmc-supply = <&reg_vddio_sd0>;
				bus-width = <4>;
				status = "okay";
			};
		};

		apbx@80040000 {
			duart: serial@80074000 {
				pinctrl-names = "default";
				pinctrl-0 = <&duart_pins_b>;
				status = "okay";
			};

			i2c0: i2c@80058000 {
				pinctrl-names = "default";
				pinctrl-0 = <&i2c0_pins_b>;
				clock-frequency = <400000>;
				status = "okay";

				ssd1306: oled@3c {
					compatible = "solomon,ssd1306fb-i2c";
					pinctrl-names = "default";
					pinctrl-0 = <&ssd1306_cfa10036>;
					reg = <0x3c>;
					reset-gpios = <&gpio2 7 0>;
					solomon,height = <32>;
					solomon,width = <128>;
					solomon,page-offset = <0>;
				};
			};

			usbphy0: usbphy@8007c000 {
				status = "okay";
			};
		};
	};

	ahb@80080000 {
		usb0: usb@80080000 {
			pinctrl-names = "default";
			pinctrl-0 = <&usb0_otg_cfa10036>;
			dr_mode = "peripheral";
			phy_type = "utmi";
			status = "okay";
		};
	};

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

		power {
			gpios = <&gpio3 4 1>;
			default-state = "on";
		};
	};

	reg_vddio_sd0: vddio-sd0 {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&mmc_pwr_cfa10036>;
		regulator-name = "vddio-sd0";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpio3 28 0>;
	};
};
