/*
 * Copyright (C) 2011 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/ "omap4.dtsi"
/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_core {
	pinctrl-names = "default";
	pinctrl-0 = <
			&twl6040_pins
			&mcpdm_pins
			&mcbsp1_pins
			&dss_hdmi_pins
			&tpd12s015_pins
	>;

	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 {
	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 {
	clock-frequency = <400000>;
};

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