[PATCH] staging: comedi: ke_counter: expose clock source options to user space

H Hartley Sweeten hsweeten at visionengravers.com
Fri Jun 20 17:39:43 UTC 2014


As pointed out by Ian Abbott, the INSN_CONFIG_SET_CLOCK_SRC options should
be exposed in the user header comedi.h.

Signed-off-by: H Hartley Sweeten <hsweeten at visionengravers.com>
Cc: Ian Abbott <abbotti at mev.co.uk>
Cc: Greg Kroah-Hartman <gregkh at linuxfoundation.org>
---
 drivers/staging/comedi/comedi.h             | 11 ++++++++++
 drivers/staging/comedi/drivers/ke_counter.c | 33 ++++++++++++++++++-----------
 2 files changed, 32 insertions(+), 12 deletions(-)

diff --git a/drivers/staging/comedi/comedi.h b/drivers/staging/comedi/comedi.h
index 6bbbe5b..dbaeba7 100644
--- a/drivers/staging/comedi/comedi.h
+++ b/drivers/staging/comedi/comedi.h
@@ -976,4 +976,15 @@ enum amplc_dio_gate_source {
 	AMPLC_DIO_GAT_NPAT_GONE	/* negated "pattern gone away" */
 };
 
+/*
+ * Values for setting a clock source with INSN_CONFIG_SET_CLOCK_SRC for
+ * the counter subdevice on the Kolter Electronic PCI-Counter board
+ * (ke_counter driver).
+ */
+enum ke_counter_clock_source {
+	KE_CLK_20MHZ,	/* internal 20MHz (default) */
+	KE_CLK_4MHZ,	/* internal 4MHz (option) */
+	KE_CLK_EXT	/* external clock on pin 21 of D-Sub */
+};
+
 #endif /* _COMEDI_H */
diff --git a/drivers/staging/comedi/drivers/ke_counter.c b/drivers/staging/comedi/drivers/ke_counter.c
index ed873c4..f46722c 100644
--- a/drivers/staging/comedi/drivers/ke_counter.c
+++ b/drivers/staging/comedi/drivers/ke_counter.c
@@ -106,33 +106,42 @@ static int ke_counter_insn_config(struct comedi_device *dev,
 				  struct comedi_insn *insn,
 				  unsigned int *data)
 {
+	unsigned char src;
+
 	switch (data[0]) {
 	case INSN_CONFIG_SET_CLOCK_SRC:
 		switch (data[1]) {
-		case KE_OSC_SEL_EXT:	/* Pin 21 on D-sub */
-		case KE_OSC_SEL_4MHZ:	/* option */
-		case KE_OSC_SEL_20MHZ:	/* default */
+		case KE_CLK_20MHZ:	/* default */
+			src = KE_OSC_SEL_20MHZ;
+			break;
+		case KE_CLK_4MHZ:	/* option */
+			src = KE_OSC_SEL_4MHZ;
+			break;
+		case KE_CLK_EXT:	/* Pin 21 on D-sub */
+			src = KE_OSC_SEL_EXT;
 			break;
 		default:
 			return -EINVAL;
 		}
-		outb(data[1], dev->iobase + KE_OSC_SEL_REG);
+		outb(src, dev->iobase + KE_OSC_SEL_REG);
 		break;
 	case INSN_CONFIG_GET_CLOCK_SRC:
-		data[1] = inb(dev->iobase + KE_OSC_SEL_REG);
-		switch (data[1]) {
-		case KE_OSC_SEL_EXT:
-			data[2] = 0;	/* Unknown */
+		src = inb(dev->iobase + KE_OSC_SEL_REG);
+		switch (src) {
+		case KE_OSC_SEL_20MHZ:
+			data[1] = KE_CLK_20MHZ;
+			data[2] = 50;	/* 50ns */
 			break;
 		case KE_OSC_SEL_4MHZ:
+			data[1] = KE_CLK_4MHZ;
 			data[2] = 250;	/* 250ns */
 			break;
-		case KE_OSC_SEL_20MHZ:
-			data[2] = 50;	/* 50ns */
+		case KE_OSC_SEL_EXT:
+			data[1] = KE_CLK_EXT;
+			data[2] = 0;	/* Unknown */
 			break;
 		default:
-			data[2] = 0;	/* Invalid? */
-			break;
+			return -EINVAL;
 		}
 		break;
 	case INSN_CONFIG_RESET:
-- 
1.9.3



More information about the devel mailing list