wl1251: fix event handling mechanism
Grazvydas Ignotas [Tue, 17 Aug 2010 19:46:53 +0000 (22:46 +0300)]
In case both A and B events occured simultaneously, current code
would only process A and clear both interrupts. Make it process both
events instead.

Based on wl1271 patches by Juuso Oikarinen:
1fd2794f36913992798184c464fe8f85753b13e0
13f2dc52c69bcca074cd12d4806953b2af45c386

Signed-off-by: Grazvydas Ignotas <notasas@gmail.com>
Acked-by: Kalle Valo <kvalo@adurom.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>

drivers/net/wireless/wl12xx/wl1251_main.c

index 6d31c85..51474b6 100644 (file)
@@ -293,14 +293,14 @@ static void wl1251_irq_work(struct work_struct *work)
                        wl1251_tx_complete(wl);
                }
 
-               if (intr & (WL1251_ACX_INTR_EVENT_A |
-                           WL1251_ACX_INTR_EVENT_B)) {
-                       wl1251_debug(DEBUG_IRQ, "WL1251_ACX_INTR_EVENT (0x%x)",
-                                    intr);
-                       if (intr & WL1251_ACX_INTR_EVENT_A)
-                               wl1251_event_handle(wl, 0);
-                       else
-                               wl1251_event_handle(wl, 1);
+               if (intr & WL1251_ACX_INTR_EVENT_A) {
+                       wl1251_debug(DEBUG_IRQ, "WL1251_ACX_INTR_EVENT_A");
+                       wl1251_event_handle(wl, 0);
+               }
+
+               if (intr & WL1251_ACX_INTR_EVENT_B) {
+                       wl1251_debug(DEBUG_IRQ, "WL1251_ACX_INTR_EVENT_B");
+                       wl1251_event_handle(wl, 1);
                }
 
                if (intr & WL1251_ACX_INTR_INIT_COMPLETE)