// SPDX-License-Identifier: GPL-2.0-only
/dts-v1/;

#include <dt-bindings/input/input.h>
#include "omap443x.dtsi"
#include "motorola-cpcap-mapphone.dtsi"

/ {
	chosen {
		stdout-path = &uart3;
	};

	aliases {
		display0 = &lcd0;
		display1 = &hdmi0;
	};

	/*
	 * We seem to have only 1021 MB accessible, 1021 - 1022 is locked,
	 * then 1023 - 1024 seems to contain mbm.
	 */
	memory {
		device_type = "memory";
		reg = <0x80000000 0x3fd00000>;	/* 1021 MB */
	};

	/* Poweroff GPIO probably connected to CPCAP */
	gpio-poweroff {
		compatible = "gpio-poweroff";
		pinctrl-0 = <&poweroff_gpio>;
		pinctrl-names = "default";
		gpios = <&gpio2 18 GPIO_ACTIVE_LOW>;	/* gpio50 */
	};

	hdmi0: connector {
		compatible = "hdmi-connector";
		pinctrl-0 = <&hdmi_hpd_gpio>;
		pinctrl-names = "default";
		label = "hdmi";
		type = "d";

		hpd-gpios = <&gpio2 31 GPIO_ACTIVE_HIGH>;	/* gpio63 */

		port {
			hdmi_connector_in: endpoint {
				remote-endpoint = <&hdmi_out>;
			};
		};
	};

	/*
	 * HDMI 5V regulator probably sourced from battery. Let's keep
	 * keep this as always enabled for HDMI to work until we've
	 * figured what the encoder chip is.
	 */
	hdmi_regulator: regulator-hdmi {
		compatible = "regulator-fixed";
		regulator-name = "hdmi";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		gpio = <&gpio2 27 GPIO_ACTIVE_HIGH>;	/* gpio59 */
		enable-active-high;
		regulator-always-on;
	};

	/* FS USB Host PHY on port 1 for mdm6600 */
	fsusb1_phy: usb-phy@1 {
		compatible = "motorola,mapphone-mdm6600";
		pinctrl-0 = <&usb_mdm6600_pins>;
		pinctrl-names = "default";
		enable-gpios = <&gpio3 31 GPIO_ACTIVE_LOW>;     /* gpio_95 */
		power-gpios = <&gpio2 22 GPIO_ACTIVE_HIGH>;	/* gpio_54 */
		reset-gpios = <&gpio2 17 GPIO_ACTIVE_HIGH>;	/* gpio_49 */
		/* mode: gpio_148 gpio_149 */
		motorola,mode-gpios = <&gpio5 20 GPIO_ACTIVE_HIGH>,
				      <&gpio5 21 GPIO_ACTIVE_HIGH>;
		/* cmd: gpio_103 gpio_104 gpio_142 */
		motorola,cmd-gpios = <&gpio4 7 GPIO_ACTIVE_HIGH>,
				     <&gpio4 8 GPIO_ACTIVE_HIGH>,
				     <&gpio5 14 GPIO_ACTIVE_HIGH>;
		/* status: gpio_52 gpio_53 gpio_55 */
		motorola,status-gpios = <&gpio2 20 GPIO_ACTIVE_HIGH>,
					<&gpio2 21 GPIO_ACTIVE_HIGH>,
					<&gpio2 23 GPIO_ACTIVE_HIGH>;
		#phy-cells = <0>;
	};

	/* HS USB host TLL nop-phy on port 2 for w3glte */
	hsusb2_phy: usb-phy@2 {
		compatible = "usb-nop-xceiv";
		#phy-cells = <0>;
	};

	/* LCD regulator from sw5 source */
	lcd_regulator: regulator-lcd {
		compatible = "regulator-fixed";
		regulator-name = "lcd";
		regulator-min-microvolt = <5050000>;
		regulator-max-microvolt = <5050000>;
		gpio = <&gpio4 0 GPIO_ACTIVE_HIGH>;	/* gpio96 */
		enable-active-high;
		vin-supply = <&sw5>;
	};

	/* This is probably coming straight from the battery.. */
	wl12xx_vmmc: regulator-wl12xx {
		compatible = "regulator-fixed";
		regulator-name = "vwl1271";
		regulator-min-microvolt = <1650000>;
		regulator-max-microvolt = <1650000>;
		gpio = <&gpio3 30 GPIO_ACTIVE_HIGH>;	/* gpio94 */
		startup-delay-us = <70000>;
		enable-active-high;
	};

	gpio_keys {
		compatible = "gpio-keys";

		volume_down {
			label = "Volume Down";
			gpios = <&gpio5 26 GPIO_ACTIVE_LOW>; /* gpio154 */
			linux,code = <KEY_VOLUMEDOWN>;
			linux,can-disable;
			/* Value above 7.95ms for no GPIO hardware debounce */
			debounce-interval = <10>;
		};

		slider {
			label = "Keypad Slide";
			gpios = <&gpio4 26 GPIO_ACTIVE_HIGH>; /* gpio122 */
			linux,input-type = <EV_SW>;
			linux,code = <SW_KEYPAD_SLIDE>;
			linux,can-disable;
			/* Value above 7.95ms for no GPIO hardware debounce */
			debounce-interval = <10>;
		};
	};

	soundcard {
		compatible = "audio-graph-card";
		label = "Droid 4 Audio";

		widgets =
			"Speaker", "Earpiece",
			"Speaker", "Loudspeaker",
			"Headphone", "Headphone Jack",
			"Microphone", "Internal Mic";

		routing =
			"Earpiece", "EP",
			"Loudspeaker", "SPKR",
			"Headphone Jack", "HSL",
			"Headphone Jack", "HSR",
			"MICR", "Internal Mic";

		dais = <&mcbsp2_port>, <&mcbsp3_port>;
	};

	pwm8: dmtimer-pwm-8 {
		pinctrl-names = "default";
		pinctrl-0 = <&vibrator_direction_pin>;

		compatible = "ti,omap-dmtimer-pwm";
		#pwm-cells = <3>;
		ti,timers = <&timer8>;
		ti,clock-source = <0x01>;
	};

	pwm9: dmtimer-pwm-9 {
		pinctrl-names = "default";
		pinctrl-0 = <&vibrator_enable_pin>;

		compatible = "ti,omap-dmtimer-pwm";
		#pwm-cells = <3>;
		ti,timers = <&timer9>;
		ti,clock-source = <0x01>;
	};

	vibrator {
		compatible = "pwm-vibrator";
		pwms = <&pwm9 0 10000000 0>, <&pwm8 0 10000000 0>;
		pwm-names = "enable", "direction";
		direction-duty-cycle-ns = <10000000>;
	};

	backlight: backlight {
		compatible = "led-backlight";

		leds = <&backlight_led>;
		brightness-levels = <31 63 95 127 159 191 223 255>;
		default-brightness-level = <6>;
	};
};

&dss {
	status = "okay";
};

&dsi1 {
	status = "okay";
	vdd-supply = <&vcsi>;

	port {
		dsi1_out_ep: endpoint {
			remote-endpoint = <&lcd0_in>;
			lanes = <0 1 2 3 4 5>;
		};
	};

	lcd0: panel@0 {
		compatible = "motorola,droid4-panel", "panel-dsi-cm";
		reg = <0>;
		label = "lcd0";
		vddi-supply = <&lcd_regulator>;
		reset-gpios = <&gpio4 5 GPIO_ACTIVE_HIGH>;	/* gpio101 */

		backlight = <&backlight>;

		width-mm = <50>;
		height-mm = <89>;
		rotation = <90>;

		panel-timing {
			clock-frequency = <0>;		/* Calculated by dsi */

			hback-porch = <2>;
			hactive = <540>;
			hfront-porch = <0>;
			hsync-len = <2>;

			vback-porch = <1>;
			vactive = <960>;
			vfront-porch = <0>;
			vsync-len = <1>;

			hsync-active = <0>;
			vsync-active = <0>;
			de-active = <1>;
			pixelclk-active = <1>;
		};

		port {
			lcd0_in: endpoint {
				remote-endpoint = <&dsi1_out_ep>;
			};
		};
	};
};

&hdmi {
	status = "okay";
	pinctrl-0 = <&dss_hdmi_pins>;
	pinctrl-names = "default";
	vdda-supply = <&vdac>;

	port {
		hdmi_out: endpoint {
			remote-endpoint = <&hdmi_connector_in>;
			lanes = <1 0 3 2 5 4 7 6>;
		};
	};
};

/* Battery NVRAM on 1-wire handled by w1_ds250x driver */
&hdqw1w {
	pinctrl-0 = <&hdq_pins>;
	pinctrl-names = "default";
	ti,mode = "1w";
};

&i2c1 {
	tmp105@48 {
		compatible = "ti,tmp105";
		reg = <0x48>;
		pinctrl-0 = <&tmp105_irq>;
		pinctrl-names = "default";
		/* kpd_row0.gpio_178 */
		interrupts-extended = <&gpio6 18 IRQ_TYPE_EDGE_FALLING
				       &omap4_pmx_core 0x14e>;
		interrupt-names = "irq", "wakeup";
		wakeup-source;
	};
};

&keypad {
	keypad,num-rows = <8>;
	keypad,num-columns = <8>;
	linux,keymap = <

	/* Row 1 */
	MATRIX_KEY(0, 2, KEY_1)
	MATRIX_KEY(0, 6, KEY_2)
	MATRIX_KEY(2, 3, KEY_3)
	MATRIX_KEY(0, 7, KEY_4)
	MATRIX_KEY(0, 4, KEY_5)
	MATRIX_KEY(5, 5, KEY_6)
	MATRIX_KEY(0, 1, KEY_7)
	MATRIX_KEY(0, 5, KEY_8)
	MATRIX_KEY(0, 0, KEY_9)
	MATRIX_KEY(1, 6, KEY_0)

	/* Row 2 */
	MATRIX_KEY(3, 4, KEY_APOSTROPHE)
	MATRIX_KEY(7, 6, KEY_Q)
	MATRIX_KEY(7, 7, KEY_W)
	MATRIX_KEY(7, 2, KEY_E)
	MATRIX_KEY(1, 0, KEY_R)
	MATRIX_KEY(4, 4, KEY_T)
	MATRIX_KEY(1, 2, KEY_Y)
	MATRIX_KEY(6, 7, KEY_U)
	MATRIX_KEY(2, 2, KEY_I)
	MATRIX_KEY(5, 6, KEY_O)
	MATRIX_KEY(3, 7, KEY_P)
	MATRIX_KEY(6, 5, KEY_BACKSPACE)

	/* Row 3 */
	MATRIX_KEY(5, 4, KEY_TAB)
	MATRIX_KEY(5, 7, KEY_A)
	MATRIX_KEY(2, 7, KEY_S)
	MATRIX_KEY(7, 0, KEY_D)
	MATRIX_KEY(2, 6, KEY_F)
	MATRIX_KEY(6, 2, KEY_G)
	MATRIX_KEY(6, 6, KEY_H)
	MATRIX_KEY(1, 4, KEY_J)
	MATRIX_KEY(3, 1, KEY_K)
	MATRIX_KEY(2, 1, KEY_L)
	MATRIX_KEY(4, 6, KEY_ENTER)

	/* Row 4 */
	MATRIX_KEY(3, 6, KEY_LEFTSHIFT)		/* KEY_CAPSLOCK */
	MATRIX_KEY(6, 1, KEY_Z)
	MATRIX_KEY(7, 4, KEY_X)
	MATRIX_KEY(5, 1, KEY_C)
	MATRIX_KEY(1, 7, KEY_V)
	MATRIX_KEY(2, 4, KEY_B)
	MATRIX_KEY(4, 1, KEY_N)
	MATRIX_KEY(1, 1, KEY_M)
	MATRIX_KEY(3, 5, KEY_COMMA)
	MATRIX_KEY(5, 2, KEY_DOT)
	MATRIX_KEY(6, 3, KEY_UP)
	MATRIX_KEY(7, 3, KEY_OK)

	/* Row 5 */
	MATRIX_KEY(2, 5, KEY_LEFTCTRL)		/* KEY_LEFTSHIFT */
	MATRIX_KEY(4, 5, KEY_LEFTALT)		/* SYM */
	MATRIX_KEY(6, 0, KEY_MINUS)
	MATRIX_KEY(4, 7, KEY_EQUAL)
	MATRIX_KEY(1, 5, KEY_SPACE)
	MATRIX_KEY(3, 2, KEY_SLASH)
	MATRIX_KEY(4, 3, KEY_LEFT)
	MATRIX_KEY(5, 3, KEY_DOWN)
	MATRIX_KEY(3, 3, KEY_RIGHT)

	/* Side buttons, KEY_VOLUMEDOWN and KEY_PWER are on CPCAP? */
	MATRIX_KEY(5, 0, KEY_VOLUMEUP)
	>;
};

&mmc1 {
	vmmc-supply = <&vwlan2>;
	bus-width = <4>;
	cd-gpios = <&gpio6 16 GPIO_ACTIVE_LOW>;	/* gpio176 */
};

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

&mmc3 {
	pinctrl-names = "default";
	pinctrl-0 = <&mmc3_pins>;
	vmmc-supply = <&wl12xx_vmmc>;
	/* uart2_tx.sdmmc3_dat1 pad as wakeirq */
	interrupts-extended = <&wakeupgen GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH
			       &omap4_pmx_core 0xde>;
	interrupt-names = "irq", "wakeup";
	non-removable;
	bus-width = <4>;
	cap-power-off-card;
	keep-power-in-suspend;

	#address-cells = <1>;
	#size-cells = <0>;
	wlcore: wlcore@2 {
		compatible = "ti,wl1285", "ti,wl1283";
		reg = <2>;
		/* gpio_100 with gpmc_wait2 pad as wakeirq */
		interrupts-extended = <&gpio4 4 IRQ_TYPE_LEVEL_HIGH>,
				      <&omap4_pmx_core 0x4e>;
		interrupt-names = "irq", "wakeup";
		ref-clock-frequency = <26000000>;
		tcxo-clock-frequency = <26000000>;
	};
};

&i2c1 {
	led-controller@38 {
		compatible = "ti,lm3532";
		#address-cells = <1>;
		#size-cells = <0>;
		reg = <0x38>;

		enable-gpios = <&gpio6 12 GPIO_ACTIVE_HIGH>;

		ramp-up-us = <1024>;
		ramp-down-us = <8193>;

		backlight_led: led@0 {
			reg = <0>;
			led-sources = <2>;
			ti,led-mode = <0>;
			label = ":backlight";
		};

		led@1 {
			reg = <1>;
			led-sources = <1>;
			ti,led-mode = <0>;
			label = ":kbd_backlight";
		};
	};
};

&i2c2 {
	touchscreen@4a {
		compatible = "atmel,maxtouch";
		reg = <0x4a>;
		pinctrl-names = "default";
		pinctrl-0 = <&touchscreen_pins>;

		reset-gpios = <&gpio6 13 GPIO_ACTIVE_LOW>; /* gpio173 */

		/* gpio_183 with sys_nirq2 pad as wakeup */
		interrupts-extended = <&gpio6 23 IRQ_TYPE_LEVEL_LOW>,
				      <&omap4_pmx_core 0x160>;
		interrupt-names = "irq", "wakeup";
		wakeup-source;
	};

	isl29030@44 {
		compatible = "isil,isl29030";
		reg = <0x44>;

		pinctrl-names = "default";
		pinctrl-0 = <&als_proximity_pins>;

		interrupt-parent = <&gpio6>;
		interrupts = <17 IRQ_TYPE_LEVEL_LOW>; /* gpio177 */
	};
};

&omap4_pmx_core {

	/* hdmi_hpd.gpio_63 */
	hdmi_hpd_gpio: pinmux_hdmi_hpd_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x098, PIN_INPUT | MUX_MODE3)
		>;
	};

	hdq_pins: pinmux_hdq_pins {
		pinctrl-single,pins = <
		/* 0x4a100120 hdq_sio.hdq_sio aa27 */
		OMAP4_IOPAD(0x120, PIN_INPUT | MUX_MODE0)
		>;
	};

	/* hdmi_cec.hdmi_cec, hdmi_scl.hdmi_scl, hdmi_sda.hdmi_sda */
	dss_hdmi_pins: pinmux_dss_hdmi_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x09a, PIN_INPUT | MUX_MODE0)
		OMAP4_IOPAD(0x09c, PIN_INPUT | MUX_MODE0)
		OMAP4_IOPAD(0x09e, PIN_INPUT | MUX_MODE0)
		>;
	};

	/*
	 * Android uses PIN_OFF_INPUT_PULLDOWN | PIN_INPUT_PULLUP | MUX_MODE3
	 * for gpio_100, but the internal pull makes wlan flakey on some
	 * devices. Off mode value should be tested if we have off mode working
	 * later on.
	 */
	mmc3_pins: pinmux_mmc3_pins {
		pinctrl-single,pins = <
		/* 0x4a10008e gpmc_wait2.gpio_100 d23 */
		OMAP4_IOPAD(0x08e, PIN_INPUT | MUX_MODE3)

		/* 0x4a100102 abe_mcbsp1_dx.sdmmc3_dat2 ab25 */
		OMAP4_IOPAD(0x102, PIN_INPUT_PULLUP | MUX_MODE1)

		/* 0x4a100104 abe_mcbsp1_fsx.sdmmc3_dat3 ac27 */
		OMAP4_IOPAD(0x104, PIN_INPUT_PULLUP | MUX_MODE1)

		/* 0x4a100118 uart2_cts.sdmmc3_clk ab26 */
		OMAP4_IOPAD(0x118, PIN_INPUT | MUX_MODE1)

		/* 0x4a10011a uart2_rts.sdmmc3_cmd ab27 */
		OMAP4_IOPAD(0x11a, PIN_INPUT_PULLUP | MUX_MODE1)

		/* 0x4a10011c uart2_rx.sdmmc3_dat0 aa25 */
		OMAP4_IOPAD(0x11c, PIN_INPUT_PULLUP | MUX_MODE1)

		/* 0x4a10011e uart2_tx.sdmmc3_dat1 aa26 */
		OMAP4_IOPAD(0x11e, PIN_INPUT_PULLUP | MUX_MODE1)
		>;
	};

	/* gpmc_ncs0.gpio_50 */
	poweroff_gpio: pinmux_poweroff_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x074, PIN_OUTPUT_PULLUP | MUX_MODE3)
		>;
	};

	/* kpd_row0.gpio_178 */
	tmp105_irq: pinmux_tmp105_irq {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x18e, PIN_INPUT_PULLUP | MUX_MODE3)
		>;
	};

	usb_gpio_mux_sel1: pinmux_usb_gpio_mux_sel1_pins {
		/* gpio_60 */
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x088, PIN_OUTPUT | MUX_MODE3)
		>;
	};

	touchscreen_pins: pinmux_touchscreen_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x180, PIN_OUTPUT | MUX_MODE3)
		OMAP4_IOPAD(0x1a0, PIN_INPUT_PULLUP | MUX_MODE3)
		>;
	};

	als_proximity_pins: pinmux_als_proximity_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x18c, PIN_INPUT_PULLUP | MUX_MODE3)
		>;
	};

	usb_mdm6600_pins: pinmux_usb_mdm6600_pins {
		pinctrl-single,pins = <
		/* enable 0x4a1000d8 usbb1_ulpitll_dat7.gpio_95 ag16 */
		OMAP4_IOPAD(0x0d8, PIN_INPUT | MUX_MODE3)

		/* power 0x4a10007c gpmc_nwp.gpio_54 c25 */
		OMAP4_IOPAD(0x07c, PIN_OUTPUT | MUX_MODE3)

		/* reset 0x4a100072 gpmc_a25.gpio_49 d20 */
		OMAP4_IOPAD(0x072, PIN_OUTPUT | MUX_MODE3)

		/* mode0/bpwake 0x4a10014e sdmmc5_dat1.gpio_148 af4 */
		OMAP4_IOPAD(0x14e, PIN_OUTPUT | MUX_MODE3)

		/* mode1/apwake 0x4a100150 sdmmc5_dat2.gpio_149 ag3 */
		OMAP4_IOPAD(0x150, PIN_OFF_OUTPUT_LOW | PIN_INPUT | MUX_MODE3)

		/* status0 0x4a10007e gpmc_clk.gpio_55 b22 */
		OMAP4_IOPAD(0x07e, PIN_INPUT | MUX_MODE3)

		/* status1 0x4a10007a gpmc_ncs3.gpio_53 c22 */
		OMAP4_IOPAD(0x07a, PIN_INPUT | MUX_MODE3)

		/* status2 0x4a100078 gpmc_ncs2.gpio_52 d21 */
		OMAP4_IOPAD(0x078, PIN_INPUT | MUX_MODE3)

		/* cmd0 0x4a100094 gpmc_ncs6.gpio_103 c24 */
		OMAP4_IOPAD(0x094, PIN_OUTPUT | MUX_MODE3)

		/* cmd1 0x4a100096 gpmc_ncs7.gpio_104 d24 */
		OMAP4_IOPAD(0x096, PIN_OUTPUT | MUX_MODE3)

		/* cmd2 0x4a100142 uart3_rts_sd.gpio_142 f28 */
		OMAP4_IOPAD(0x142, PIN_OUTPUT | MUX_MODE3)
		>;
	};

	usb_ulpi_pins: pinmux_usb_ulpi_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x196, MUX_MODE7)
		OMAP4_IOPAD(0x198, MUX_MODE7)
		OMAP4_IOPAD(0x1b2, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1b4, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1b6, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1b8, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1ba, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1bc, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1be, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1c0, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1c2, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1c4, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1c6, PIN_INPUT_PULLUP | MUX_MODE0)
		OMAP4_IOPAD(0x1c8, PIN_INPUT_PULLUP | MUX_MODE0)
		>;
	};

	/* usb0_otg_dp and usb0_otg_dm */
	usb_utmi_pins: pinmux_usb_utmi_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x196, PIN_INPUT | MUX_MODE0)
		OMAP4_IOPAD(0x198, PIN_INPUT | MUX_MODE0)
		OMAP4_IOPAD(0x1b2, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1b4, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1b6, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1b8, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1ba, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1bc, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1be, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c0, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c2, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c4, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c6, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c8, PIN_INPUT_PULLUP | MUX_MODE7)
		>;
	};

	/*
	 * Note that the v3.0.8 stock userspace dynamically remuxes uart1
	 * rts pin probably for PM purposes to PIN_INPUT_PULLUP | MUX_MODE7
	 * when not used. If needed, we can add rts pin remux later based
	 * on power measurements.
	 */
	uart1_pins: pinmux_uart1_pins {
		pinctrl-single,pins = <
		/* 0x4a10013c mcspi1_cs2.uart1_cts ag23 */
		OMAP4_IOPAD(0x13c, PIN_INPUT_PULLUP | MUX_MODE1)

		/* 0x4a10013e mcspi1_cs3.uart1_rts ah23 */
		OMAP4_IOPAD(0x13e, MUX_MODE1)

		/* 0x4a100140 uart3_cts_rctx.uart1_tx f27 */
		OMAP4_IOPAD(0x140, PIN_OUTPUT | MUX_MODE1)

		/* 0x4a1001ca dpm_emu14.uart1_rx aa3 */
		OMAP4_IOPAD(0x1ca, PIN_INPUT_PULLUP | MUX_MODE2)
		>;
	};

	/* uart3_tx_irtx and uart3_rx_irrx */
	uart3_pins: pinmux_uart3_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x196, MUX_MODE7)
		OMAP4_IOPAD(0x198, MUX_MODE7)
		OMAP4_IOPAD(0x1b2, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1b4, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1b6, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1b8, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1ba, MUX_MODE2)
		OMAP4_IOPAD(0x1bc, PIN_INPUT | MUX_MODE2)
		OMAP4_IOPAD(0x1be, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c0, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c2, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c4, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c6, PIN_INPUT_PULLUP | MUX_MODE7)
		OMAP4_IOPAD(0x1c8, PIN_INPUT_PULLUP | MUX_MODE7)
		>;
	};

	uart4_pins: pinmux_uart4_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x15c, PIN_INPUT | MUX_MODE0)		/* uart4_rx */
		OMAP4_IOPAD(0x15e, PIN_OUTPUT | MUX_MODE0)		/* uart4_tx */
		OMAP4_IOPAD(0x110, PIN_INPUT_PULLUP | MUX_MODE5)	/* uart4_cts */
		OMAP4_IOPAD(0x112, PIN_OUTPUT_PULLUP | MUX_MODE5)	/* uart4_rts */
		>;
	};

	mcbsp2_pins: pinmux_mcbsp2_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x0f6, PIN_INPUT | MUX_MODE0)	/* abe_mcbsp2_clkx */
		OMAP4_IOPAD(0x0f8, PIN_INPUT | MUX_MODE0)	/* abe_mcbsp2_dr */
		OMAP4_IOPAD(0x0fa, PIN_OUTPUT | MUX_MODE0)	/* abe_mcbsp2_dx */
		OMAP4_IOPAD(0x0fc, PIN_INPUT | MUX_MODE0)	/* abe_mcbsp2_fsx */
		>;
	};

	mcbsp3_pins: pinmux_mcbsp3_pins {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x106, PIN_INPUT | MUX_MODE1)	/* abe_mcbsp3_dr */
		OMAP4_IOPAD(0x108, PIN_OUTPUT | MUX_MODE1)	/* abe_mcbsp3_dx */
		OMAP4_IOPAD(0x10a, PIN_INPUT | MUX_MODE1)	/* abe_mcbsp3_clkx */
		OMAP4_IOPAD(0x10c, PIN_INPUT | MUX_MODE1)	/* abe_mcbsp3_fsx */
		>;
	};

	vibrator_direction_pin: pinmux_vibrator_direction_pin {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x1ce, PIN_OUTPUT | MUX_MODE1)	/* dmtimer8_pwm_evt (gpio_27) */
		>;
	};

	vibrator_enable_pin: pinmux_vibrator_enable_pin {
		pinctrl-single,pins = <
		OMAP4_IOPAD(0X1d0, PIN_OUTPUT | MUX_MODE1)	/* dmtimer9_pwm_evt (gpio_28) */
		>;
	};
};

&omap4_pmx_wkup {
	usb_gpio_mux_sel2: pinmux_usb_gpio_mux_sel2_pins {
		/* gpio_wk0 */
		pinctrl-single,pins = <
		OMAP4_IOPAD(0x040, PIN_OUTPUT_PULLDOWN | MUX_MODE3)
		>;
	};
};

/* RNG is used by secure mode and not accessible */
&rng_target {
	status = "disabled";
};

/* Configure pwm clock source for timers 8 & 9 */
&timer8 {
	assigned-clocks = <&abe_clkctrl OMAP4_TIMER8_CLKCTRL 24>;
	assigned-clock-parents = <&sys_clkin_ck>;
};

&timer9 {
	assigned-clocks = <&l4_per_clkctrl OMAP4_TIMER9_CLKCTRL 24>;
	assigned-clock-parents = <&sys_clkin_ck>;
};

/*
 * The uart1 port is wired to mdm6600 with rts and cts. The modem uses gpio_149
 * for wake-up events for both the USB PHY and the UART. We can use gpio_149
 * pad as the shared wakeirq for the UART rather than the RX or CTS pad as we
 * have gpio_149 trigger before the UART transfer starts.
 */
&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart1_pins>;
	interrupts-extended = <&wakeupgen GIC_SPI 72 IRQ_TYPE_LEVEL_HIGH
			       &omap4_pmx_core 0x110>;
	uart-has-rtscts;
	current-speed = <115200>;
};

&uart3 {
	interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
			       &omap4_pmx_core 0x17c>;
};

&uart4 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart4_pins>;

	bluetooth {
		compatible = "ti,wl1285-st";
		enable-gpios = <&gpio6 14 GPIO_ACTIVE_HIGH>; /* gpio 174 */
		max-speed = <3686400>;
	};
};

&usbhsohci {
	phys = <&fsusb1_phy>;
	phy-names = "usb";
};

&usbhsehci {
	phys = <&hsusb2_phy>;
};

&usbhshost {
	port1-mode = "ohci-phy-4pin-dpdm";
	port2-mode = "ehci-tll";
};

/* Internal UTMI+ PHY used for OTG, CPCAP ULPI PHY for detection and charger */
&usb_otg_hs {
	interface-type = <1>;
	mode = <3>;

	/*
	 * Max 300 mA steps based on similar PMIC MC13783UG.pdf "Table 10-4.
	 * VBUS Regulator Main Characteristics". Binding uses 2 mA units.
	 */
	power = <150>;
};

&i2c4 {
	ak8975: magnetometer@c {
		compatible = "asahi-kasei,ak8975";
		reg = <0x0c>;

		vdd-supply = <&vhvio>;

		interrupt-parent = <&gpio6>;
		interrupts = <15 IRQ_TYPE_EDGE_RISING>; /* gpio175 */

		rotation-matrix = "-1", "0", "0",
				  "0", "1", "0",
				  "0", "0", "-1";

	};

	lis3dh: accelerometer@18 {
		compatible = "st,lis3dh-accel";
		reg = <0x18>;

		vdd-supply = <&vhvio>;

		interrupt-parent = <&gpio2>;
		interrupts = <2 IRQ_TYPE_EDGE_BOTH>; /* gpio34 */

		rotation-matrix = "0", "-1", "0",
				  "1", "0", "0",
				  "0", "0", "1";
	};
};

&mcbsp2 {
	#sound-dai-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&mcbsp2_pins>;
	status = "okay";

	mcbsp2_port: port {
		cpu_dai2: endpoint {
			dai-format = "i2s";
			remote-endpoint = <&cpcap_audio_codec0>;
			frame-master = <&cpcap_audio_codec0>;
			bitclock-master = <&cpcap_audio_codec0>;
		};
	};
};

&mcbsp3 {
	#sound-dai-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&mcbsp3_pins>;
	status = "okay";

	mcbsp3_port: port {
		cpu_dai3: endpoint {
			dai-format = "dsp_a";
			frame-master = <&cpcap_audio_codec1>;
			bitclock-master = <&cpcap_audio_codec1>;
			remote-endpoint = <&cpcap_audio_codec1>;
		};
	};
};

&cpcap_audio_codec0 {
	remote-endpoint = <&cpu_dai2>;
};

&cpcap_audio_codec1 {
	remote-endpoint = <&cpu_dai3>;
};
