From 3170b2565fb2ef37af0d760ca2bde0d8d1f81910 Mon Sep 17 00:00:00 2001 From: H Hartley Sweeten Date: Wed, 5 Jun 2013 15:38:57 -0700 Subject: [PATCH] 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 Cc: Ian Abbott Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers/pcmad.c | 4 ++++ 1 file changed, 4 insertions(+) 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); -- 2.34.1