diff options
author | Ian Abbott <abbotti@mev.co.uk> | 2009-09-21 16:01:56 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2009-10-09 13:47:25 -0700 |
commit | 2b49d7c40ec0806d93ced89ac6039ddcf223dea7 (patch) | |
tree | 16c2532bafa35108f4b442fbd37ea3c376515097 | |
parent | 5044a2c0e0e951afeb4dce87e18e10036635410a (diff) | |
download | linux-2b49d7c40ec0806d93ced89ac6039ddcf223dea7.tar.bz2 |
Staging: comedi: ni_65xx.c: fix insn_bits shift calculation.
Fix insn_bits bitshift calculation for subdevice with non-zero
base_port.
Thanks to cJ-comedi at zougloub dot eu for spotting the bug.
Signed-off-by: Frank Mori Hess <fmhess@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
-rw-r--r-- | drivers/staging/comedi/drivers/ni_65xx.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c index 6b118c15b49e..b664ce083fc5 100644 --- a/drivers/staging/comedi/drivers/ni_65xx.c +++ b/drivers/staging/comedi/drivers/ni_65xx.c @@ -418,15 +418,15 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev, return -EINVAL; base_bitfield_channel = CR_CHAN(insn->chanspec); for (j = 0; j < max_ports_per_bitfield; ++j) { + const unsigned port_offset = ni_65xx_port_by_channel(base_bitfield_channel) + j; const unsigned port = - sprivate(s)->base_port + - ni_65xx_port_by_channel(base_bitfield_channel) + j; + sprivate(s)->base_port + port_offset; unsigned base_port_channel; unsigned port_mask, port_data, port_read_bits; int bitshift; if (port >= ni_65xx_total_num_ports(board(dev))) break; - base_port_channel = port * ni_65xx_channels_per_port; + base_port_channel = port_offset * ni_65xx_channels_per_port; port_mask = data[0]; port_data = data[1]; bitshift = base_port_channel - base_bitfield_channel; |