diff options
author | Juuso Oikarinen <juuso.oikarinen@nokia.com> | 2009-10-13 05:47:54 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2009-10-27 16:48:11 -0400 |
commit | 1fd2794f36913992798184c464fe8f85753b13e0 (patch) | |
tree | cce0edbd8bb37635a67771aa53b602db1f4b2fb2 /drivers/net/wireless/wl12xx/wl1271_main.c | |
parent | 7444113017b9d5394dc8c4bdf577f9567502417b (diff) |
wl1271: Fix event handling mechanism
The event handling mechanism could miss events if multiple events would
occur simultaneously. Fix event handling mechanism to process all
events.
Signed-off-by: Juuso Oikarinen <juuso.oikarinen@nokia.com>
Reviewed-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: Luciano Coelho <luciano.coelho@nokia.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net/wireless/wl12xx/wl1271_main.c')
-rw-r--r-- | drivers/net/wireless/wl12xx/wl1271_main.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/drivers/net/wireless/wl12xx/wl1271_main.c b/drivers/net/wireless/wl12xx/wl1271_main.c index 19dbdb1b38ab..d6d1a4c1b114 100644 --- a/drivers/net/wireless/wl12xx/wl1271_main.c +++ b/drivers/net/wireless/wl12xx/wl1271_main.c | |||
@@ -437,14 +437,15 @@ static void wl1271_irq_work(struct work_struct *work) | |||
437 | 437 | ||
438 | intr &= WL1271_INTR_MASK; | 438 | intr &= WL1271_INTR_MASK; |
439 | 439 | ||
440 | if (intr & (WL1271_ACX_INTR_EVENT_A | | 440 | if (intr & WL1271_ACX_INTR_EVENT_A) { |
441 | WL1271_ACX_INTR_EVENT_B)) { | 441 | bool do_ack = (intr & WL1271_ACX_INTR_EVENT_B) ? false : true; |
442 | wl1271_debug(DEBUG_IRQ, | 442 | wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_A"); |
443 | "WL1271_ACX_INTR_EVENT (0x%x)", intr); | 443 | wl1271_event_handle(wl, 0, do_ack); |
444 | if (intr & WL1271_ACX_INTR_EVENT_A) | 444 | } |
445 | wl1271_event_handle(wl, 0); | 445 | |
446 | else | 446 | if (intr & WL1271_ACX_INTR_EVENT_B) { |
447 | wl1271_event_handle(wl, 1); | 447 | wl1271_debug(DEBUG_IRQ, "WL1271_ACX_INTR_EVENT_B"); |
448 | wl1271_event_handle(wl, 1, true); | ||
448 | } | 449 | } |
449 | 450 | ||
450 | if (intr & WL1271_ACX_INTR_INIT_COMPLETE) | 451 | if (intr & WL1271_ACX_INTR_INIT_COMPLETE) |