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

	usdhc3_pwrseq: usdhc3_pwrseq {
		compatible = "mmc-pwrseq-simple";
		reset-gpios = <&gpio6 10 GPIO_ACTIVE_LOW>;
	};
};

&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 {
	#address-cells = <1>;
	#size-cells = <0>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_wifi>;
	bus-width = <4>;
	no-1-8-v;	/* force 3.3V VIO */
	non-removable;
	mmc-pwrseq = <&usdhc3_pwrseq>;
	pm-ignore-notify;
	cap-power-off-card;
	status = "okay";

	brcmf: bcrmf@1 {
		reg = <1>;
		compatible = "brcm,bcm4329-fmac";
	};
};
