Commit 66a462ba authored by Ian Abbott's avatar Ian Abbott Committed by Greg Kroah-Hartman

staging: comedi: amplc_pci230: simplify pci230_ai_read()

`pci230_ai_read()` reads a sample from the ADC data register and
converts it to a comedi sample value.  The AI sample may have 12 or 16
bits of resolution, depending on the board type, but 12-bit sample
values are in bits 15 to 4 of the register.  The hardware value is
signed, 2's complement if set to a bipolar mode, or unsigned, straight
binary if set to a unipolar mode.  To convert to a Comedi sample value
it may need shifting right by 4 bits, and the top bit of the sample
value may need to be toggled.

Simplify the existing code by doing the 2's complement to straight
binary conversion before the shift.  That way, it is always bit 15 that
is inverted regardless of the resolution.
Signed-off-by: default avatarIan Abbott <>
Reviewed-by: default avatarH Hartley Sweeten <>
Signed-off-by: default avatarGreg Kroah-Hartman <>
parent 9405d872
......@@ -563,16 +563,13 @@ static unsigned short pci230_ai_read(struct comedi_device *dev)
* PCI230 is 12 bit - stored in upper bits of 16 bit register
* (lower four bits reserved for expansion). PCI230+ is 16 bit AI.
data = data >> (16 - thisboard->ai_bits);
* If a bipolar range was specified, mangle it
* (twos complement->straight binary).
if (devpriv->ai_bipolar)
data ^= 1 << (thisboard->ai_bits - 1);
data ^= 0x8000;
data >>= (16 - thisboard->ai_bits);
return data;
Markdown is supported
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment