On 2013-12-03 19:07, H Hartley Sweeten wrote:
Clean up the irq request in the attach of this driver and remove the
dev_{level} noise.

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/das1800.c | 64 ++++++++++++++------------------
  1 file changed, 27 insertions(+), 37 deletions(-)

diff --git a/drivers/staging/comedi/drivers/das1800.c 
b/drivers/staging/comedi/drivers/das1800.c
index 1880038..a913787 100644
--- a/drivers/staging/comedi/drivers/das1800.c
+++ b/drivers/staging/comedi/drivers/das1800.c
@@ -1488,7 +1488,6 @@ static int das1800_attach(struct comedi_device *dev,
        const struct das1800_board *thisboard = comedi_board(dev);
        struct das1800_private *devpriv;
        struct comedi_subdevice *s;
-       unsigned int irq = it->options[1];
        unsigned int dma0 = it->options[2];
        unsigned int dma1 = it->options[3];
        int board;
@@ -1522,43 +1521,34 @@ static int das1800_attach(struct comedi_device *dev,
                devpriv->iobase2 = iobase2;
        }

-       /* grab our IRQ */
-       if (irq) {
-               if (request_irq(irq, das1800_interrupt, 0,
-                               dev->driver->driver_name, dev)) {
-                       dev_dbg(dev->class_dev, "unable to allocate irq %u\n",
-                               irq);
-                       return -EINVAL;
-               }
-       }
-       dev->irq = irq;
+       /* only irqs 3, 5, 7, 10, 11, and 15 are valid */
+       if ((1 << it->options[1]) & 0x8ca8) {

Again, that test is only reliable if it->options[1] is greater than or equal to 0 and less than 32.

+               ret = request_irq(it->options[1], das1800_interrupt, 0,
+                                 dev->board_name, dev);
+               if (ret == 0) {
+                       dev->irq = it->options[1];

-       /*  set bits that tell card which irq to use */
-       switch (irq) {
-       case 0:
-               break;
-       case 3:
-               devpriv->irq_dma_bits |= 0x8;
-               break;
-       case 5:
-               devpriv->irq_dma_bits |= 0x10;
-               break;
-       case 7:
-               devpriv->irq_dma_bits |= 0x18;
-               break;
-       case 10:
-               devpriv->irq_dma_bits |= 0x28;
-               break;
-       case 11:
-               devpriv->irq_dma_bits |= 0x30;
-               break;
-       case 15:
-               devpriv->irq_dma_bits |= 0x38;
-               break;
-       default:
-               dev_err(dev->class_dev, "irq out of range\n");
-               return -EINVAL;
-               break;
+                       switch (dev->irq) {
+                       case 3:
+                               devpriv->irq_dma_bits |= 0x8;
+                               break;
+                       case 5:
+                               devpriv->irq_dma_bits |= 0x10;
+                               break;
+                       case 7:
+                               devpriv->irq_dma_bits |= 0x18;
+                               break;
+                       case 10:
+                               devpriv->irq_dma_bits |= 0x28;
+                               break;
+                       case 11:
+                               devpriv->irq_dma_bits |= 0x30;
+                               break;
+                       case 15:
+                               devpriv->irq_dma_bits |= 0x38;
+                               break;
+                       }
+               }
        }

        ret = das1800_init_dma(dev, dma0, dma1);



--
-=( Ian Abbott @ MEV Ltd.    E-mail: <abbo...@mev.co.uk>        )=-
-=( Tel: +44 (0)161 477 1898   FAX: +44 (0)161 718 3587         )=-
_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to