From: H Hartley Sweeten Date: Wed, 5 Jun 2013 22:38:57 +0000 (-0700) Subject: staging: comedi: pcmad: fix analog input data on pcmad12 X-Git-Url: http://drtracing.org/?a=commitdiff_plain;h=3170b2565fb2ef37af0d760ca2bde0d8d1f81910;p=deliverable%2Flinux.git 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 --- 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);