diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2013-06-03 19:04:45 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-06-05 15:35:38 -0700 |
commit | cac10bf92a0678bbc0c336e058f89a4a6e95aa96 (patch) | |
tree | ef9ccfaaa72eb43acf21b458ea165f38b099bb2f /drivers | |
parent | b11c5d3ccc7361dc552f689f08b38599fea5a513 (diff) |
staging: comedi: pcmda12: cleanup pcmda12_ao_insn_read()
Remove the boilerplate comment from the 'skel' driver.
To initiate the simultaneaous transfer, only one analog output
register needs to be read. Move the read out of the for() loop.
(*insn_read) functions should return an errno or the number of
samples actually read. Change the final return to insn->n to
make this clear.
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/staging/comedi/drivers/pcmda12.c | 29 |
1 files changed, 10 insertions, 19 deletions
diff --git a/drivers/staging/comedi/drivers/pcmda12.c b/drivers/staging/comedi/drivers/pcmda12.c index 5926363cabf5..c61c2c18658d 100644 --- a/drivers/staging/comedi/drivers/pcmda12.c +++ b/drivers/staging/comedi/drivers/pcmda12.c @@ -117,35 +117,26 @@ static int pcmda12_ao_insn_write(struct comedi_device *dev, return i; } -/* AO subdevices should have a read insn as well as a write insn. - - Usually this means copying a value stored in devpriv->ao_readback. - However, since this driver supports simultaneous xfer then sometimes - this function actually accomplishes work. - - Simultaneaous xfer mode is accomplished by loading ALL the values - you want for AO in all the channels, then READing off one of the AO - registers to initiate the instantaneous simultaneous update of all - DAC outputs, which makes all AO channels update simultaneously. - This is useful for some control applications, I would imagine. -*/ static int pcmda12_ao_insn_read(struct comedi_device *dev, struct comedi_subdevice *s, struct comedi_insn *insn, unsigned int *data) { struct pcmda12_private *devpriv = dev->private; + unsigned int chan = CR_CHAN(insn->chanspec); int i; - int chan = CR_CHAN(insn->chanspec); - for (i = 0; i < insn->n; i++) { - if (devpriv->simultaneous_xfer_mode) - inb(LSB_PORT(chan)); - /* read back shadow register */ + /* + * Initiate simultaneaous xfer mode by reading one of the + * AO registers. All analog outputs will then be updated. + */ + if (devpriv->simultaneous_xfer_mode) + inb(LSB_PORT(chan)); + + for (i = 0; i < insn->n; i++) data[i] = devpriv->ao_readback[chan]; - } - return i; + return insn->n; } static int pcmda12_attach(struct comedi_device *dev, |