/*
 * Samsung's Exynos4412 based SMDK board device tree source
 *
 * Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
 *
 * Device tree source file for Samsung's SMDK4412 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.dtsi"

/ {
	model = "Samsung SMDK evaluation board based on Exynos4412";
	compatible = "samsung,smdk4412", "samsung,exynos4412", "samsung,exynos4";

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

	chosen {
		bootargs ="root=/dev/ram0 rw ramdisk=8192 initrd=0x41000000,8M console=ttySAC1,115200 init=/linuxrc";
		stdout-path = &serial_1;
	};

	fixed-rate-clocks {
		xxti {
			compatible = "samsung,clock-xxti";
			clock-frequency = <0>;
		};

		xusbxti {
			compatible = "samsung,clock-xusbxti";
			clock-frequency = <24000000>;
		};
	};
};

&keypad {
	samsung,keypad-num-rows = <3>;
	samsung,keypad-num-columns = <8>;
	linux,keypad-no-autorepeat;
	wakeup-source;
	pinctrl-0 = <&keypad_rows &keypad_cols>;
	pinctrl-names = "default";
	status = "okay";

	key_1 {
		keypad,row = <1>;
		keypad,column = <3>;
		linux,code = <2>;
	};

	key_2 {
		keypad,row = <1>;
		keypad,column = <4>;
		linux,code = <3>;
	};

	key_3 {
		keypad,row = <1>;
		keypad,column = <5>;
		linux,code = <4>;
	};

	key_4 {
		keypad,row = <1>;
		keypad,column = <6>;
		linux,code = <5>;
	};

	key_5 {
		keypad,row = <1>;
		keypad,column = <7>;
		linux,code = <6>;
	};

	key_A {
		keypad,row = <2>;
		keypad,column = <6>;
		linux,code = <30>;
	};

	key_B {
		keypad,row = <2>;
		keypad,column = <7>;
		linux,code = <48>;
	};

	key_C {
		keypad,row = <0>;
		keypad,column = <5>;
		linux,code = <46>;
	};

	key_D {
		keypad,row = <2>;
		keypad,column = <5>;
		linux,code = <32>;
	};

	key_E {
		keypad,row = <0>;
		keypad,column = <7>;
		linux,code = <18>;
	};
};

&mfc {
	samsung,mfc-r = <0x43000000 0x800000>;
	samsung,mfc-l = <0x51000000 0x800000>;
	status = "okay";
};

&pinctrl_1 {
	keypad_rows: keypad-rows {
		samsung,pins = "gpx2-0", "gpx2-1", "gpx2-2";
		samsung,pin-function = <3>;
		samsung,pin-pud = <3>;
		samsung,pin-drv = <0>;
	};

	keypad_cols: keypad-cols {
		samsung,pins = "gpx1-0", "gpx1-1", "gpx1-2", "gpx1-3",
			       "gpx1-4", "gpx1-5", "gpx1-6", "gpx1-7";
		samsung,pin-function = <3>;
		samsung,pin-pud = <0>;
		samsung,pin-drv = <0>;
	};
};

&sdhci_2 {
	bus-width = <4>;
	pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_bus4 &sd2_cd>;
	pinctrl-names = "default";
	status = "okay";
};

&serial_0 {
	status = "okay";
};

&serial_1 {
	status = "okay";
};

&serial_2 {
	status = "okay";
};

&serial_3 {
	status = "okay";
};
