diff options
author | Jens Taprogge <jens.taprogge@taprogge.org> | 2012-09-12 14:55:34 +0200 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2012-09-12 09:56:01 -0700 |
commit | 88ff8480d39da6b2961444f0c28b5b0d194d2de6 (patch) | |
tree | d6fa494eff0c48baf97222f87a828227e0db540f /drivers/staging/ipack | |
parent | 487e0a608d8d7483be5b5fe3fe9414636c087588 (diff) |
Staging: ipack/bridges/tpci200: Clean up interrupt handling.
Previously the return value from tpci200_interrupt was not quite correct
if a slot had caused an interrupt but no handler was instellalled:
IRQ_NONE was returned. However in this case we react to the interrupt
by disabling the IPack device interrupt.
Basically there are two cases the code now distinguishes:
- The tpci200 has raised an interrupt. We handle it and return
IRQ_HANDLED.
- Our device did not raise an interrupt. We return IRQ_NONE.
Signed-off-by: Jens Taprogge <jens.taprogge@taprogge.org>
Signed-off-by: Samuel Iglesias Gonsalvez <siglesias@igalia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/ipack')
-rw-r--r-- | drivers/staging/ipack/bridges/tpci200.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/staging/ipack/bridges/tpci200.c b/drivers/staging/ipack/bridges/tpci200.c index b1ddbe3ec33..0cbaf3ab53c 100644 --- a/drivers/staging/ipack/bridges/tpci200.c +++ b/drivers/staging/ipack/bridges/tpci200.c @@ -116,7 +116,6 @@ static irqreturn_t tpci200_interrupt(int irq, void *dev_id) struct tpci200_board *tpci200 = (struct tpci200_board *) dev_id; int i; unsigned short status_reg; - irqreturn_t ret = IRQ_NONE; struct slot_irq *slot_irq; /* Read status register */ @@ -130,7 +129,7 @@ static irqreturn_t tpci200_interrupt(int irq, void *dev_id) continue; slot_irq = rcu_dereference(tpci200->slots[i].irq); if (slot_irq) { - ret = tpci200_slot_irq(slot_irq); + tpci200_slot_irq(slot_irq); } else { dev_info(&tpci200->info->pdev->dev, "No registered ISR for slot [%d:%d]!. IRQ will be disabled.\n", @@ -141,9 +140,11 @@ static irqreturn_t tpci200_interrupt(int irq, void *dev_id) } } rcu_read_unlock(); - } - return ret; + return IRQ_HANDLED; + } else { + return IRQ_NONE; + } } static int tpci200_register(struct tpci200_board *tpci200) |