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>
This commit is contained in:
parent
246f93f5cc
commit
080eb42f31
|
@ -334,7 +334,8 @@ static int __init sc_init(void)
|
|||
*/
|
||||
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 */
|
||||
|
|
|
@ -21,28 +21,15 @@
|
|||
#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);
|
||||
|
|
Loading…
Reference in New Issue