diff options
author | Dong Aisheng <aisheng.dong@nxp.com> | 2016-09-01 20:49:45 +0800 |
---|---|---|
committer | Anson Huang <Anson.Huang@nxp.com> | 2017-06-08 19:24:35 +0800 |
commit | 633da685566341315fd207a7950d903c8a4a43eb (patch) | |
tree | 0ffdeae919bb0344aa379a6f5f0510fb8abf1533 | |
parent | 1501f4c004c8830b67942f2d1f900a5ad2354b64 (diff) |
MLK-13179-3 bcmdhd: add OOB support for all IMX6 and IMX7 platforms
Enable OOB feature for MX6Q/DL SDB, MX6SL EVK, MX6SX SDB, MX7D SDB boards.
NOTE: The performance optimization option CONFIG_BCM4339 is disabled
by default due to a WiFi driver issue that it breaks MX6SL EVK.
If user want to test performance on the above platforms (except MX6SL EVK),
CONFIG_BCM4339 has to be enabled manually.
Signed-off-by: Dong Aisheng <aisheng.dong@nxp.com>
-rw-r--r-- | arch/arm/boot/dts/imx6qdl-sabresd-btwifi.dtsi | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6sl-evk-btwifi.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6sx-sdb-btwifi.dts | 3 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6ull-9x9-evk-btwifi.dts | 2 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx6ull-evk-btwifi.dtsi | 56 | ||||
-rw-r--r-- | arch/arm/boot/dts/imx7d-sdb.dts | 7 | ||||
-rw-r--r-- | arch/arm/configs/imx_v7_defconfig | 2 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/Kconfig | 4 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/Makefile | 6 | ||||
-rw-r--r-- | drivers/net/wireless/bcmdhd/dhd_sdio.c | 16 |
11 files changed, 38 insertions, 64 deletions
diff --git a/arch/arm/boot/dts/imx6qdl-sabresd-btwifi.dtsi b/arch/arm/boot/dts/imx6qdl-sabresd-btwifi.dtsi index 5c69ece29ed2..5e697a0f8214 100644 --- a/arch/arm/boot/dts/imx6qdl-sabresd-btwifi.dtsi +++ b/arch/arm/boot/dts/imx6qdl-sabresd-btwifi.dtsi @@ -36,6 +36,7 @@ bcmdhd_wlan_0: bcmdhd_wlan@0 { compatible = "android,bcmdhd_wlan"; + gpios = <&gpio4 6 0>; /* WL_HOST_WAKE */ wlreg_on-supply = <&wlreg_on>; }; }; @@ -56,6 +57,7 @@ MX6QDL_PAD_SD2_DAT2__SD2_DATA2 0x17059 MX6QDL_PAD_SD2_DAT3__SD2_DATA3 0x17059 MX6QDL_PAD_KEY_ROW0__GPIO4_IO07 0x13069 /* WL_REG_ON */ + MX6QDL_PAD_KEY_COL0__GPIO4_IO06 0x13069 /* WL_HOST_WAKE */ >; }; }; diff --git a/arch/arm/boot/dts/imx6sl-evk-btwifi.dts b/arch/arm/boot/dts/imx6sl-evk-btwifi.dts index 341490d88e56..b740c810176d 100644 --- a/arch/arm/boot/dts/imx6sl-evk-btwifi.dts +++ b/arch/arm/boot/dts/imx6sl-evk-btwifi.dts @@ -30,6 +30,7 @@ bcmdhd_wlan_0: bcmdhd_wlan@0 { compatible = "android,bcmdhd_wlan"; + gpios = <&gpio5 20 0>; /* WL_HOST_WAKE */ wlreg_on-supply = <&wlreg_on>; }; }; @@ -45,6 +46,7 @@ MX6SL_PAD_SD1_DAT1__SD1_DATA1 0x17059 MX6SL_PAD_SD1_DAT2__SD1_DATA2 0x17059 MX6SL_PAD_SD1_DAT3__SD1_DATA3 0x17059 + MX6SL_PAD_SD3_DAT1__GPIO5_IO20 0x13069 /* WL_HOST_WAKE */ MX6SL_PAD_SD3_DAT2__GPIO5_IO16 0x13069 /* WL_REG_ON */ >; }; diff --git a/arch/arm/boot/dts/imx6sx-sdb-btwifi.dts b/arch/arm/boot/dts/imx6sx-sdb-btwifi.dts index 09db55464c3f..ba5512e652fe 100644 --- a/arch/arm/boot/dts/imx6sx-sdb-btwifi.dts +++ b/arch/arm/boot/dts/imx6sx-sdb-btwifi.dts @@ -30,6 +30,8 @@ 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>; }; }; @@ -72,6 +74,7 @@ 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 */ >; }; diff --git a/arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dts b/arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dts index ddca38d0006b..8a0a85d2e197 100644 --- a/arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dts +++ b/arch/arm/boot/dts/imx6ull-14x14-evk-btwifi.dts @@ -7,4 +7,4 @@ */ #include "imx6ull-14x14-evk.dts" -#include "imx6ull-evk-btwifi.dtsi" +#include "imx6ul-evk-btwifi.dtsi" diff --git a/arch/arm/boot/dts/imx6ull-9x9-evk-btwifi.dts b/arch/arm/boot/dts/imx6ull-9x9-evk-btwifi.dts index 9e1882f0b9c9..c8a51006213f 100644 --- a/arch/arm/boot/dts/imx6ull-9x9-evk-btwifi.dts +++ b/arch/arm/boot/dts/imx6ull-9x9-evk-btwifi.dts @@ -7,4 +7,4 @@ */ #include "imx6ull-9x9-evk.dts" -#include "imx6ull-evk-btwifi.dtsi" +#include "imx6ul-evk-btwifi.dtsi" diff --git a/arch/arm/boot/dts/imx6ull-evk-btwifi.dtsi b/arch/arm/boot/dts/imx6ull-evk-btwifi.dtsi deleted file mode 100644 index d97e83252829..000000000000 --- a/arch/arm/boot/dts/imx6ull-evk-btwifi.dtsi +++ /dev/null @@ -1,56 +0,0 @@ -/* - * Copyright (C) 2016 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). - */ - -/ { - 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 { - imx6ul-evk-murata-v2 { - pinctrl_wifi: wifigrp { - fsl,pins = < - MX6UL_PAD_SNVS_TAMPER1__GPIO5_IO01 0x03029 - >; - }; - }; -}; - -®_sd1_vmmc { - regulator-always-on; -}; - -&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 */ -}; diff --git a/arch/arm/boot/dts/imx7d-sdb.dts b/arch/arm/boot/dts/imx7d-sdb.dts index 1ba8a12739ff..34ea40ca3816 100644 --- a/arch/arm/boot/dts/imx7d-sdb.dts +++ b/arch/arm/boot/dts/imx7d-sdb.dts @@ -110,6 +110,7 @@ regulator-max-microvolt = <5000000>; regulator-name = "wlreg_on"; gpio = <&gpio4 21 GPIO_ACTIVE_HIGH>; + startup-delay-us = <100>; enable-active-high; }; }; @@ -124,6 +125,7 @@ bcmdhd_wlan_0: bcmdhd_wlan@0 { compatible = "android,bcmdhd_wlan"; + gpios = <&gpio4 20 0>; /* WL_HOST_WAKE */ wlreg_on-supply = <&wlreg_on>; }; @@ -818,7 +820,7 @@ pinctrl_hog_1: hoggrp-1 { fsl,pins = < - MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 0x80000000 /* bt reg on */ + MX7D_PAD_ECSPI2_SS0__GPIO4_IO23 0x19 /* BIT_REG_ON */ MX7D_PAD_EPDC_BDR0__GPIO2_IO28 0x59 /* headphone detect */ >; }; @@ -1163,7 +1165,8 @@ MX7D_PAD_SD2_DATA1__SD2_DATA1 0x59 MX7D_PAD_SD2_DATA2__SD2_DATA2 0x59 MX7D_PAD_SD2_DATA3__SD2_DATA3 0x59 - MX7D_PAD_ECSPI2_MOSI__GPIO4_IO21 0x59 /* WL_REG_ON */ + MX7D_PAD_ECSPI2_MOSI__GPIO4_IO21 0x19 /* WL_REG_ON */ + MX7D_PAD_ECSPI2_SCLK__GPIO4_IO20 0x19 /* WL_HOST_WAKE */ >; }; diff --git a/arch/arm/configs/imx_v7_defconfig b/arch/arm/configs/imx_v7_defconfig index 62a504cb8dc6..04403776d26a 100644 --- a/arch/arm/configs/imx_v7_defconfig +++ b/arch/arm/configs/imx_v7_defconfig @@ -147,7 +147,7 @@ CONFIG_USB_NET_CDC_EEM=m CONFIG_BCMDHD=y CONFIG_BCMDHD_SDIO=y CONFIG_BCMDHD_FW_PATH="/lib/firmware/bcm/ZP_BCM4339/fw_bcmdhd.bin" -CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/bcm/ZP_BCM4339/bcmdhd.ZP.SDIO.cal" +CONFIG_BCMDHD_NVRAM_PATH="/lib/firmware/bcm/ZP_BCM4339/bcmdhd.ZP.OOB.cal" # CONFIG_RTL_CARDS is not set # CONFIG_INPUT_MOUSEDEV_PSAUX is not set CONFIG_INPUT_EVDEV=y diff --git a/drivers/net/wireless/bcmdhd/Kconfig b/drivers/net/wireless/bcmdhd/Kconfig index b05d5e5c6b79..2a0856ef135c 100644 --- a/drivers/net/wireless/bcmdhd/Kconfig +++ b/drivers/net/wireless/bcmdhd/Kconfig @@ -15,6 +15,10 @@ config BCMDHD_PCIE bool "PCIe bus interface support" depends on BCMDHD && PCI && !BCMDHD_SDIO +config BCM4339 + tristate "BCM4339 support" + depends on BCMDHD + config BCM4354 tristate "BCM4354 support" depends on BCMDHD diff --git a/drivers/net/wireless/bcmdhd/Makefile b/drivers/net/wireless/bcmdhd/Makefile index 5ee0fb1271a6..c98a5be7a4f7 100644 --- a/drivers/net/wireless/bcmdhd/Makefile +++ b/drivers/net/wireless/bcmdhd/Makefile @@ -133,6 +133,8 @@ ifneq ($(CONFIG_BCM4339),) # tput enhancement DHDCFLAGS += -DCUSTOM_GLOM_SETTING=8 -DCUSTOM_RXCHAIN=1 + DHDCFLAGS += -DCUSTOM_RXCHAIN=1 + DHDCFLAGS += -DUSE_DYNAMIC_F2_BLKSIZE -DDYNAMIC_F2_BLKSIZE_FOR_NONLEGACY=128 DHDCFLAGS += -DBCMSDIOH_TXGLOM -DCUSTOM_TXGLOM=1 -DBCMSDIOH_TXGLOM_HIGHSPEED DHDCFLAGS += -DDHDTCPACK_SUPPRESS @@ -141,8 +143,8 @@ ifneq ($(CONFIG_BCM4339),) DHDCFLAGS += -DRXFRAME_THREAD DHDCFLAGS += -DCUSTOM_AMPDU_BA_WSIZE=64 DHDCFLAGS += -DCUSTOM_DPC_CPUCORE=0 - DHDCFLAGS += -DPROP_TXSTATUS_VSDB - DHDCFLAGS += -DCUSTOM_MAX_TXGLOM_SIZE=32 +# DHDCFLAGS += -DPROP_TXSTATUS_VSDB + DHDCFLAGS += -DCUSTOM_MAX_TXGLOM_SIZE=32 # New Features DHDCFLAGS += -DWL11U diff --git a/drivers/net/wireless/bcmdhd/dhd_sdio.c b/drivers/net/wireless/bcmdhd/dhd_sdio.c index 7e0e7ab3b925..1207bb3b494e 100644 --- a/drivers/net/wireless/bcmdhd/dhd_sdio.c +++ b/drivers/net/wireless/bcmdhd/dhd_sdio.c @@ -381,6 +381,9 @@ typedef struct dhd_bus { bool txglom_enable; /* Flag to indicate whether tx glom is enabled/disabled */ uint32 txglomsize; /* Glom size limitation */ void *pad_pkt; +#ifdef HW_OOB + int bus_wake_on_resume; /* addition to fix suspend/resume powersave issue */ +#endif } dhd_bus_t; /* clkstate */ @@ -6536,7 +6539,13 @@ dhd_bus_watchdog(dhd_pub_t *dhdp) DHD_TIMER(("%s: Enter\n", __FUNCTION__)); bus = dhdp->bus; - +#ifdef HW_OOB + /* this code segment added to fix suspend/resume powersave issue */ + if (bus->bus_wake_on_resume) { + BUS_WAKE(bus); + bus->bus_wake_on_resume = 0; + } +#endif if (bus->dhd->dongle_reset) return FALSE; @@ -7508,6 +7517,11 @@ dhdsdio_resume(void *context) bcmsdh_oob_intr_set(bus->sdh, TRUE); } #endif +#ifdef HW_OOB + /* this code segment added to fix suspend/resume powersave issue */ + bus->bus_wake_on_resume = 1; + dhd_os_wd_timer(bus->dhd, 1000); +#endif return 0; } |