Use the comedi_offset_munge() helper to convert the hardware two's
complement values to the offset binary format expected by comedi.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers/usbduxsigma.c | 14 ++++----------
 1 file changed, 4 insertions(+), 10 deletions(-)

diff --git a/drivers/staging/comedi/drivers/usbduxsigma.c 
b/drivers/staging/comedi/drivers/usbduxsigma.c
index 8341a57..86cbd4c 100644
--- a/drivers/staging/comedi/drivers/usbduxsigma.c
+++ b/drivers/staging/comedi/drivers/usbduxsigma.c
@@ -229,9 +229,7 @@ static void usbduxsigma_ai_handle_urb(struct comedi_device 
*dev,
                         */
                        for (i = 0; i < cmd->chanlist_len; i++) {
                                val = be32_to_cpu(devpriv->in_buf[i + 1]);
-                               val &= 0x00ffffff; /* strip status byte */
-                               val ^= 0x00800000; /* convert to unsigned */
-
+                               val = comedi_offset_munge(s, val);
                                if (!comedi_buf_write_samples(s, &val, 1))
                                        return;
                        }
@@ -748,10 +746,7 @@ static int usbduxsigma_ai_insn_read(struct comedi_device 
*dev,
                /* 32 bits big endian from the A/D converter */
                val = be32_to_cpu(get_unaligned((__be32
                                                 *)(devpriv->insn_buf + 1)));
-               val &= 0x00ffffff;      /* strip status byte */
-               val ^= 0x00800000;      /* convert to unsigned */
-
-               data[i] = val;
+               data[i] = comedi_offset_munge(s, val);
        }
        up(&devpriv->sem);
 
@@ -1219,6 +1214,7 @@ static int usbduxsigma_pwm_config(struct comedi_device 
*dev,
 
 static int usbduxsigma_getstatusinfo(struct comedi_device *dev, int chan)
 {
+       struct comedi_subdevice *s = dev->read_subdev;
        struct usbduxsigma_private *devpriv = dev->private;
        u8 sysred;
        u32 val;
@@ -1262,10 +1258,8 @@ static int usbduxsigma_getstatusinfo(struct 
comedi_device *dev, int chan)
 
        /* 32 bits big endian from the A/D converter */
        val = be32_to_cpu(get_unaligned((__be32 *)(devpriv->insn_buf + 1)));
-       val &= 0x00ffffff;      /* strip status byte */
-       val ^= 0x00800000;      /* convert to unsigned */
 
-       return (int)val;
+       return (int)comedi_offset_munge(s, val);
 }
 
 static int usbduxsigma_firmware_upload(struct comedi_device *dev,
-- 
2.4.3

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to