staging: comedi: usbdux: clarify bipolar ai data in usbduxsub_ai_isoc_irq()
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Thu, 25 Jul 2013 23:09:30 +0000 (16:09 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 26 Jul 2013 22:10:07 +0000 (15:10 -0700)
Use the comedi_range_is_bipolar() helper instead of checking the
'range' index against a magic number.

Also, use the s->maxdata to calculate the value needed to munge the
value for bipolar data instead of the magic number.

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>
drivers/staging/comedi/drivers/usbdux.c

index 92d740a..20b705e 100644 (file)
@@ -363,14 +363,15 @@ static void usbduxsub_ai_isoc_irq(struct urb *urb)
        /* get the data from the USB bus and hand it over to comedi */
        n = s->async->cmd.chanlist_len;
        for (i = 0; i < n; i++) {
+               unsigned int range = CR_RANGE(s->async->cmd.chanlist[i]);
+               int16_t val = le16_to_cpu(devpriv->in_buffer[i]);
+
+               /* bipolar data is two's-complement */
+               if (comedi_range_is_bipolar(s, range))
+                       val ^= ((s->maxdata + 1) >> 1);
+
                /* transfer data */
-               if (CR_RANGE(s->async->cmd.chanlist[i]) <= 1) {
-                       err = comedi_buf_put(s->async,
-                            le16_to_cpu(devpriv->in_buffer[i]) ^ 0x800);
-               } else {
-                       err = comedi_buf_put(s->async,
-                            le16_to_cpu(devpriv->in_buffer[i]));
-               }
+               err = comedi_buf_put(s->async, val);
                if (unlikely(err == 0)) {
                        /* buffer overflow */
                        usbdux_ai_stop(dev, 0);