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>
This commit is contained in:
@@ -61,7 +61,7 @@ act2000_isa_detect(unsigned short portbase)
|
|||||||
}
|
}
|
||||||
|
|
||||||
static irqreturn_t
|
static irqreturn_t
|
||||||
act2000_isa_interrupt(int irq, void *dev_id)
|
act2000_isa_interrupt(int dummy, void *dev_id)
|
||||||
{
|
{
|
||||||
act2000_card *card = dev_id;
|
act2000_card *card = dev_id;
|
||||||
u_char istatus;
|
u_char istatus;
|
||||||
@@ -80,7 +80,7 @@ act2000_isa_interrupt(int irq, void *dev_id)
|
|||||||
printk(KERN_WARNING "act2000: errIRQ\n");
|
printk(KERN_WARNING "act2000: errIRQ\n");
|
||||||
}
|
}
|
||||||
if (istatus)
|
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;
|
return IRQ_HANDLED;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -131,6 +131,8 @@ act2000_isa_enable_irq(act2000_card * card)
|
|||||||
int
|
int
|
||||||
act2000_isa_config_irq(act2000_card * card, short irq)
|
act2000_isa_config_irq(act2000_card * card, short irq)
|
||||||
{
|
{
|
||||||
|
int old_irq;
|
||||||
|
|
||||||
if (card->flags & ACT2000_FLAGS_IVALID) {
|
if (card->flags & ACT2000_FLAGS_IVALID) {
|
||||||
free_irq(card->irq, card);
|
free_irq(card->irq, card);
|
||||||
}
|
}
|
||||||
@@ -139,8 +141,10 @@ act2000_isa_config_irq(act2000_card * card, short irq)
|
|||||||
if (!irq)
|
if (!irq)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
if (!request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) {
|
old_irq = card->irq;
|
||||||
card->irq = irq;
|
card->irq = irq;
|
||||||
|
if (request_irq(irq, &act2000_isa_interrupt, 0, card->regname, card)) {
|
||||||
|
card->irq = old_irq;
|
||||||
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);
|
||||||
|
Reference in New Issue
Block a user