/*
 * Hardkernel's Exynos4412 based ODROID-X board device tree source
 *
 * Copyright (c) 2012 Dongjin Kim <tobetter@gmail.com>
 *
 * Device tree source file for Hardkernel's ODROID-X board which is based
 * on Samsung's Exynos4412 SoC.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/

/dts-v1/;
#include "exynos4412-odroid-common.dtsi"

/ {
	model = "Hardkernel ODROID-X board based on Exynos4412";
	compatible = "hardkernel,odroid-x", "samsung,exynos4412", "samsung,exynos4";

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

	leds {
		compatible = "gpio-leds";
		led1 {
			label = "led1:heart";
			gpios = <&gpc1 0 1>;
			default-state = "on";
			linux,default-trigger = "heartbeat";
		};
		led2 {
			label = "led2:mmc0";
			gpios = <&gpc1 2 1>;
			default-state = "on";
			linux,default-trigger = "mmc0";
		};
	};

	gpio_keys {
		pinctrl-0 = <&gpio_power_key &gpio_home_key>;

		home_key {
			interrupt-parent = <&gpx2>;
			interrupts = <2 0>;
			gpios = <&gpx2 2 0>;
			linux,code = <KEY_HOME>;
			label = "home key";
			debounce-interval = <10>;
			gpio-key,wakeup;
		};
	};

	regulator_p3v3 {
		compatible = "regulator-fixed";
		regulator-name = "p3v3_en";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&gpa1 1 1>;
		enable-active-high;
		regulator-always-on;
	};
};

&ehci {
	port@1 {
		status = "okay";
	};
};

&pinctrl_1 {
	gpio_home_key: home_key {
		samsung,pins = "gpx2-2";
		samsung,pin-pud = <0>;
	};
};

&serial_2 {
	status = "okay";
};

&serial_3 {
	status = "okay";
};
