瀏覽代碼

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>
Ian Abbott 15 年之前
父節點
當前提交
2b49d7c40e
共有 1 個文件被更改,包括 3 次插入3 次删除
  1. 3 3
      drivers/staging/comedi/drivers/ni_65xx.c

+ 3 - 3
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;