summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRahul Bansal <rbansal@nvidia.com>2011-06-15 20:03:44 +0530
committerVarun Colbert <vcolbert@nvidia.com>2011-08-26 15:17:10 -0700
commited69630837778717dca8b9863d7501de06c7b7cd (patch)
tree338e784fea5004054e98d6311ff331009264906e
parent62bd6d3070897dac929e528cda7e01353635ef2f (diff)
net: wireless :bcm4329: disable sdio interrupts before wifi reset
during system suspend if wifi is on but not connected, android sets RTC alarm to wake up system after 2 mins of system suspend to turn off wifi. during turning off wifi it was observed that BCM4329 MAC is giving spurious sdio interrupts which was causing lockup issue (mmc_lock) between sdio interrupt handling process and wifi stop process, to fix this issue sdio interrupts are disabled before giving MAC reset from host. Bug 834444 Bug 798783 Bug 796147 Bug 797230 Bug 780047 Bug 818687 (cherry picked from commit 113676ec197fc62b7dce23dad4e081c940319846) Change-Id: I810894ded26bcfb44cff52aba16f2a5dbcba8f28 Reviewed-on: http://git-master/r/47478 Reviewed-by: Rakesh Kumar <krakesh@nvidia.com> Tested-by: Rakesh Kumar <krakesh@nvidia.com> Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com> Tested-by: Bharat Nihalani <bnihalani@nvidia.com>
-rw-r--r--drivers/net/wireless/bcm4329/dhd_sdio.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/drivers/net/wireless/bcm4329/dhd_sdio.c b/drivers/net/wireless/bcm4329/dhd_sdio.c
index 0a7a74227f93..425ba1efdd7e 100644
--- a/drivers/net/wireless/bcm4329/dhd_sdio.c
+++ b/drivers/net/wireless/bcm4329/dhd_sdio.c
@@ -5758,6 +5758,12 @@ dhd_bus_devreset(dhd_pub_t *dhdp, uint8 flag)
/* Force flow control as protection when stop come before ifconfig_down */
dhd_txflowcontrol(bus->dhd, 0, ON);
#endif /* !defined(IGNORE_ETH0_DOWN) */
+
+#if !defined(OOB_INTR_ONLY)
+ /* to avoid supurious client interrupt during stop process */
+ bcmsdh_stop(bus->sdh);
+#endif /* !defined(OOB_INTR_ONLY) */
+
/* Expect app to have torn down any connection before calling */
/* Stop the bus, disable F2 */
dhd_bus_stop(bus, FALSE);