/*
 * Copyright (C) 2011-2013 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.
 */
/include/ "elpida_ecb240abacn.dtsi"

/ {
	model = "TI OMAP4 PandaBoard";
	compatible = "ti,omap4-panda", "ti,omap4430", "ti,omap4";

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

	leds {
		compatible = "gpio-leds";
		heartbeat {
			label = "pandaboard::status1";
			gpios = <&gpio1 7 0>;
			linux,default-trigger = "heartbeat";
		};

		mmc {
			label = "pandaboard::status2";
			gpios = <&gpio1 8 0>;
			linux,default-trigger = "mmc0";
		};
	};

	sound: sound {
		compatible = "ti,abe-twl6040";
		ti,model = "PandaBoard";

		ti,mclk-freq = <38400000>;

		ti,mcpdm = <&mcpdm>;

		ti,twl6040 = <&twl6040>;

		/* Audio routing */
		ti,audio-routing =
			"Headset Stereophone", "HSOL",
			"Headset Stereophone", "HSOR",
			"Ext Spk", "HFL",
			"Ext Spk", "HFR",
			"Line Out", "AUXL",
			"Line Out", "AUXR",
			"HSMIC", "Headset Mic",
			"Headset Mic", "Headset Mic Bias",
			"AFML", "Line In",
			"AFMR", "Line In";
	};
};

&omap4_pmx_wkup {
	pinctrl-names = "default";
	pinctrl-0 = <
			&twl6030_wkup_pins
	>;

	twl6030_wkup_pins: pinmux_twl6030_wkup_pins {
		pinctrl-single,pins = <
			0x14 0x2        /* fref_clk0_out.sys_drm_msecure OUTPUT | MODE2 */
		>;
	};
};

&omap4_pmx_core {
	pinctrl-names = "default";
	pinctrl-0 = <
			&twl6030_pins
			&twl6040_pins
			&mcpdm_pins
			&mcbsp1_pins
			&dss_hdmi_pins
			&tpd12s015_pins
	>;

	twl6030_pins: pinmux_twl6030_pins {
		pinctrl-single,pins = <
			0x15e 0x4118	/* sys_nirq1.sys_nirq1 OMAP_WAKEUP_EN | INPUT_PULLUP | MODE0 */
		>;
	};

	twl6040_pins: pinmux_twl6040_pins {
		pinctrl-single,pins = <
			0xe0 0x3	/* hdq_sio.gpio_127 OUTPUT | MODE3 */
			0x160 0x100	/* sys_nirq2.sys_nirq2 INPUT | MODE0 */
		>;
	};

	mcpdm_pins: pinmux_mcpdm_pins {
		pinctrl-single,pins = <
			0xc6 0x108	/* abe_pdm_ul_data.abe_pdm_ul_data INPUT PULLDOWN | MODE0 */
			0xc8 0x108	/* abe_pdm_dl_data.abe_pdm_dl_data INPUT PULLDOWN | MODE0 */
			0xca 0x118	/* abe_pdm_frame.abe_pdm_frame INPUT PULLUP | MODE0 */
			0xcc 0x108	/* abe_pdm_lb_clk.abe_pdm_lb_clk INPUT PULLDOWN | MODE0 */
			0xce 0x108	/* abe_clks.abe_clks INPUT PULLDOWN | MODE0 */
		>;
	};

	mcbsp1_pins: pinmux_mcbsp1_pins {
		pinctrl-single,pins = <
			0xbe 0x100	/* abe_mcbsp1_clkx.abe_mcbsp1_clkx INPUT | MODE0 */
			0xc0 0x108	/* abe_mcbsp1_dr.abe_mcbsp1_dr INPUT PULLDOWN | MODE0 */
			0xc2 0x8		/* abe_mcbsp1_dx.abe_mcbsp1_dx OUTPUT PULLDOWN | MODE0 */
			0xc4 0x100	/* abe_mcbsp1_fsx.abe_mcbsp1_fsx INPUT | MODE0 */
		>;
	};

	dss_hdmi_pins: pinmux_dss_hdmi_pins {
		pinctrl-single,pins = <
			0x5a 0x118	/* hdmi_cec.hdmi_cec INPUT PULLUP | MODE 0 */
			0x5c 0x118	/* hdmi_scl.hdmi_scl INPUT PULLUP | MODE 0 */
			0x5e 0x118	/* hdmi_sda.hdmi_sda INPUT PULLUP | MODE 0 */
		>;
	};

	tpd12s015_pins: pinmux_tpd12s015_pins {
		pinctrl-single,pins = <
			0x22 0x3	/* gpmc_a17.gpio_41 OUTPUT | MODE3 */
			0x48 0x3	/* gpmc_nbe1.gpio_60 OUTPUT | MODE3 */
			0x58 0x10b	/* hdmi_hpd.gpio_63 INPUT PULLDOWN | MODE3 */
		>;
	};

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

	i2c2_pins: pinmux_i2c2_pins {
		pinctrl-single,pins = <
			0xe6 0x118        /* i2c2_scl PULLUP | INPUTENABLE | MODE0 */
			0xe8 0x118        /* i2c2_sda PULLUP | INPUTENABLE | MODE0 */
		>;
	};

	i2c3_pins: pinmux_i2c3_pins {
		pinctrl-single,pins = <
			0xea 0x118        /* i2c3_scl PULLUP | INPUTENABLE | MODE0 */
			0xec 0x118     /* i2c3_sda PULLUP | INPUTENABLE | MODE0 */
		>;
	};

	i2c4_pins: pinmux_i2c4_pins {
		pinctrl-single,pins = <
			0xee 0x118        /* i2c4_scl PULLUP | INPUTENABLE | MODE0 */
			0xf0 0x118     /* i2c4_sda PULLUP | INPUTENABLE | MODE0 */
		>;
	};
};

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

	clock-frequency = <400000>;

	twl: twl@48 {
		reg = <0x48>;
		/* SPI = 0, IRQ# = 7, 4 = active high level-sensitive */
		interrupts = <0 7 4>; /* IRQ_SYS_1N cascaded to gic */
		interrupt-parent = <&gic>;
	};

	twl6040: twl@4b {
		compatible = "ti,twl6040";
		reg = <0x4b>;
		/* SPI = 0, IRQ# = 119, 4 = active high level-sensitive */
		interrupts = <0 119 4>; /* IRQ_SYS_2N cascaded to gic */
		interrupt-parent = <&gic>;
		ti,audpwron-gpio = <&gpio4 31 0>;  /* gpio line 127 */

		vio-supply = <&v1v8>;
		v2v1-supply = <&v2v1>;
		enable-active-high;
	};
};

/include/ "twl6030.dtsi"

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

	clock-frequency = <400000>;
};

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

	clock-frequency = <100000>;

	/*
	 * Display monitor features are burnt in their EEPROM as EDID data.
	 * The EEPROM is connected as I2C slave device.
	 */
	eeprom@50 {
		compatible = "ti,eeprom";
		reg = <0x50>;
	};
};

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

	clock-frequency = <400000>;
};

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

&mmc2 {
	status = "disabled";
};

&mmc3 {
	status = "disabled";
};

&mmc4 {
	status = "disabled";
};

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

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

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

&mcbsp2 {
	status = "disabled";
};

&mcbsp3 {
	status = "disabled";
};

&dmic {
	status = "disabled";
};

&twl_usb_comparator {
	usb-supply = <&vusb>;
};

&usb_otg_hs {
	interface-type = <1>;
	mode = <3>;
	power = <50>;
};
