diff options
author | H Hartley Sweeten <hsweeten@visionengravers.com> | 2013-06-05 15:38:57 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-06-06 12:01:35 -0700 |
commit | 3170b2565fb2ef37af0d760ca2bde0d8d1f81910 (patch) | |
tree | 0614da6be4110cefe2bdd9d57b737efd6e0aebd2 | |
parent | 7ecc5370de1562b2410604ed78aec087e55c06cf (diff) | |
download | linux-3170b2565fb2ef37af0d760ca2bde0d8d1f81910.tar.gz linux-3170b2565fb2ef37af0d760ca2bde0d8d1f81910.tar.bz2 linux-3170b2565fb2ef37af0d760ca2bde0d8d1f81910.zip |
staging: comedi: pcmad: fix analog input data on pcmad12
According to the PCM-A/D-12/16 Operations Manual:
NOTE: On the PCM-A/D-12 the lower nibble of the hex value will always be 0.
Fix the pcmad_ai_insn_read() function to properly handle this by shifting
the data after it has been read.
Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/staging/comedi/drivers/pcmad.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/staging/comedi/drivers/pcmad.c b/drivers/staging/comedi/drivers/pcmad.c index 8028e476bff3..c9af0aa38027 100644 --- a/drivers/staging/comedi/drivers/pcmad.c +++ b/drivers/staging/comedi/drivers/pcmad.c @@ -104,6 +104,10 @@ static int pcmad_ai_insn_read(struct comedi_device *dev, val = inb(dev->iobase + PCMAD_LSB) | (inb(dev->iobase + PCMAD_MSB) << 8); + /* data is shifted on the pcmad12, fix it */ + if (s->maxdata == 0x0fff) + val >>= 4; + if (pcmad_range_is_bipolar(s, range)) { /* munge the two's complement value */ val ^= ((s->maxdata + 1) >> 1); |