/*
 * Samsung's Exynos4210 based Origen board device tree source
 *
 * Copyright (c) 2010-2011 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
 * Copyright (c) 2010-2011 Linaro Ltd.
 *		www.linaro.org
 *
 * Device tree source file for Insignal's Origen board which is based on
 * Samsung's Exynos4210 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/ "exynos4210.dtsi"

/ {
	model = "Insignal Origen evaluation board based on Exynos4210";
	compatible = "insignal,origen", "samsung,exynos4210";

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

	chosen {
		bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC2,115200 init=/linuxrc";
	};

	sdhci@12530000 {
		samsung,sdhci-bus-width = <4>;
		linux,mmc_cap_4_bit_data;
		samsung,sdhci-cd-internal;
		gpio-cd = <&gpk2 2 2 3 3>;
		gpios = <&gpk2 0 2 0 3>,
			<&gpk2 1 2 0 3>,
			<&gpk2 3 2 3 3>,
			<&gpk2 4 2 3 3>,
			<&gpk2 5 2 3 3>,
			<&gpk2 6 2 3 3>;
		status = "okay";
	};

	sdhci@12510000 {
		samsung,sdhci-bus-width = <4>;
		linux,mmc_cap_4_bit_data;
		samsung,sdhci-cd-internal;
		gpio-cd = <&gpk0 2 2 3 3>;
		gpios = <&gpk0 0 2 0 3>,
			<&gpk0 1 2 0 3>,
			<&gpk0 3 2 3 3>,
			<&gpk0 4 2 3 3>,
			<&gpk0 5 2 3 3>,
			<&gpk0 6 2 3 3>;
		status = "okay";
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;

		up {
			label = "Up";
			gpios = <&gpx2 0 0 0x10000 2>;
			linux,code = <103>;
			gpio-key,wakeup;
		};

		down {
			label = "Down";
			gpios = <&gpx2 1 0 0x10000 2>;
			linux,code = <108>;
			gpio-key,wakeup;
		};

		back {
			label = "Back";
			gpios = <&gpx1 7 0 0x10000 2>;
			linux,code = <158>;
			gpio-key,wakeup;
		};

		home {
			label = "Home";
			gpios = <&gpx1 6 0 0x10000 2>;
			linux,code = <102>;
			gpio-key,wakeup;
		};

		menu {
			label = "Menu";
			gpios = <&gpx1 5 0 0x10000 2>;
			linux,code = <139>;
			gpio-key,wakeup;
		};
	};

	leds {
		compatible = "gpio-leds";
		status {
			gpios = <&gpx1 3 0 0x10000 2>;
			linux,default-trigger = "heartbeat";
		};
	};
};
