isdn/sc: irq handler clean

* pass card number to irq handler

* use card number in irq handler to avoid looping through each adapter

Signed-off-by: Jeff Garzik <jgarzik@redhat.com>

+4 -16
+2 -1
drivers/isdn/sc/init.c
··· 334 334 */ 335 335 sc_adapter[cinst]->interrupt = irq[b]; 336 336 if (request_irq(sc_adapter[cinst]->interrupt, interrupt_handler, 337 - IRQF_DISABLED, interface->id, NULL)) 337 + IRQF_DISABLED, interface->id, 338 + (void *)(unsigned long) cinst)) 338 339 { 339 340 kfree(sc_adapter[cinst]->channel); 340 341 indicate_status(cinst, ISDN_STAT_UNLOAD, 0, NULL); /* Fix me */
+2 -15
drivers/isdn/sc/interrupt.c
··· 21 21 #include "card.h" 22 22 #include <linux/interrupt.h> 23 23 24 - static int get_card_from_irq(int irq) 25 - { 26 - int i; 27 - 28 - for(i = 0 ; i < cinst ; i++) { 29 - if(sc_adapter[i]->interrupt == irq) 30 - return i; 31 - } 32 - return -1; 33 - } 34 - 35 24 /* 36 25 * 37 26 */ 38 - irqreturn_t interrupt_handler(int interrupt, void *cardptr) 27 + irqreturn_t interrupt_handler(int dummy, void *card_inst) 39 28 { 40 29 41 30 RspMessage rcvmsg; 42 31 int channel; 43 - int card; 44 - 45 - card = get_card_from_irq(interrupt); 32 + int card = (int)(unsigned long) card_inst; 46 33 47 34 if(!IS_VALID_CARD(card)) { 48 35 pr_debug("Invalid param: %d is not a valid card id\n", card);