Since the irq is only needed for async command support, modify the attach
of the subdevices so that the command support is only hooked up if the irq
request was successful.

Signed-off-by: H Hartley Sweeten <hswee...@visionengravers.com>
Cc: Ian Abbott <abbo...@mev.co.uk>
Cc: Greg Kroah-Hartman <gre...@linuxfoundation.org>
---
 drivers/staging/comedi/drivers/adl_pci9111.c | 24 +++++++++++++-----------
 1 file changed, 13 insertions(+), 11 deletions(-)

diff --git a/drivers/staging/comedi/drivers/adl_pci9111.c 
b/drivers/staging/comedi/drivers/adl_pci9111.c
index a270a86..280c8dc 100644
--- a/drivers/staging/comedi/drivers/adl_pci9111.c
+++ b/drivers/staging/comedi/drivers/adl_pci9111.c
@@ -858,12 +858,11 @@ static int pci9111_auto_attach(struct comedi_device *dev,
 
        pci9111_reset(dev);
 
-       if (pcidev->irq > 0) {
+       if (pcidev->irq) {
                ret = request_irq(pcidev->irq, pci9111_interrupt,
                                  IRQF_SHARED, dev->board_name, dev);
-               if (ret)
-                       return ret;
-               dev->irq = pcidev->irq;
+               if (ret == 0)
+                       dev->irq = pcidev->irq;
        }
 
        ret = comedi_alloc_subdevices(dev, 4);
@@ -871,18 +870,21 @@ static int pci9111_auto_attach(struct comedi_device *dev,
                return ret;
 
        s = &dev->subdevices[0];
-       dev->read_subdev = s;
        s->type         = COMEDI_SUBD_AI;
-       s->subdev_flags = SDF_READABLE | SDF_COMMON | SDF_CMD_READ;
+       s->subdev_flags = SDF_READABLE | SDF_COMMON;
        s->n_chan       = 16;
        s->maxdata      = 0xffff;
-       s->len_chanlist = 16;
        s->range_table  = &pci9111_ai_range;
-       s->cancel       = pci9111_ai_cancel;
        s->insn_read    = pci9111_ai_insn_read;
-       s->do_cmdtest   = pci9111_ai_do_cmd_test;
-       s->do_cmd       = pci9111_ai_do_cmd;
-       s->munge        = pci9111_ai_munge;
+       if (dev->irq) {
+               dev->read_subdev = s;
+               s->subdev_flags |= SDF_CMD_READ;
+               s->len_chanlist = s->n_chan;
+               s->do_cmdtest   = pci9111_ai_do_cmd_test;
+               s->do_cmd       = pci9111_ai_do_cmd;
+               s->cancel       = pci9111_ai_cancel;
+               s->munge        = pci9111_ai_munge;
+       }
 
        s = &dev->subdevices[1];
        s->type         = COMEDI_SUBD_AO;
-- 
1.8.4.4

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to