[PATCH 05/17] staging: comedi: ni_65xx: remove 'dio_direction' from private data

H Hartley Sweeten hsweeten at visionengravers.com
Fri Jun 20 18:52:11 UTC 2014


The IO Select registers are readable. Remove the need for the
'dio_direction' member in the private data by just checking the
register value for the INSN_CONFIG_DIO_QUERY instruction.

Also, refactor the switch statement to return -EINVAL for unhandled
instructions and have the (*insn_config) return insn->n normally.

Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
Cc: Ian Abbott <abbotti at mev.co.uk>
Cc: Greg Kroah-Hartman <gregk at linuxfoundation.org>
---
 drivers/staging/comedi/drivers/ni_65xx.c | 21 ++++++++++-----------
 1 file changed, 10 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/comedi/drivers/ni_65xx.c b/drivers/staging/comedi/drivers/ni_65xx.c
index c8cd0e1..4b3f504 100644
--- a/drivers/staging/comedi/drivers/ni_65xx.c
+++ b/drivers/staging/comedi/drivers/ni_65xx.c
@@ -272,7 +272,6 @@ static inline unsigned ni_65xx_total_num_ports(const struct ni_65xx_board
 struct ni_65xx_private {
 	void __iomem *mmio;
 	unsigned short output_bits[NI_65XX_MAX_NUM_PORTS];
-	unsigned short dio_direction[NI_65XX_MAX_NUM_PORTS];
 };
 
 struct ni_65xx_subdevice_private {
@@ -322,35 +321,35 @@ static int ni_65xx_dio_insn_config(struct comedi_device *dev,
 			val &= ~chan_mask;
 		}
 		writeb(val, devpriv->mmio + NI_65XX_FILTER_ENA(port));
-
-		return insn->n;
+		break;
 
 	case INSN_CONFIG_DIO_OUTPUT:
 		if (s->type != COMEDI_SUBD_DIO)
 			return -EINVAL;
-		devpriv->dio_direction[port] = COMEDI_OUTPUT;
 		writeb(NI_65XX_IO_SEL_OUTPUT,
 		       devpriv->mmio + NI_65XX_IO_SEL_REG(port));
-		return 1;
 		break;
+
 	case INSN_CONFIG_DIO_INPUT:
 		if (s->type != COMEDI_SUBD_DIO)
 			return -EINVAL;
-		devpriv->dio_direction[port] = COMEDI_INPUT;
 		writeb(NI_65XX_IO_SEL_INPUT,
 		       devpriv->mmio + NI_65XX_IO_SEL_REG(port));
-		return 1;
 		break;
+
 	case INSN_CONFIG_DIO_QUERY:
 		if (s->type != COMEDI_SUBD_DIO)
 			return -EINVAL;
-		data[1] = devpriv->dio_direction[port];
-		return insn->n;
+		val = readb(devpriv->mmio + NI_65XX_IO_SEL_REG(port));
+		data[1] = (val == NI_65XX_IO_SEL_INPUT) ? COMEDI_INPUT
+							: COMEDI_OUTPUT;
 		break;
+
 	default:
-		break;
+		return -EINVAL;
 	}
-	return -EINVAL;
+
+	return insn->n;
 }
 
 static int ni_65xx_dio_insn_bits(struct comedi_device *dev,
-- 
1.9.3



More information about the devel mailing list