staging: comedi: pcmuio: use comedi_buf_write_samples()
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Wed, 22 Oct 2014 22:37:14 +0000 (15:37 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 29 Oct 2014 08:03:15 +0000 (16:03 +0800)
The dev->read_subdev used in this driver for async commands returns 32-bit samples
and should have the SDF_LSAMPL subdev_flag set. It also returns the full scan with
each sample so it should have the SDF_PACKED subdev_flag set.

Add the missing subdev_flags and use comedi_buf_write_samples() to add the sample
to the async buffer.

The COMEDI_CB_BLOCK and COMEDI_CB_EOS events will be automatically handled by the
core. Remove the unnecessary events in the driver.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/pcmuio.c

index 28e659889e4fc82510d78b7fc8ce165cea2a4379..18c2ac28e34afbba5021c1bd13dd433652740642 100644 (file)
@@ -336,10 +336,7 @@ static void pcmuio_handle_intr_subdev(struct comedi_device *dev,
                        val |= (1 << i);
        }
 
-       /* Write the scan to the buffer. */
-       if (comedi_buf_put(s, val) &&
-           comedi_buf_put(s, val >> 16))
-               s->async->events |= (COMEDI_CB_BLOCK | COMEDI_CB_EOS);
+       comedi_buf_write_samples(s, &val, 1);
 
        /* Check for end of acquisition. */
        if (cmd->stop_src == TRIG_COUNT) {
@@ -604,7 +601,8 @@ static int pcmuio_attach(struct comedi_device *dev, struct comedi_devconfig *it)
                if ((i == 0 && dev->irq) || (i == 2 && devpriv->irq2)) {
                        /* setup the interrupt subdevice */
                        dev->read_subdev = s;
-                       s->subdev_flags |= SDF_CMD_READ;
+                       s->subdev_flags |= SDF_CMD_READ | SDF_LSAMPL |
+                                          SDF_PACKED;
                        s->len_chanlist = s->n_chan;
                        s->cancel       = pcmuio_cancel;
                        s->do_cmd       = pcmuio_cmd;