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@xxxxxxxxxxxxxxxxxxx> Cc: Ian Abbott <abbotti@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- 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 8028e47..c9af0aa 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); -- 1.8.1.4 _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel