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 <[email protected]>
Cc: Ian Abbott <[email protected]>
Cc: Greg Kroah-Hartman <[email protected]>
---
 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

_______________________________________________
devel mailing list
[email protected]
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to