*/
                sc_adapter[cinst]->interrupt = irq[b];
                if (request_irq(sc_adapter[cinst]->interrupt, interrupt_handler,
-                               IRQF_DISABLED, interface->id, NULL))
+                               IRQF_DISABLED, interface->id,
+                               (void *)(unsigned long) cinst))
                {
                        kfree(sc_adapter[cinst]->channel);
                        indicate_status(cinst, ISDN_STAT_UNLOAD, 0, NULL);      /* Fix me */
 
 #include "card.h"
 #include <linux/interrupt.h>
 
-static int get_card_from_irq(int irq)
-{
-       int i;
-
-       for(i = 0 ; i < cinst ; i++) {
-               if(sc_adapter[i]->interrupt == irq)
-                       return i;
-       }
-       return -1;
-}
-
 /*
  * 
  */
-irqreturn_t interrupt_handler(int interrupt, void *cardptr)
+irqreturn_t interrupt_handler(int dummy, void *card_inst)
 {
 
        RspMessage rcvmsg;
        int channel;
-       int card;
-
-       card = get_card_from_irq(interrupt);
+       int card = (int)(unsigned long) card_inst;
 
        if(!IS_VALID_CARD(card)) {
                pr_debug("Invalid param: %d is not a valid card id\n", card);