[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