staging: comedi: addi_apci_2032: always initialize interrupt subdevice
authorIan Abbott <abbotti@mev.co.uk>
Mon, 3 Dec 2012 18:15:46 +0000 (18:15 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 7 Jan 2013 22:10:02 +0000 (14:10 -0800)
Initialize the special interrupt subdevice as a digital input subdevice
even if the interrupt handler cannot be registered.  It's `insn_bits`
handler will still read the interrupt status register.  This hardware
status bits in this register might be valid even if they haven't been
enabled in the interrupt control register, but this needs to be checked.
In any case, initializing the subdevice as a digital input subdevice is
harmless.

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

index dd81ddc3d986a0188f8ea699dc39e187ac548d09..c302bf9ba4ecedbfcc8cf8c64301567ea00111fc 100644 (file)
@@ -377,6 +377,12 @@ static int apci2032_auto_attach(struct comedi_device *dev,
 
        /* Initialize the interrupt subdevice */
        s = &dev->subdevices[2];
+       s->type         = COMEDI_SUBD_DI;
+       s->subdev_flags = SDF_READABLE;
+       s->n_chan       = 2;
+       s->maxdata      = 1;
+       s->range_table  = &range_digital;
+       s->insn_bits    = apci2032_int_insn_bits;
        if (dev->irq) {
                struct apci2032_int_private *subpriv;
 
@@ -386,18 +392,11 @@ static int apci2032_auto_attach(struct comedi_device *dev,
                        return -ENOMEM;
                spin_lock_init(&subpriv->spinlock);
                s->private      = subpriv;
-               s->type         = COMEDI_SUBD_DI;
                s->subdev_flags = SDF_READABLE | SDF_CMD_READ;
-               s->n_chan       = 2;
                s->len_chanlist = 2;
-               s->maxdata      = 1;
-               s->range_table  = &range_digital;
-               s->insn_bits    = apci2032_int_insn_bits;
                s->do_cmdtest   = apci2032_int_cmdtest;
                s->do_cmd       = apci2032_int_cmd;
                s->cancel       = apci2032_int_cancel;
-       } else {
-               s->type         = COMEDI_SUBD_UNUSED;
        }
 
        return 0;