diff options
author | Russell King <rmk+pcmcia@arm.linux.org.uk> | 2005-07-07 20:59:07 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@g5.osdl.org> | 2005-07-07 21:24:07 -0400 |
commit | 5bc6b68a103a6f4055890b5127ddca3a322751b0 (patch) | |
tree | 57195b4d7c6f0f97b111605f8eef6dccda83e0b8 /drivers/pcmcia/yenta_socket.c | |
parent | 4230dfc9c3f708f4765736b862aa313aa97e3c2e (diff) |
[PATCH] yenta: no CardBus if IRQ fails
If probing for the correct interrupt fails on yenta bridges, the driver falls
back to polling for interrupt actions. However, CardBus cards cannot be used
then.
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Signed-off-by: Dominik Brodowski <linux@dominikbrodowski.net>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/pcmcia/yenta_socket.c')
-rw-r--r-- | drivers/pcmcia/yenta_socket.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c index 1d593e1dc3d9..0e7aa8176692 100644 --- a/drivers/pcmcia/yenta_socket.c +++ b/drivers/pcmcia/yenta_socket.c | |||
@@ -868,14 +868,11 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket) | |||
868 | */ | 868 | */ |
869 | static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask) | 869 | static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 isa_irq_mask) |
870 | { | 870 | { |
871 | socket->socket.features |= SS_CAP_PAGE_REGS | SS_CAP_PCCARD | SS_CAP_CARDBUS; | ||
872 | socket->socket.map_size = 0x1000; | ||
873 | socket->socket.pci_irq = socket->cb_irq; | 871 | socket->socket.pci_irq = socket->cb_irq; |
874 | if (isa_probe) | 872 | if (isa_probe) |
875 | socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask); | 873 | socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask); |
876 | else | 874 | else |
877 | socket->socket.irq_mask = 0; | 875 | socket->socket.irq_mask = 0; |
878 | socket->socket.cb_dev = socket->dev; | ||
879 | 876 | ||
880 | printk(KERN_INFO "Yenta: ISA IRQ mask 0x%04x, PCI irq %d\n", | 877 | printk(KERN_INFO "Yenta: ISA IRQ mask 0x%04x, PCI irq %d\n", |
881 | socket->socket.irq_mask, socket->cb_irq); | 878 | socket->socket.irq_mask, socket->cb_irq); |
@@ -941,6 +938,9 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i | |||
941 | socket->socket.dev.dev = &dev->dev; | 938 | socket->socket.dev.dev = &dev->dev; |
942 | socket->socket.driver_data = socket; | 939 | socket->socket.driver_data = socket; |
943 | socket->socket.owner = THIS_MODULE; | 940 | socket->socket.owner = THIS_MODULE; |
941 | socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD; | ||
942 | socket->socket.map_size = 0x1000; | ||
943 | socket->socket.cb_dev = dev; | ||
944 | 944 | ||
945 | /* prepare struct yenta_socket */ | 945 | /* prepare struct yenta_socket */ |
946 | socket->dev = dev; | 946 | socket->dev = dev; |
@@ -1011,6 +1011,10 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i | |||
1011 | socket->poll_timer.data = (unsigned long)socket; | 1011 | socket->poll_timer.data = (unsigned long)socket; |
1012 | socket->poll_timer.expires = jiffies + HZ; | 1012 | socket->poll_timer.expires = jiffies + HZ; |
1013 | add_timer(&socket->poll_timer); | 1013 | add_timer(&socket->poll_timer); |
1014 | printk(KERN_INFO "Yenta: no PCI IRQ, CardBus support disabled for this socket.\n" | ||
1015 | KERN_INFO "Yenta: check your BIOS CardBus, BIOS IRQ or ACPI settings.\n"); | ||
1016 | } else { | ||
1017 | socket->socket.features |= SS_CAP_CARDBUS; | ||
1014 | } | 1018 | } |
1015 | 1019 | ||
1016 | /* Figure out what the dang thing can do for the PCMCIA layer... */ | 1020 | /* Figure out what the dang thing can do for the PCMCIA layer... */ |