[PATCH] fix pcmcia_request_irq() for multifunction card
authorDaniel Ritz <daniel.ritz@gmx.ch>
Fri, 9 Sep 2005 20:03:25 +0000 (13:03 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Fri, 9 Sep 2005 20:57:47 +0000 (13:57 -0700)
multifunction cards need to have the same irq assigned to both functions.
the code tries that but fails because ret is still set to CS_IN_USE which
results in the function having the CB irq assigned.  yenta_set_socket then
just changes the irq routing to use the PCI interrupt but the first
functions irq handler is registered on an ISA interrupt.  boom.

Signed-off-by: Daniel Ritz <daniel.ritz@gmx.ch>
Cc: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
drivers/pcmcia/pcmcia_resource.c

index 599b116d9747211514a6522625e6830756f0d492..c0f4eb49177bfffb2a6b8434c9987243c1c40f32 100644 (file)
@@ -832,7 +832,8 @@ int pcmcia_request_irq(struct pcmcia_device *p_dev, irq_req_t *req)
                }
        }
 #endif
-       if (ret) {
+       /* only assign PCI irq if no IRQ already assigned */
+       if (ret && !s->irq.AssignedIRQ) {
                if (!s->pci_irq)
                        return ret;
                irq = s->pci_irq;