Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5fc39185 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman
Browse files

staging: comedi: ke_counter: expose clock source options to user space



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: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Reviewed-by: default avatarIan Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 49d74d70
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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 */
+21 −12
Original line number Diff line number Diff line
@@ -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: