tree 57195b4d7c6f0f97b111605f8eef6dccda83e0b8
parent 4230dfc9c3f708f4765736b862aa313aa97e3c2e
author Russell King <[EMAIL PROTECTED]> Fri, 08 Jul 2005 07:59:07 -0700
committer Linus Torvalds <[EMAIL PROTECTED]> Fri, 08 Jul 2005 08:24:07 -0700

[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 <[EMAIL PROTECTED]>
Signed-off-by: Dominik Brodowski <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>

 drivers/pcmcia/cs.c           |   15 +++++++++++----
 drivers/pcmcia/yenta_socket.c |   10 +++++++---
 2 files changed, 18 insertions(+), 7 deletions(-)

diff --git a/drivers/pcmcia/cs.c b/drivers/pcmcia/cs.c
--- a/drivers/pcmcia/cs.c
+++ b/drivers/pcmcia/cs.c
@@ -215,6 +215,13 @@ int pcmcia_register_socket(struct pcmcia
        list_add_tail(&socket->socket_list, &pcmcia_socket_list);
        up_write(&pcmcia_socket_list_rwsem);
 
+#ifndef CONFIG_CARDBUS
+       /*
+        * If we do not support Cardbus, ensure that
+        * the Cardbus socket capability is disabled.
+        */
+       socket->features &= ~SS_CAP_CARDBUS;
+#endif
 
        /* set proper values in socket->dev */
        socket->dev.class_data = socket;
@@ -448,11 +455,11 @@ static int socket_setup(struct pcmcia_so
        }
 
        if (status & SS_CARDBUS) {
+               if (!(skt->features & SS_CAP_CARDBUS)) {
+                       cs_err(skt, "cardbus cards are not supported.\n");
+                       return CS_BAD_TYPE;
+               }
                skt->state |= SOCKET_CARDBUS;
-#ifndef CONFIG_CARDBUS
-               cs_err(skt, "cardbus cards are not supported.\n");
-               return CS_BAD_TYPE;
-#endif
        }
 
        /*
diff --git a/drivers/pcmcia/yenta_socket.c b/drivers/pcmcia/yenta_socket.c
--- a/drivers/pcmcia/yenta_socket.c
+++ b/drivers/pcmcia/yenta_socket.c
@@ -868,14 +868,11 @@ static int yenta_probe_cb_irq(struct yen
  */
 static void yenta_get_socket_capabilities(struct yenta_socket *socket, u32 
isa_irq_mask)
 {
-       socket->socket.features |= SS_CAP_PAGE_REGS | SS_CAP_PCCARD | 
SS_CAP_CARDBUS;
-       socket->socket.map_size = 0x1000;
        socket->socket.pci_irq = socket->cb_irq;
        if (isa_probe)
                socket->socket.irq_mask = yenta_probe_irq(socket, isa_irq_mask);
        else
                socket->socket.irq_mask = 0;
-       socket->socket.cb_dev = socket->dev;
 
        printk(KERN_INFO "Yenta: ISA IRQ mask 0x%04x, PCI irq %d\n",
               socket->socket.irq_mask, socket->cb_irq);
@@ -941,6 +938,9 @@ static int __devinit yenta_probe (struct
        socket->socket.dev.dev = &dev->dev;
        socket->socket.driver_data = socket;
        socket->socket.owner = THIS_MODULE;
+       socket->socket.features = SS_CAP_PAGE_REGS | SS_CAP_PCCARD;
+       socket->socket.map_size = 0x1000;
+       socket->socket.cb_dev = dev;
 
        /* prepare struct yenta_socket */
        socket->dev = dev;
@@ -1011,6 +1011,10 @@ static int __devinit yenta_probe (struct
                socket->poll_timer.data = (unsigned long)socket;
                socket->poll_timer.expires = jiffies + HZ;
                add_timer(&socket->poll_timer);
+               printk(KERN_INFO "Yenta: no PCI IRQ, CardBus support disabled 
for this socket.\n"
+                      KERN_INFO "Yenta: check your BIOS CardBus, BIOS IRQ or 
ACPI settings.\n");
+       } else {
+               socket->socket.features |= SS_CAP_CARDBUS;
        }
 
        /* Figure out what the dang thing can do for the PCMCIA layer... */
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to