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@xxxxxxxxxxxxxxxxxxx> Cc: Ian Abbott <abbotti@xxxxxxxxx> Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> --- 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 devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel