wl1251: fix event handling mechanism
authorGrazvydas Ignotas <notasas@gmail.com>
Mon, 16 Aug 2010 14:44:46 +0000 (17:44 +0300)
committerGrazvydas Ignotas <notasas@gmail.com>
Tue, 17 Aug 2010 14:37:25 +0000 (17:37 +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>
drivers/net/wireless/wl12xx/wl1251_main.c

index 7d8ec43..00b3624 100644 (file)
@@ -295,14 +295,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)