Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

pcmcia: Fix up legacy driver IRQs

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>

authored by

Alan Cox and committed by
John W. Linville
47cbb110 638af073

+8 -8
+1 -1
drivers/net/wireless/airo_cs.c
··· 147 147 DEBUG(0, "airo_attach()\n"); 148 148 149 149 /* Interrupt setup */ 150 - p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE; 150 + p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 151 151 p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID; 152 152 p_dev->irq.Handler = NULL; 153 153
+1 -1
drivers/net/wireless/atmel_cs.c
··· 158 158 DEBUG(0, "atmel_attach()\n"); 159 159 160 160 /* Interrupt setup */ 161 - p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE; 161 + p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING; 162 162 p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID; 163 163 p_dev->irq.Handler = NULL; 164 164
+1 -1
drivers/net/wireless/netwave_cs.c
··· 398 398 link->io.IOAddrLines = 5; 399 399 400 400 /* Interrupt setup */ 401 - link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; 401 + link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; 402 402 link->irq.IRQInfo1 = IRQ_LEVEL_ID; 403 403 link->irq.Handler = &netwave_interrupt; 404 404
+1 -1
drivers/net/wireless/orinoco_cs.c
··· 121 121 link->priv = dev; 122 122 123 123 /* Interrupt setup */ 124 - link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; 124 + link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; 125 125 link->irq.IRQInfo1 = IRQ_LEVEL_ID; 126 126 link->irq.Handler = orinoco_interrupt; 127 127 link->irq.Instance = dev;
+1 -1
drivers/net/wireless/ray_cs.c
··· 325 325 p_dev->io.IOAddrLines = 5; 326 326 327 327 /* Interrupt setup. For PCMCIA, driver takes what's given */ 328 - p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; 328 + p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; 329 329 p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID; 330 330 p_dev->irq.Handler = &ray_interrupt; 331 331
+1 -1
drivers/net/wireless/spectrum_cs.c
··· 195 195 link->priv = dev; 196 196 197 197 /* Interrupt setup */ 198 - link->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; 198 + link->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; 199 199 link->irq.IRQInfo1 = IRQ_LEVEL_ID; 200 200 link->irq.Handler = orinoco_interrupt; 201 201 link->irq.Instance = dev;
+1 -1
drivers/net/wireless/wavelan_cs.c
··· 4496 4496 p_dev->io.IOAddrLines = 3; 4497 4497 4498 4498 /* Interrupt setup */ 4499 - p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; 4499 + p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; 4500 4500 p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID; 4501 4501 p_dev->irq.Handler = wavelan_interrupt; 4502 4502
+1 -1
drivers/net/wireless/wl3501_cs.c
··· 1917 1917 p_dev->io.IOAddrLines = 5; 1918 1918 1919 1919 /* Interrupt setup */ 1920 - p_dev->irq.Attributes = IRQ_TYPE_EXCLUSIVE | IRQ_HANDLE_PRESENT; 1920 + p_dev->irq.Attributes = IRQ_TYPE_DYNAMIC_SHARING | IRQ_HANDLE_PRESENT; 1921 1921 p_dev->irq.IRQInfo1 = IRQ_LEVEL_ID; 1922 1922 p_dev->irq.Handler = wl3501_interrupt; 1923 1923