diff options
author | Jeff Garzik <jeff@garzik.org> | 2007-10-19 19:30:28 -0400 |
---|---|---|
committer | Jeff Garzik <jeff@garzik.org> | 2007-10-23 19:53:16 -0400 |
commit | 246f93f5cc0d4116cadf33ad1c8ae7ac08e9b1c7 (patch) | |
tree | 05cfcb3b73c3de7b277295a9ca89db8cfb4bebd2 | |
parent | d12341f9f2b7cc38c699c2af3a9f17eb39b64b17 (diff) | |
download | linux-246f93f5cc0d4116cadf33ad1c8ae7ac08e9b1c7.tar.bz2 |
isdn/act2000: fix major bug. clean irq handler.
* invert sense of request_irq() test. otherwise we will always fail,
when IRQ is available.
* no need to use 'irq' function arg, its stored in a data struct already
Signed-off-by: Jeff Garzik <jgarzik@redhat.com>
-rw-r--r-- | drivers/isdn/act2000/act2000_isa.c | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/drivers/isdn/act2000/act2000_isa.c b/drivers/isdn/act2000/act2000_isa.c index 819ea85576a3..1bd8960ead33 100644 --- a/drivers/isdn/act2000/act2000_isa.c +++ b/drivers/isdn/act2000/act2000_isa.c @@ -61,7 +61,7 @@ act2000_isa_detect(unsigned short portbase) } static irqreturn_t -act2000_isa_interrupt(int irq, void *dev_id) +act2000_isa_interrupt(int dummy, void *dev_id) { act2000_card *card = dev_id; u_char istatus; @@ -80,7 +80,7 @@ act2000_isa_interrupt(int irq, void *dev_id) printk(KERN_WARNING "act2000: errIRQ\n"); } if (istatus) - printk(KERN_DEBUG "act2000: ?IRQ %d %02x\n", irq, istatus); + printk(KERN_DEBUG "act2000: ?IRQ %d %02x\n", card->irq, istatus); return IRQ_HANDLED; } @@ -131,6 +131,8 @@ act2000_isa_enable_irq(act2000_card * card) int act2000_isa_config_irq(act2000_card * card, short irq) { + int old_irq; + if (card->flags & ACT2000_FLAGS_IVALID) { free_irq(card->irq, card); } @@ -139,8 +141,10 @@ act2000_isa_config_irq(act2000_card * card, short irq) if (!irq) return 0; - if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) { - card->irq = irq; + old_irq = card->irq; + card->irq = irq; + if (request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) { + card->irq = old_irq; card->flags |= ACT2000_FLAGS_IVALID; printk(KERN_WARNING "act2000: Could not request irq %d\n",irq); |