diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2013-02-04 23:44:37 (GMT) |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-02-05 19:18:58 (GMT) |
commit | d35dcc89fc93d8f071fc7f88ae87697a77bb99d0 (patch) | |
tree | 59b65cf44bd40f77e15bfb0d3f2fe29321558ccd | |
parent | 6a911d8aa54bc79256e766580a19bbd91e76d48f (diff) | |
download | linux-fsl-qoriq-d35dcc89fc93d8f071fc7f88ae87697a77bb99d0.tar.xz |
staging: comedi: quatech_daqp_cs: fix daqp_ao_insn_write()
The (*insn_write) functions are expected to write 'insn->n' number
of samples to the channel. Fix this function so it works as the
comedi core expects.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/drivers/quatech_daqp_cs.c | 27 |
1 files changed, 14 insertions, 13 deletions
diff --git a/drivers/staging/comedi/drivers/quatech_daqp_cs.c b/drivers/staging/comedi/drivers/quatech_daqp_cs.c index f111042..b50ba54 100644 --- a/drivers/staging/comedi/drivers/quatech_daqp_cs.c +++ b/drivers/staging/comedi/drivers/quatech_daqp_cs.c @@ -644,31 +644,32 @@ static int daqp_ai_cmd(struct comedi_device *dev, struct comedi_subdevice *s) return 0; } -/* Single-shot analog output routine */ - static int daqp_ao_insn_write(struct comedi_device *dev, struct comedi_subdevice *s, - struct comedi_insn *insn, unsigned int *data) + struct comedi_insn *insn, + unsigned int *data) { struct daqp_private *devpriv = dev->private; - int d; - unsigned int chan; + unsigned int chan = CR_CHAN(insn->chanspec); + unsigned int val; + int i; if (devpriv->stop) return -EIO; - chan = CR_CHAN(insn->chanspec); - d = data[0]; - d &= 0x0fff; - d ^= 0x0800; /* Flip the sign */ - d |= chan << 12; - /* Make sure D/A update mode is direct update */ outb(0, dev->iobase + DAQP_AUX); - outw(d, dev->iobase + DAQP_DA); + for (i = 0; i > insn->n; i++) { + val = data[0]; + val &= 0x0fff; + val ^= 0x0800; /* Flip the sign */ + val |= (chan << 12); - return 1; + outw(val, dev->iobase + DAQP_DA); + } + + return insn->n; } static int daqp_di_insn_bits(struct comedi_device *dev, |