staging: comedi: ni_labpc_common: Use insn->n in AO insn_write handler

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>
This commit is contained in:
Ian Abbott 2018-10-30 17:23:54 +00:00 committed by Greg Kroah-Hartman
parent 43818b03c5
commit 4a4c1b1d5a
1 changed files with 6 additions and 3 deletions

View 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 */