/*
 * Samsung's Exynos4210 based SMDKV310 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 Samsung's SMDKV310 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 = "Samsung smdkv310 evaluation board based on Exynos4210";
	compatible = "samsung,smdkv310", "samsung,exynos4210";

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

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

	keypad@100A0000 {
		samsung,keypad-num-rows = <2>;
		samsung,keypad-num-columns = <8>;
		linux,keypad-no-autorepeat;
		linux,keypad-wakeup;
		status = "okay";

		row-gpios = <&gpx2 0 3 3 0>,
			    <&gpx2 1 3 3 0>;

		col-gpios = <&gpx1 0 3 0 0>,
			    <&gpx1 1 3 0 0>,
			    <&gpx1 2 3 0 0>,
			    <&gpx1 3 3 0 0>,
			    <&gpx1 4 3 0 0>,
			    <&gpx1 5 3 0 0>,
			    <&gpx1 6 3 0 0>,
			    <&gpx1 7 3 0 0>;

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

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

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

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

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

		key_a {
			keypad,row = <1>;
			keypad,column = <3>;
			linux,code = <30>;
		};

		key_b {
			keypad,row = <1>;
			keypad,column = <4>;
			linux,code = <48>;
		};

		key_c {
			keypad,row = <1>;
			keypad,column = <5>;
			linux,code = <46>;
		};

		key_d {
			keypad,row = <1>;
			keypad,column = <6>;
			linux,code = <32>;
		};

		key_e {
			keypad,row = <1>;
			keypad,column = <7>;
			linux,code = <18>;
		};
	};

	i2c@13860000 {
		#address-cells = <1>;
		#size-cells = <0>;
		samsung,i2c-sda-delay = <100>;
		samsung,i2c-max-bus-freq = <20000>;
		gpios = <&gpd1 0 2 3 0>,
			<&gpd1 1 2 3 0>;
		status = "okay";

		eeprom@50 {
			compatible = "samsung,24ad0xd1";
			reg = <0x50>;
		};

		eeprom@52 {
			compatible = "samsung,24ad0xd1";
			reg = <0x52>;
		};
	};

	spi_2: spi@13940000 {
		gpios = <&gpc1 1 5 3 0>,
			<&gpc1 3 5 3 0>,
			<&gpc1 4 5 3 0>;
		status = "okay";

		w25x80@0 {
			#address-cells = <1>;
			#size-cells = <1>;
			compatible = "w25x80";
			reg = <0>;
			spi-max-frequency = <1000000>;

			controller-data {
				cs-gpio = <&gpc1 2 1 0 3>;
				samsung,spi-feedback-delay = <0>;
			};

			partition@0 {
				label = "U-Boot";
				reg = <0x0 0x40000>;
				read-only;
			};

			partition@40000 {
				label = "Kernel";
				reg = <0x40000 0xc0000>;
			};
		};
	};
};
