aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorHolger Schurig <hs4233@mail.mn-solutions.de>2008-06-05 07:06:15 -0400
committerJohn W. Linville <linville@tuxdriver.com>2008-06-14 12:18:03 -0400
commit3073556171f1cf2044ff38c1fc3b9f6c805f0873 (patch)
treeafe65725936cbcdba2a6dc3a79cf0511ad925857 /drivers
parentd2c3cc0070d32bf6cabe6b82942c3e80eae0bfc3 (diff)
libertas: fix interrupt issue
This helps against lost interrupts and aids in debugging this. Signed-off-by: Holger Schurig <hs4233@mail.mn-solutions.de> Acked-by: Dan Williams <dcbw@redhat.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/wireless/libertas/if_cs.c9
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/net/wireless/libertas/if_cs.c b/drivers/net/wireless/libertas/if_cs.c
index 873ab10a078..b5d0cd4c411 100644
--- a/drivers/net/wireless/libertas/if_cs.c
+++ b/drivers/net/wireless/libertas/if_cs.c
@@ -379,6 +379,8 @@ static irqreturn_t if_cs_interrupt(int irq, void *data)
379 379
380 /* Ask card interrupt cause register if there is something for us */ 380 /* Ask card interrupt cause register if there is something for us */
381 cause = if_cs_read16(card, IF_CS_CARD_INT_CAUSE); 381 cause = if_cs_read16(card, IF_CS_CARD_INT_CAUSE);
382 lbs_deb_cs("cause 0x%04x\n", cause);
383
382 if (cause == 0) { 384 if (cause == 0) {
383 /* Not for us */ 385 /* Not for us */
384 return IRQ_NONE; 386 return IRQ_NONE;
@@ -390,10 +392,6 @@ static irqreturn_t if_cs_interrupt(int irq, void *data)
390 return IRQ_HANDLED; 392 return IRQ_HANDLED;
391 } 393 }
392 394
393 /* Clear interrupt cause */
394 if_cs_write16(card, IF_CS_CARD_INT_CAUSE, cause & IF_CS_BIT_MASK);
395 lbs_deb_cs("cause 0x%04x\n", cause);
396
397 if (cause & IF_CS_BIT_RX) { 395 if (cause & IF_CS_BIT_RX) {
398 struct sk_buff *skb; 396 struct sk_buff *skb;
399 lbs_deb_cs("rx packet\n"); 397 lbs_deb_cs("rx packet\n");
@@ -434,6 +432,9 @@ static irqreturn_t if_cs_interrupt(int irq, void *data)
434 lbs_queue_event(priv, event >> 8 & 0xff); 432 lbs_queue_event(priv, event >> 8 & 0xff);
435 } 433 }
436 434
435 /* Clear interrupt cause */
436 if_cs_write16(card, IF_CS_CARD_INT_CAUSE, cause & IF_CS_BIT_MASK);
437
437 lbs_deb_leave(LBS_DEB_CS); 438 lbs_deb_leave(LBS_DEB_CS);
438 return IRQ_HANDLED; 439 return IRQ_HANDLED;
439} 440}