Commit cac10bf9 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

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: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent b11c5d3c
...@@ -117,35 +117,26 @@ static int pcmda12_ao_insn_write(struct comedi_device *dev, ...@@ -117,35 +117,26 @@ static int pcmda12_ao_insn_write(struct comedi_device *dev,
return i; 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, static int pcmda12_ao_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s, struct comedi_subdevice *s,
struct comedi_insn *insn, struct comedi_insn *insn,
unsigned int *data) unsigned int *data)
{ {
struct pcmda12_private *devpriv = dev->private; struct pcmda12_private *devpriv = dev->private;
unsigned int chan = CR_CHAN(insn->chanspec);
int i; int i;
int chan = CR_CHAN(insn->chanspec);
for (i = 0; i < insn->n; i++) { /*
* Initiate simultaneaous xfer mode by reading one of the
* AO registers. All analog outputs will then be updated.
*/
if (devpriv->simultaneous_xfer_mode) if (devpriv->simultaneous_xfer_mode)
inb(LSB_PORT(chan)); inb(LSB_PORT(chan));
/* read back shadow register */
for (i = 0; i < insn->n; i++)
data[i] = devpriv->ao_readback[chan]; data[i] = devpriv->ao_readback[chan];
}
return i; return insn->n;
} }
static int pcmda12_attach(struct comedi_device *dev, static int pcmda12_attach(struct comedi_device *dev,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment