[PATCH 05/11] staging: comedi: pcmad: tidy up pcmad_ai_insn_read()
H Hartley Sweeten
hsweeten at visionengravers.com
Wed Jun 5 22:37:06 UTC 2013
Use a local variable to read and munge the analog input data instead
of directly using the 'data' pointer passed to the function.
(*insn_read) functions either return an errno or the number of data
values read. Change the final return to insn->n to make this clearer.
Tidy up the function.
Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
Cc: Ian Abbott <abbotti at mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
---
drivers/staging/comedi/drivers/pcmad.c | 22 ++++++++++++----------
1 file changed, 12 insertions(+), 10 deletions(-)
diff --git a/drivers/staging/comedi/drivers/pcmad.c b/drivers/staging/comedi/drivers/pcmad.c
index a05b5d48..6b31e43 100644
--- a/drivers/staging/comedi/drivers/pcmad.c
+++ b/drivers/staging/comedi/drivers/pcmad.c
@@ -86,30 +86,32 @@ static int pcmad_ai_wait_for_eoc(struct comedi_device *dev,
static int pcmad_ai_insn_read(struct comedi_device *dev,
struct comedi_subdevice *s,
- struct comedi_insn *insn, unsigned int *data)
+ struct comedi_insn *insn,
+ unsigned int *data)
{
struct pcmad_priv_struct *devpriv = dev->private;
- int chan;
- int n;
+ unsigned int chan = CR_CHAN(insn->chanspec);
+ unsigned int val;
int ret;
+ int i;
- chan = CR_CHAN(insn->chanspec);
-
- for (n = 0; n < insn->n; n++) {
+ for (i = 0; i < insn->n; i++) {
outb(chan, dev->iobase + PCMAD_CONVERT);
ret = pcmad_ai_wait_for_eoc(dev, TIMEOUT);
if (ret)
return ret;
- data[n] = inb(dev->iobase + PCMAD_LSB);
- data[n] |= (inb(dev->iobase + PCMAD_MSB) << 8);
+ val = inb(dev->iobase + PCMAD_LSB) |
+ (inb(dev->iobase + PCMAD_MSB) << 8);
if (devpriv->twos_comp)
- data[n] ^= ((s->maxdata + 1) >> 1);
+ val ^= ((s->maxdata + 1) >> 1);
+
+ data[i] = val;
}
- return n;
+ return insn->n;
}
/*
--
1.8.1.4
More information about the devel
mailing list