/*
 * 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";
		};
	};

	serial@13820000 {
		status = "okay";
	};

	serial@13830000 {
		status = "okay";
	};

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