Просмотр исходного кода

Staging: comedi: ni_65xx.c: fix output inversion problem.

When reading DO subdevice with inverted outputs invert the values read
back from the ports to match the inversion of values written.

Signed-off-by: Frank Mori Hess <fmhess@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Ian Abbott 15 лет назад
Родитель
Сommit
078a10df24
1 измененных файлов с 6 добавлено и 0 удалено
  1. 6 0
      drivers/staging/comedi/drivers/ni_65xx.c

+ 6 - 0
drivers/staging/comedi/drivers/ni_65xx.c

@@ -457,6 +457,12 @@ static int ni_65xx_dio_insn_bits(struct comedi_device *dev,
 		port_read_bits =
 		port_read_bits =
 		    readb(private(dev)->mite->daq_io_addr + Port_Data(port));
 		    readb(private(dev)->mite->daq_io_addr + Port_Data(port));
 /* printk("read 0x%x from port %i\n", port_read_bits, port); */
 /* printk("read 0x%x from port %i\n", port_read_bits, port); */
+		if (s->type == COMEDI_SUBD_DO && board(dev)->invert_outputs) {
+			/* Outputs inverted, so invert value read back from
+			 * DO subdevice.  (Does not apply to boards with DIO
+			 * subdevice.) */
+			port_read_bits ^= 0xFF;
+		}
 		if (bitshift > 0) {
 		if (bitshift > 0) {
 			port_read_bits <<= bitshift;
 			port_read_bits <<= bitshift;
 		} else {
 		} else {