staging: comedi: dt2801: do INSN_CONFIG properly for DIO subdevice.
authorIan Abbott <abbotti@mev.co.uk>
Mon, 9 Jan 2012 15:48:35 +0000 (15:48 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Feb 2012 17:55:53 +0000 (09:55 -0800)
Handle INSN_CONFIG_DIO_INPUT, INSN_CONFIG_DIO_OUTPUT and
INSN_CONFIG_DIO_QUERY in data[0].

Signed-off-by: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/staging/comedi/drivers/dt2801.c

index 5cce1b5f448479a780143127df79a79874adb623..b85c8366a396f24c5b199ed9fe29846d5b98fef1 100644 (file)
@@ -720,12 +720,20 @@ static int dt2801_dio_insn_config(struct comedi_device *dev,
                which = 1;
 
        /* configure */
-       if (data[0]) {
+       switch (data[0]) {
+       case INSN_CONFIG_DIO_OUTPUT:
                s->io_bits = 0xff;
                dt2801_writecmd(dev, DT_C_SET_DIGOUT);
-       } else {
+               break;
+       case INSN_CONFIG_DIO_INPUT:
                s->io_bits = 0;
                dt2801_writecmd(dev, DT_C_SET_DIGIN);
+               break;
+       case INSN_CONFIG_DIO_QUERY:
+               data[1] = s->io_bits ? COMEDI_OUTPUT : COMEDI_INPUT;
+               return insn->n;
+       default:
+               return -EINVAL;
        }
        dt2801_writedata(dev, which);