Commit 46ffba06 authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

staging: comedi: dt2814: Don't wait for conversion in interrupt handler

When the interrupt handler decides the final sample has been acquired,
it turns off the timer enable (ENB) bit in the Command register.  That
triggers another A/D conversion.  The interrupt handler currently waits
for that to finish and then reads the resulting, unwanted sample.  Since
the functions for handling Comedi read instructions and for setting up
asynchronous commands now call `dt2814_ai_clear()` to wait for and
discard any spurious A/D conversion, let's remove that code from the
interrupt handler.
Signed-off-by: default avatarIan Abbott <abbotti@mev.co.uk>
Link: https://lore.kernel.org/r/20210301165757.243065-3-abbotti@mev.co.ukSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 7a3f3a70
...@@ -238,21 +238,13 @@ static irqreturn_t dt2814_interrupt(int irq, void *d) ...@@ -238,21 +238,13 @@ static irqreturn_t dt2814_interrupt(int irq, void *d)
inb(dev->iobase + DT2814_DATA); inb(dev->iobase + DT2814_DATA);
if (!(--devpriv->ntrig)) { if (!(--devpriv->ntrig)) {
int i;
outb(0, dev->iobase + DT2814_CSR); outb(0, dev->iobase + DT2814_CSR);
/* /*
* note: turning off timed mode triggers another * Note: turning off timed mode triggers another
* sample. * sample. This will be mopped up by the calls to
* dt2814_ai_clear().
*/ */
for (i = 0; i < DT2814_TIMEOUT; i++) {
if (inb(dev->iobase + DT2814_CSR) & DT2814_FINISH)
break;
}
inb(dev->iobase + DT2814_DATA);
inb(dev->iobase + DT2814_DATA);
s->async->events |= COMEDI_CB_EOA; s->async->events |= COMEDI_CB_EOA;
} }
comedi_handle_events(dev, s); comedi_handle_events(dev, s);
......
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