aboutsummaryrefslogtreecommitdiff
path: root/drivers/net
diff options
context:
space:
mode:
authorDmitry Shmidt <dimitrysh@google.com>2011-03-09 16:52:08 -0800
committerJonas ABERG <jonas.aberg@stericsson.com>2011-04-01 13:30:25 +0200
commit4f5946d064af8325a137690b4f1e63f04f6b4910 (patch)
tree19903cd4209f41dbd8540aef22efcaa1e681647a /drivers/net
parent0d72b7c7c0240f396272a3db5ead87739cb04198 (diff)
net: wireless: bcm4329: Disable wake irq at driver stop
Previously at driver stop interrupts were not disabled and might cause never-ending waking up Signed-off-by: Dmitry Shmidt <dimitrysh@google.com> Change-Id: I356623149a8d1eb8c2c1a608655eb2245f8e3e33 Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/19513 Tested-by: Piotr TOMASZEWSKI <piotr.tomaszewski@stericsson.com> Reviewed-by: Jonas ABERG <jonas.aberg@stericsson.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/bcm4329/bcmsdh_linux.c14
-rw-r--r--drivers/net/wireless/bcm4329/dhd_sdio.c7
2 files changed, 20 insertions, 1 deletions
diff --git a/drivers/net/wireless/bcm4329/bcmsdh_linux.c b/drivers/net/wireless/bcm4329/bcmsdh_linux.c
index 3b7da4263fd..cdb2c5e1f1e 100644
--- a/drivers/net/wireless/bcm4329/bcmsdh_linux.c
+++ b/drivers/net/wireless/bcm4329/bcmsdh_linux.c
@@ -643,6 +643,20 @@ int bcmsdh_register_oob_intr(void * dhdp)
return 0;
}
+void bcmsdh_set_irq(int flag)
+{
+ if (sdhcinfo->oob_irq_registered) {
+ SDLX_MSG(("%s Flag = %d", __FUNCTION__, flag));
+ if (flag) {
+ enable_irq(sdhcinfo->oob_irq);
+ enable_irq_wake(sdhcinfo->oob_irq);
+ } else {
+ disable_irq_wake(sdhcinfo->oob_irq);
+ disable_irq(sdhcinfo->oob_irq);
+ }
+ }
+}
+
void bcmsdh_unregister_oob_intr(void)
{
SDLX_MSG(("%s: Enter\n", __FUNCTION__));
diff --git a/drivers/net/wireless/bcm4329/dhd_sdio.c b/drivers/net/wireless/bcm4329/dhd_sdio.c
index ac46ca91eae..78dff1c489b 100644
--- a/drivers/net/wireless/bcm4329/dhd_sdio.c
+++ b/drivers/net/wireless/bcm4329/dhd_sdio.c
@@ -146,6 +146,8 @@
DHD_SPINWAIT_SLEEP_INIT(sdioh_spinwait_sleep);
extern int dhdcdc_set_ioctl(dhd_pub_t *dhd, int ifidx, uint cmd, void *buf, uint len);
+extern void bcmsdh_set_irq(int flag);
+
#ifdef DHD_DEBUG
/* Device console log buffer state */
typedef struct dhd_console {
@@ -5809,7 +5811,9 @@ dhd_bus_devreset(dhd_pub_t *dhdp, uint8 flag)
/* Expect app to have torn down any connection before calling */
/* Stop the bus, disable F2 */
dhd_bus_stop(bus, FALSE);
-
+#if defined(OOB_INTR_ONLY)
+ bcmsdh_set_irq(FALSE);
+#endif /* defined(OOB_INTR_ONLY) */
/* Clean tx/rx buffer pointers, detach from the dongle */
dhdsdio_release_dongle(bus, bus->dhd->osh, TRUE);
@@ -5845,6 +5849,7 @@ dhd_bus_devreset(dhd_pub_t *dhdp, uint8 flag)
bcmerror = dhd_bus_init((dhd_pub_t *) bus->dhd, FALSE);
if (bcmerror == BCME_OK) {
#if defined(OOB_INTR_ONLY)
+ bcmsdh_set_irq(TRUE);
dhd_enable_oob_intr(bus, TRUE);
#endif /* defined(OOB_INTR_ONLY) */
bus->dhd->dongle_reset = FALSE;