/*
 * 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>;
					solomon,com-lrremap;
					solomon,com-invdir;
					solomon,com-offset = <32>;
				};
			};

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