/*
 * Copyright (C) 2015 Freescale Semiconductor, Inc.
 *
 * 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.
 */

/*
 * NOTE: This DTS file is written for plugging in Murata Wi-Fi/BT EVK into SD3
 * slot using Murata i.MX InterConnect Ver 1.0 Adapter AND SD Card Extender on
 * SD2 slot. Bluetooth UART connects via SD3 EMMC/MMC Plus pinout.
 * WL_REG_ON/BT_REG_ON/WL_HOST_WAKE connect via SD Card Extender.
 */

#include "imx6sx-sdb.dts"

/ {
	modem_reset: modem-reset {
		compatible = "gpio-reset";
		reset-gpios = <&gpio6 11 GPIO_ACTIVE_LOW>;
		reset-delay-us = <1000>;
		#reset-cells = <0>;
	};

	regulators {
		wlreg_on: fixedregulator@100 {
			compatible = "regulator-fixed";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			regulator-name = "wlreg_on";
			gpio = <&gpio6 10 0>;
			startup-delay-us = <100>;
			enable-active-high;
		};
	};

	bcmdhd_wlan_0: bcmdhd_wlan@0 {
		compatible = "android,bcmdhd_wlan";
		/* WL_HOST_WAKE: SD2_DAT1 (gpio6 9) */
		gpios = <&gpio6 9 0>;
		wlreg_on-supply = <&wlreg_on>;
	};
};

&iomuxc {
	imx6sx-sdb-murata-v1_sdext {
		pinctrl_bt: btgrp {
			fsl,pins = <
				MX6SX_PAD_SD2_DATA3__GPIO6_IO_11	0x13069 /* BT_REG_ON */
			>;
		};

		pinctrl_uart3: uart3grp {
			fsl,pins = <
				MX6SX_PAD_SD3_DATA4__UART3_RX		0x1b0b1
				MX6SX_PAD_SD3_DATA5__UART3_TX		0x1b0b1
				MX6SX_PAD_SD3_DATA7__UART3_CTS_B	0x1b0b1
				MX6SX_PAD_SD3_DATA6__UART3_RTS_B	0x1b0b1
			>;
		};

		/* change MUXing on SD2 slot for control signals. */
		pinctrl_usdhc2_1: usdhc2grp-1 {
			fsl,pins = <
				MX6SX_PAD_SD2_CMD__USDHC2_CMD		0x17059
				MX6SX_PAD_SD2_CLK__USDHC2_CLK		0x10059
				MX6SX_PAD_SD2_DATA0__USDHC2_DATA0	0x17059
			>;
		};

		/* Murata change SD3 to 4-bit SDIO only; use upper 4-bits for UART. */
		pinctrl_wifi: wifigrp {
			fsl,pins = <
				MX6SX_PAD_SD3_CMD__USDHC3_CMD		0x17069
				MX6SX_PAD_SD3_CLK__USDHC3_CLK		0x10071
				MX6SX_PAD_SD3_DATA0__USDHC3_DATA0	0x17069
				MX6SX_PAD_SD3_DATA1__USDHC3_DATA1	0x17069
				MX6SX_PAD_SD3_DATA2__USDHC3_DATA2	0x17069
				MX6SX_PAD_SD3_DATA3__USDHC3_DATA3	0x17069
				MX6SX_PAD_KEY_COL0__GPIO2_IO_10		0x17059 /* CD */
				MX6SX_PAD_KEY_ROW0__GPIO2_IO_15		0x17059 /* WP */
				/* Murata Module control signals */
				MX6SX_PAD_SD2_DATA1__GPIO6_IO_9         0x13069 /* WL_HOST_WAKE */
				MX6SX_PAD_SD2_DATA2__GPIO6_IO_10	0x13069 /* WL_REG_ON */
			>;
		};
	};
};

&uart3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart3
		     &pinctrl_bt>;
	fsl,uart-has-rtscts;
	resets = <&modem_reset>;
	status = "okay";
};

&usdhc2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc2_1>;
	bus-width = <1>;
};

&vcc_sd3 {
	regulator-always-on;
};

&usdhc3 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_wifi>;
	bus-width = <4>;
	no-1-8-v;	/* force 3.3V VIO */
	non-removable;
	cd-post;
	pm-ignore-notify;
	wifi-host;	/* pull in card detect mechanism for BCMDHD driver */
	status = "okay";
};
