summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers/pcl711.c
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2013-09-26 10:16:39 +0100
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-09-26 09:34:45 -0700
commita7fa692b5f878fe00699a6691215b961a8fcb276 (patch)
treeae343f0178067f09f884765ae93d46ab184bf395 /drivers/staging/comedi/drivers/pcl711.c
parent2ce4e57b9afea13711606839acd382256d201306 (diff)
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>
Diffstat (limited to 'drivers/staging/comedi/drivers/pcl711.c')
-rw-r--r--drivers/staging/comedi/drivers/pcl711.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/staging/comedi/drivers/pcl711.c b/drivers/staging/comedi/drivers/pcl711.c
index daa78fa63be1..e170f8aeef5f 100644
--- a/drivers/staging/comedi/drivers/pcl711.c
+++ b/drivers/staging/comedi/drivers/pcl711.c
@@ -213,9 +213,15 @@ static irqreturn_t pcl711_interrupt(int irq, void *d)
outb(PCL711_INT_STAT_CLR, dev->iobase + PCL711_INT_STAT_REG);
- if (s->async->cmd.stop_src == TRIG_COUNT && !(--devpriv->ntrig)) {
- pcl711_ai_set_mode(dev, PCL711_MODE_SOFTTRIG);
- s->async->events |= COMEDI_CB_EOA;
+ if (comedi_buf_put(s->async, (short)data) == 0) {
+ s->async->events |= COMEDI_CB_OVERFLOW | COMEDI_CB_ERROR;
+ } 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);
return IRQ_HANDLED;