/*
 * 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 Slot
 * SD1 and using Murata i.MX InterConnect Ver 2.0 Adapter. Bluetooth UART &
 * control signals are connected via ribbon cable (J1701 connector).
 */

/ {
	modem_reset: modem-reset {
		compatible = "gpio-reset";
		reset-gpios = <&gpio_spi 4 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 = <&gpio5 1 0>;
			startup-delay-us = <100>;
			enable-active-high;
		};
	};

	bcmdhd_wlan_0: bcmdhd_wlan@0 {
		compatible = "android,bcmdhd_wlan";
		wlreg_on-supply = <&wlreg_on>;
	};
};

&iomuxc {
	pinctrl_wifi: wifigrp {
		fsl,pins = <
			MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x03029
		>;
	};
};

&reg_sd1_vmmc {
	regulator-always-on;
};

&uart2 {
	resets = <&modem_reset>;
};

&usdhc1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc1 &pinctrl_wifi>;
	no-1-8-v;
	non-removable;
	cd-post;
	pm-ignore-notify;
	wifi-host; /* add hook for SD card detect mechanism for BCMDHD driver */
};

&gpio_spi {
	/* Murata: modify default setting so that BT_nPWD/BT_REG_ON
	 * is low (0V) during kernel boot.
	 */
	registers-default = /bits/ 8 <0x47>;
};
