pcmcia: Fix up legacy driver IRQs
authorAlan Cox <alan@lxorguk.ukuu.org.uk>
Tue, 23 Sep 2008 12:53:09 +0000 (13:53 +0100)
committerJohn W. Linville <linville@tuxdriver.com>
Wed, 24 Sep 2008 20:18:04 +0000 (16:18 -0400)
The PCMCIA layer obsoleted asking for per device private IRQS some years
ago and all the drivers by inspection correctly use dev_id and handle
shared interrupts [they get em anyway in most PCI bridged PCMCIA/Cardbus]
so can be adjusted.

This gets rid of the various bugs reported where there is spewage about
conflicting irq types and sometimes the driver won't load.

(Note I don't have all of these devices to test each one beyond by inspection)

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
drivers/net/wireless/airo_cs.c
drivers/net/wireless/atmel_cs.c
drivers/net/wireless/netwave_cs.c
drivers/net/wireless/orinoco_cs.c
drivers/net/wireless/ray_cs.c
drivers/net/wireless/spectrum_cs.c
drivers/net/wireless/wavelan_cs.c
drivers/net/wireless/wl3501_cs.c

index f12355398fe7ca19186d976374c216e07a89c6bf..fd72e427cb2830183b729fbae965ee88b5003da2 100644 (file)
@@ -147,7 +147,7 @@ static int airo_probe(struct pcmcia_device *p_dev)
        DEBUG(0, "airo_attach()\n");
 
        /* Interrupt setup */
-       p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+       p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
        p_dev->irq.Handler = NULL;
        
index 12617cd0b78eb0be40247cfec84e874935ef5e64..d2388e8d179a440dce544ec598d857cc3e8b5b5f 100644 (file)
@@ -158,7 +158,7 @@ static int atmel_probe(struct pcmcia_device *p_dev)
        DEBUG(0, "atmel_attach()\n");
 
        /* Interrupt setup */
-       p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE;
+       p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING;
        p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
        p_dev->irq.Handler = NULL;
 
index f479c1af67822dfdf3813c22e8e9f60846401da7..25bae7933aa587fa22ba5b4b402c80011f3f49bf 100644 (file)
@@ -398,7 +398,7 @@ static int netwave_probe(struct pcmcia_device *link)
     link->io.IOAddrLines = 5;
     
     /* Interrupt setup */
-    link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+    link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
     link->irq.IRQInfo1 = IRQ_LEVEL_ID;
     link->irq.Handler = &netwave_interrupt;
     
index 1ccf5a40cf06370afbf70817b0d76516e411236e..9eaa252c2430b441bf6671a9a9a354ad9bbe4c0d 100644 (file)
@@ -121,7 +121,7 @@ orinoco_cs_probe(struct pcmcia_device *link)
        link->priv = dev;
 
        /* Interrupt setup */
-       link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = orinoco_interrupt;
        link->irq.Instance = dev; 
index 963960dc30f206494f9420a7cb3f799d5b931080..44da0d19b5c8d9c0ed8a96d5996e88c5d2b452fe 100644 (file)
@@ -325,7 +325,7 @@ static int ray_probe(struct pcmcia_device *p_dev)
     p_dev->io.IOAddrLines = 5;
 
     /* Interrupt setup. For PCMCIA, driver takes what's given */
-    p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+    p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
     p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
     p_dev->irq.Handler = &ray_interrupt;
 
index e368759d1d89f8346bc06e00b675b2cda91517e3..67b26d3c3cd50548a1b4639ffb949b4345a98906 100644 (file)
@@ -195,7 +195,7 @@ spectrum_cs_probe(struct pcmcia_device *link)
        link->priv = dev;
 
        /* Interrupt setup */
-       link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+       link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
        link->irq.IRQInfo1 = IRQ_LEVEL_ID;
        link->irq.Handler = orinoco_interrupt;
        link->irq.Instance = dev; 
index 00a3559e5aa4c362d62b0baae8a545bd853ac3c6..b5de38a9b791bd3611678051e8d26d1d252e627b 100644 (file)
@@ -4496,7 +4496,7 @@ wavelan_probe(struct pcmcia_device *p_dev)
   p_dev->io.IOAddrLines = 3;
 
   /* Interrupt setup */
-  p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+  p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
   p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID;
   p_dev->irq.Handler = wavelan_interrupt;
 
index b6d4e04b8ab4765991fcf22d536349236894dbc7..74a5ad2f1223cc23c21c7e593a3f42b8ebd3e41f 100644 (file)
@@ -1917,7 +1917,7 @@ static int wl3501_probe(struct pcmcia_device *p_dev)
        p_dev->io.IOAddrLines   = 5;
 
        /* Interrupt setup */
-       p_dev->irq.Attributes   = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT;
+       p_dev->irq.Attributes   = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT;
        p_dev->irq.IRQInfo1     = IRQ_LEVEL_ID;
        p_dev->irq.Handler = wl3501_interrupt;