Commit 741ba8cd authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: pcmuio: tidy up pcmuio_handle_asic_interrupt()

Unfortunatly, since there could be two asics, we can't use dev->read_subdev
to get the subdevice. But, the comedi_subdevice associated with the 'asic'
can easily be calculated. This allows removing the for () loop that searched
for the correct subdevice.

Tidy up the function.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 099ec87d
...@@ -354,38 +354,24 @@ static void pcmuio_handle_intr_subdev(struct comedi_device *dev, ...@@ -354,38 +354,24 @@ static void pcmuio_handle_intr_subdev(struct comedi_device *dev,
static int pcmuio_handle_asic_interrupt(struct comedi_device *dev, int asic) static int pcmuio_handle_asic_interrupt(struct comedi_device *dev, int asic)
{ {
struct pcmuio_subdev_private *subpriv; /* there are could be two asics so we can't use dev->read_subdev */
struct comedi_subdevice *s = &dev->subdevices[asic * 2];
unsigned long iobase = dev->iobase + (asic * PCMUIO_ASIC_IOSIZE); unsigned long iobase = dev->iobase + (asic * PCMUIO_ASIC_IOSIZE);
unsigned int triggered = 0; unsigned int val;
int got1 = 0;
unsigned char int_pend; /* are there any interrupts pending */
int i; val = inb(iobase + PCMUIO_INT_PENDING_REG) & 0x07;
if (!val)
int_pend = inb(iobase + PCMUIO_INT_PENDING_REG) & 0x07; return 0;
if (int_pend) {
triggered = pcmuio_read(dev, asic, PCMUIO_PAGE_INT_ID, 0); /* get, and clear, the pending interrupts */
val = pcmuio_read(dev, asic, PCMUIO_PAGE_INT_ID, 0);
pcmuio_write(dev, 0, asic, PCMUIO_PAGE_INT_ID, 0); pcmuio_write(dev, 0, asic, PCMUIO_PAGE_INT_ID, 0);
++got1; /* handle the pending interrupts */
} pcmuio_handle_intr_subdev(dev, s, val);
if (triggered) { return 1;
struct comedi_subdevice *s;
/* TODO here: dispatch io lines to subdevs with commands.. */
for (i = 0; i < dev->n_subdevices; i++) {
s = &dev->subdevices[i];
subpriv = s->private;
if (subpriv->intr.asic == asic) {
/*
* This is an interrupt subdev, and it
* matches this asic!
*/
pcmuio_handle_intr_subdev(dev, s,
triggered);
}
}
}
return got1;
} }
static irqreturn_t pcmuio_interrupt(int irq, void *d) static irqreturn_t pcmuio_interrupt(int irq, void *d)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment