소스 검색

drivers/isdn/act2000: kill irq2card_map

Eliminate irq->card lookup table, by properly passing the card pointer
via request_irq() like other drivers.

Signed-off-by: Jeff Garzik <jeff@garzik.org>
Jeff Garzik 18 년 전
부모
커밋
d87dbede03
1개의 변경된 파일6개의 추가작업 그리고 16개의 파일을 삭제
  1. 6 16
      drivers/isdn/act2000/act2000_isa.c

+ 6 - 16
drivers/isdn/act2000/act2000_isa.c

@@ -16,8 +16,6 @@
 #include "act2000_isa.h"
 #include "act2000_isa.h"
 #include "capi.h"
 #include "capi.h"
 
 
-static act2000_card *irq2card_map[16];
-
 /*
 /*
  * Reset Controller, then try to read the Card's signature.
  * Reset Controller, then try to read the Card's signature.
  + Return:
  + Return:
@@ -65,14 +63,9 @@ act2000_isa_detect(unsigned short portbase)
 static irqreturn_t
 static irqreturn_t
 act2000_isa_interrupt(int irq, void *dev_id)
 act2000_isa_interrupt(int irq, void *dev_id)
 {
 {
-        act2000_card *card = irq2card_map[irq];
+        act2000_card *card = dev_id;
         u_char istatus;
         u_char istatus;
 
 
-        if (!card) {
-                printk(KERN_WARNING
-                       "act2000: Spurious interrupt!\n");
-                return IRQ_NONE;
-        }
         istatus = (inb(ISA_PORT_ISR) & 0x07);
         istatus = (inb(ISA_PORT_ISR) & 0x07);
         if (istatus & ISA_ISR_OUT) {
         if (istatus & ISA_ISR_OUT) {
                 /* RX fifo has data */
                 /* RX fifo has data */
@@ -139,17 +132,15 @@ int
 act2000_isa_config_irq(act2000_card * card, short irq)
 act2000_isa_config_irq(act2000_card * card, short irq)
 {
 {
         if (card->flags & ACT2000_FLAGS_IVALID) {
         if (card->flags & ACT2000_FLAGS_IVALID) {
-                free_irq(card->irq, NULL);
-                irq2card_map[card->irq] = NULL;
+                free_irq(card->irq, card);
         }
         }
         card->flags &= ~ACT2000_FLAGS_IVALID;
         card->flags &= ~ACT2000_FLAGS_IVALID;
         outb(ISA_COR_IRQOFF, ISA_PORT_COR);
         outb(ISA_COR_IRQOFF, ISA_PORT_COR);
         if (!irq)
         if (!irq)
                 return 0;
                 return 0;
 
 
-	if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, NULL)) {
+	if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) {
 		card->irq = irq;
 		card->irq = irq;
-		irq2card_map[card->irq] = card;
 		card->flags |= ACT2000_FLAGS_IVALID;
 		card->flags |= ACT2000_FLAGS_IVALID;
                 printk(KERN_WARNING
                 printk(KERN_WARNING
                        "act2000: Could not request irq %d\n",irq);
                        "act2000: Could not request irq %d\n",irq);
@@ -188,10 +179,9 @@ act2000_isa_release(act2000_card * card)
         unsigned long flags;
         unsigned long flags;
 
 
         spin_lock_irqsave(&card->lock, flags);
         spin_lock_irqsave(&card->lock, flags);
-        if (card->flags & ACT2000_FLAGS_IVALID) {
-                free_irq(card->irq, NULL);
-                irq2card_map[card->irq] = NULL;
-        }
+        if (card->flags & ACT2000_FLAGS_IVALID)
+                free_irq(card->irq, card);
+
         card->flags &= ~ACT2000_FLAGS_IVALID;
         card->flags &= ~ACT2000_FLAGS_IVALID;
         if (card->flags & ACT2000_FLAGS_PVALID)
         if (card->flags & ACT2000_FLAGS_PVALID)
                 release_region(card->port, ISA_REGION);
                 release_region(card->port, ISA_REGION);