|
@@ -362,31 +362,27 @@ static int skel_dio_insn_bits(struct comedi_device *dev,
|
|
|
|
|
|
static int skel_dio_insn_config(struct comedi_device *dev,
|
|
|
struct comedi_subdevice *s,
|
|
|
- struct comedi_insn *insn, unsigned int *data)
|
|
|
+ struct comedi_insn *insn,
|
|
|
+ unsigned int *data)
|
|
|
{
|
|
|
- int chan = CR_CHAN(insn->chanspec);
|
|
|
+ int ret;
|
|
|
|
|
|
- /* The input or output configuration of each digital line is
|
|
|
- * configured by a special insn_config instruction. chanspec
|
|
|
- * contains the channel to be changed, and data[0] contains the
|
|
|
- * value COMEDI_INPUT or COMEDI_OUTPUT. */
|
|
|
- switch (data[0]) {
|
|
|
- case INSN_CONFIG_DIO_OUTPUT:
|
|
|
- s->io_bits |= 1 << chan;
|
|
|
- break;
|
|
|
- case INSN_CONFIG_DIO_INPUT:
|
|
|
- s->io_bits &= ~(1 << chan);
|
|
|
- break;
|
|
|
- case INSN_CONFIG_DIO_QUERY:
|
|
|
- data[1] =
|
|
|
- (s->io_bits & (1 << chan)) ? COMEDI_OUTPUT : COMEDI_INPUT;
|
|
|
- return insn->n;
|
|
|
- break;
|
|
|
- default:
|
|
|
- return -EINVAL;
|
|
|
- break;
|
|
|
- }
|
|
|
- /* outw(s->io_bits,dev->iobase + SKEL_DIO_CONFIG); */
|
|
|
+ /*
|
|
|
+ * The input or output configuration of each digital line is
|
|
|
+ * configured by special insn_config instructions.
|
|
|
+ *
|
|
|
+ * chanspec contains the channel to be changed
|
|
|
+ * data[0] contains the instruction to perform on the channel
|
|
|
+ *
|
|
|
+ * Normally the core provided comedi_dio_insn_config() function
|
|
|
+ * can be used to handle the boilerplpate.
|
|
|
+ */
|
|
|
+ ret = comedi_dio_insn_config(dev, s, insn, data, 0);
|
|
|
+ if (ret)
|
|
|
+ return ret;
|
|
|
+
|
|
|
+ /* Update the hardware to the new configuration */
|
|
|
+ /* outw(s->io_bits, dev->iobase + SKEL_DIO_CONFIG); */
|
|
|
|
|
|
return insn->n;
|
|
|
}
|