/*
 * Copyright (C) 2012 Texas Instruments Incorporated - http://www.ti.com/
 *
 * 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/ "omap5.dtsi"
/include/ "samsung_k3pe0e000b.dtsi"

/ {
	model = "TI OMAP5 EVM board";
	compatible = "ti,omap5-evm", "ti,omap5";

	memory {
		device_type = "memory";
		reg = <0x80000000 0x80000000>; /* 2 GB */
	};

	vmmcsd_fixed: fixedregulator-mmcsd {
		compatible = "regulator-fixed";
		regulator-name = "vmmcsd_fixed";
		regulator-min-microvolt = <3000000>;
		regulator-max-microvolt = <3000000>;
	};

};

&omap5_pmx_core {
	pinctrl-names = "default";
	pinctrl-0 = <
			&twl6040_pins
			&mcpdm_pins
			&dmic_pins
			&mcbsp1_pins
			&mcbsp2_pins
	>;

	twl6040_pins: pinmux_twl6040_pins {
		pinctrl-single,pins = <
			0x18a 0x6	/* perslimbus2_clock.gpio5_145 OUTPUT | MODE6 */
		>;
	};

	mcpdm_pins: pinmux_mcpdm_pins {
		pinctrl-single,pins = <
			0x142 0x108	/* abe_clks.abe_clks INPUT PULLDOWN | MODE0 */
			0x15c 0x108	/* abemcpdm_ul_data.abemcpdm_ul_data INPUT PULLDOWN | MODE0 */
			0x15e 0x108	/* abemcpdm_dl_data.abemcpdm_dl_data INPUT PULLDOWN | MODE0 */
			0x160 0x118	/* abemcpdm_frame.abemcpdm_frame INPUT PULLUP | MODE0 */
			0x162 0x108	/* abemcpdm_lb_clk.abemcpdm_lb_clk INPUT PULLDOWN | MODE0 */
		>;
	};

	dmic_pins: pinmux_dmic_pins {
		pinctrl-single,pins = <
			0x144 0x100	/* abedmic_din1.abedmic_din1 INPUT | MODE0 */
			0x146 0x100	/* abedmic_din2.abedmic_din2 INPUT | MODE0 */
			0x148 0x100	/* abedmic_din3.abedmic_din3 INPUT | MODE0 */
			0x14a 0		/* abedmic_clk1.abedmic_clk1 OUTPUT | MODE0 */
		>;
	};

	mcbsp1_pins: pinmux_mcbsp1_pins {
		pinctrl-single,pins = <
			0x14c 0x101	/* abedmic_clk2.abemcbsp1_fsx INPUT | MODE1 */
			0x14e 0x9	/* abedmic_clk3.abemcbsp1_dx OUTPUT PULLDOWN | MODE1 */
			0x150 0x101	/* abeslimbus1_clock.abemcbsp1_clkx INPUT | MODE0 */
			0x152 0x109	/* abeslimbus1_data.abemcbsp1_dr INPUT PULLDOWN | MODE1 */
		>;
	};

	mcbsp2_pins: pinmux_mcbsp2_pins {
		pinctrl-single,pins = <
			0x154 0x108	/* abemcbsp2_dr.abemcbsp2_dr INPUT PULLDOWN | MODE0 */
			0x156 0x8	/* abemcbsp2_dx.abemcbsp2_dx OUTPUT PULLDOWN | MODE0 */
			0x158 0x100	/* abemcbsp2_fsx.abemcbsp2_fsx INPUT | MODE0 */
			0x15a 0x100	/* abemcbsp2_clkx.abemcbsp2_clkx INPUT | MODE0 */
		>;
	};
};

&mmc1 {
	vmmc-supply = <&vmmcsd_fixed>;
	bus-width = <4>;
};

&mmc2 {
	vmmc-supply = <&vmmcsd_fixed>;
	bus-width = <8>;
	ti,non-removable;
};

&mmc3 {
	bus-width = <4>;
	ti,non-removable;
};

&mmc4 {
	status = "disabled";
};

&mmc5 {
	status = "disabled";
};

&i2c2 {
	clock-frequency = <400000>;

	/* Pressure Sensor */
	bmp085@77 {
		compatible = "bosch,bmp085";
		reg = <0x77>;
	};
};

&i2c4 {
	clock-frequency = <400000>;

	/* Temperature Sensor */
	tmp102@48{
		compatible = "ti,tmp102";
		reg = <0x48>;
	};
};

&keypad {
	keypad,num-rows = <8>;
	keypad,num-columns = <8>;
	linux,keymap = <0x02020073	/* VOLUP */
			0x02030072	/* VOLDOWM */
			0x020400e7	/* SEND */
			0x02050066	/* HOME */
			0x0206006b	/* END */
			0x020700d9>;	/* SEARCH */
	linux,input-no-autorepeat;
};

&mcbsp3 {
	status = "disabled";
};

&emif1 {
	cs1-used;
	device-handle = <&samsung_K3PE0E000B>;
};

&emif2 {
	cs1-used;
	device-handle = <&samsung_K3PE0E000B>;
};
