/*
 * Copyright 2012 Freescale Semiconductor, Inc.
 *
 * Author: Fabio Estevam <fabio.estevam@freescale.com>
 *
 * 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 <dt-bindings/gpio/gpio.h>
#include "imx23.dtsi"

/ {
	model = "i.MX23 Olinuxino Low Cost Board";
	compatible = "olimex,imx23-olinuxino", "fsl,imx23";

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

	apb@80000000 {
		apbh@80000000 {
			ssp0: ssp@80010000 {
				compatible = "fsl,imx23-mmc";
				pinctrl-names = "default";
				pinctrl-0 = <&mmc0_4bit_pins_a &mmc0_pins_fixup>;
				bus-width = <4>;
				broken-cd;
				status = "okay";
			};

			pinctrl@80018000 {
				pinctrl-names = "default";
				pinctrl-0 = <&hog_pins_a>;

				hog_pins_a: hog@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX23_PAD_GPMI_ALE__GPIO_0_17
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				led_pin_gpio2_1: led_gpio2_1@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX23_PAD_SSP1_DETECT__GPIO_2_1
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};
			};

			ssp1: ssp@80034000 {
				#address-cells = <1>;
				#size-cells = <0>;
				compatible = "fsl,imx23-spi";
				pinctrl-names = "default";
				pinctrl-0 = <&spi2_pins_a>;
				status = "okay";
			};
		};

		apbx@80040000 {
			lradc@80050000 {
				status = "okay";
			};

			i2c: i2c@80058000 {
				pinctrl-names = "default";
				pinctrl-0 = <&i2c_pins_b>;
				status = "okay";
			};

			duart: serial@80070000 {
				pinctrl-names = "default";
				pinctrl-0 = <&duart_pins_a>;
				status = "okay";
			};

			auart0: serial@8006c000 {
				pinctrl-names = "default";
				pinctrl-0 = <&auart0_2pins_a>;
				status = "okay";
			};

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

	ahb@80080000 {
		usb0: usb@80080000 {
			dr_mode = "host";
			vbus-supply = <&reg_usb0_vbus>;
			status = "okay";
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;

		reg_usb0_vbus: regulator@0 {
			compatible = "regulator-fixed";
			reg = <0>;
			regulator-name = "usb0_vbus";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			startup-delay-us = <300>; /* LAN9215 requires a POR of 200us minimum */
			gpio = <&gpio0 17 0>;
		};
	};

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

		user {
			label = "green";
			gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
		};
	};
};
