summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorH Hartley Sweeten <hsweeten@visionengravers.com>2013-06-04 02:04:45 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2013-06-05 22:35:38 (GMT)
commitcac10bf92a0678bbc0c336e058f89a4a6e95aa96 (patch)
treeef9ccfaaa72eb43acf21b458ea165f38b099bb2f /drivers
parentb11c5d3ccc7361dc552f689f08b38599fea5a513 (diff)
downloadlinux-fsl-qoriq-cac10bf92a0678bbc0c336e058f89a4a6e95aa96.tar.xz
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.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/drivers/staging/comedi/drivers/pcmda12.c b/drivers/staging/comedi/drivers/pcmda12.c
index 5926363..c61c2c1 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,