/*
 * 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 0x7F000000>; /* 2032 MB */
	};

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

        i2c1_pins: pinmux_i2c1_pins {
                pinctrl-single,pins = <
                        0x1b2 0x118        /* i2c1_scl PULLUP | INPUTENABLE | MODE0 */
                        0x1b4 0x118        /* i2c1_sda PULLUP | INPUTENABLE | MODE0 */
                >;
        };

	i2c2_pins: pinmux_i2c2_pins {
		pinctrl-single,pins = <
			0x178 0x100        /* i2c2_scl INPUTENABLE | MODE0 */
			0x17a 0x100        /* i2c2_sda INPUTENABLE | MODE0 */
		>;
	};

	i2c3_pins: pinmux_i2c3_pins {
		pinctrl-single,pins = <
			0x13a 0x100        /* i2c3_scl INPUTENABLE | MODE0 */
			0x13c 0x100     /* i2c3_sda INPUTENABLE | MODE0 */
		>;
	};

	i2c4_pins: pinmux_i2c4_pins {
		pinctrl-single,pins = <
			0xb8 0x100        /* i2c4_scl INPUTENABLE | MODE0 */
			0xba 0x100     /* i2c4_sda INPUTENABLE | MODE0 */
		>;
	};

	i2c5_pins: pinmux_i2c5_pins {
		pinctrl-single,pins = <
			0x184 0x100        /* i2c5_scl INPUTENABLE | MODE0 */
			0x186 0x100     /* i2c5_sda INPUTENABLE | MODE0 */
		>;
	};

	mcspi2_pins: pinmux_mcspi2_pins {
		pinctrl-single,pins = <
			0xbc 0x100	/*  MCSPI2_CLK INPUTENABLE | MODE0 */
			0xbe 0x100	/*  MCSPI2_SIMO INPUTENABLE | MODE0 */
			0xc0 0x118	/*  MCSPI2_SOMI PULLUP | INPUTENABLE | MODE0*/
			0xc2 0x0	/*  MCSPI2_CS MODE0*/
		>;
	};

	mcspi3_pins: pinmux_mcspi3_pins {
		pinctrl-single,pins = <
			0x78 0x101	/*  MCSPI2_SOMI INPUTENABLE | MODE1 */
			0x7a 0x101	/*  MCSPI2_CS INPUTENABLE | MODE1 */
			0x7c 0x101	/*  MCSPI2_SIMO INPUTENABLE | MODE1 */
			0x7e 0x101	/*  MCSPI2_CLK INPUTENABLE | MODE1 */
		>;
	};

	mcspi4_pins: pinmux_mcspi4_pins {
		pinctrl-single,pins = <
			0x164 0x101	/*  MCSPI2_CLK INPUTENABLE | MODE1 */
			0x168 0x101	/*  MCSPI2_SIMO INPUTENABLE | MODE1 */
			0x16a 0x101	/*  MCSPI2_SOMI INPUTENABLE | MODE1 */
			0x16c 0x101	/*  MCSPI2_CS INPUTENABLE | MODE1 */
		>;
	};
};

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

&i2c1 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c1_pins>;

	clock-frequency = <400000>;
};

&i2c2 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c2_pins>;

	clock-frequency = <400000>;

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

&i2c3 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c3_pins>;

	clock-frequency = <400000>;
};

&i2c4 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c4_pins>;

	clock-frequency = <400000>;

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

&i2c5 {
	pinctrl-names = "default";
	pinctrl-0 = <&i2c5_pins>;

	clock-frequency = <400000>;
};

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

&mcspi1 {

};

&mcspi2 {
	pinctrl-names = "default";
	pinctrl-0 = <&mcspi2_pins>;
};

&mcspi3 {
	pinctrl-names = "default";
	pinctrl-0 = <&mcspi3_pins>;
};

&mcspi4 {
	pinctrl-names = "default";
	pinctrl-0 = <&mcspi4_pins>;
};
