]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
staging: comedi: ni_labpc_common: Use insn->n in AO insn_write handler
authorIan Abbott <abbotti@mev.co.uk>
Tue, 30 Oct 2018 17:23:54 +0000 (17:23 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 7 Nov 2018 12:05:39 +0000 (13:05 +0100)
The `insn_write` handler for the AO subdevice (`labpc_ao_insn_write()`)
currently ignores `insn->n` (the number of samples to write) and assumes
a single sample is to be written.  But `insn->n` could be 0, meaning no
samples should be written, in which case `data[0]` is invalid.

Follow the usual Comedi guidelines and change `labpc_ao_insn_write()` to
write the specified number of samples.  This fixes the assumption that
`data[0]` is valid.

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/ni_labpc_common.c

index 7fa2d39562dbf7ec6ffe04d7e93e405a26eb433a..406952f5521d03137cc1d1ec9557a8538cce0d69 100644 (file)
@@ -906,7 +906,9 @@ static int labpc_ao_insn_write(struct comedi_device *dev,
 {
        const struct labpc_boardinfo *board = dev->board_ptr;
        struct labpc_private *devpriv = dev->private;
-       int channel, range;
+       unsigned int channel;
+       unsigned int range;
+       unsigned int i;
        unsigned long flags;
 
        channel = CR_CHAN(insn->chanspec);
@@ -932,9 +934,10 @@ static int labpc_ao_insn_write(struct comedi_device *dev,
                devpriv->write_byte(dev, devpriv->cmd6, CMD6_REG);
        }
        /* send data */
-       labpc_ao_write(dev, s, channel, data[0]);
+       for (i = 0; i < insn->n; i++)
+               labpc_ao_write(dev, s, channel, data[i]);
 
-       return 1;
+       return insn->n;
 }
 
 /* lowlevel write to eeprom/dac */