staging: comedi: pcl711: put acquired data in buffer for AI command
The asynchronous command support for the AI subdevice is still missing one crucial element, it doesn't actually put the acquired data in the buffer so it can be read()! Call `comedi_buf_put()` from the interrupt handler to perform this function. A return value of 0 from `comedi_buf_put()` means there was no room in the buffer so set the `COMEDI_CB_OVERFLOW` and `COMEDI_CB_ERROR` event flags in that case. Otherwise, set the `COMEDI_CB_BLOCK` and `COMEDI_CB_EOS` event flags to mark the end of a "scan" (the scan length is currently fixed at one sample in this driver). Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Reviewed-by: H Hartley Sweeten <hsweeten@visionengravers.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
2ce4e57b9a
commit
a7fa692b5f
|
@ -213,9 +213,15 @@ static irqreturn_t pcl711_interrupt(int irq, void *d)
|
||||||
|
|
||||||
outb(PCL711_INT_STAT_CLR, dev->iobase + PCL711_INT_STAT_REG);
|
outb(PCL711_INT_STAT_CLR, dev->iobase + PCL711_INT_STAT_REG);
|
||||||
|
|
||||||
if (s->async->cmd.stop_src == TRIG_COUNT && !(--devpriv->ntrig)) {
|
if (comedi_buf_put(s->async, (short)data) == 0) {
|
||||||
pcl711_ai_set_mode(dev, PCL711_MODE_SOFTTRIG);
|
s->async->events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR;
|
||||||
s->async->events |= COMEDI_CB_EOA;
|
} else {
|
||||||
|
s->async->events |= COMEDI_CB_BLOCK | COMEDI_CB_EOS;
|
||||||
|
if (s->async->cmd.stop_src == TRIG_COUNT &&
|
||||||
|
!(--devpriv->ntrig)) {
|
||||||
|
pcl711_ai_set_mode(dev, PCL711_MODE_SOFTTRIG);
|
||||||
|
s->async->events |= COMEDI_CB_EOA;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
comedi_event(dev, s);
|
comedi_event(dev, s);
|
||||||
return IRQ_HANDLED;
|
return IRQ_HANDLED;
|
||||||
|
|
Loading…
Reference in New Issue