linux 2.6.16.38 w/ vs2.0.3-rc1
[linux-2.6.git] / drivers / pcmcia / yenta_socket.c
index 1344746..4145eb8 100644 (file)
@@ -287,10 +287,7 @@ static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
        struct yenta_socket *socket = container_of(sock, struct yenta_socket, socket);
        u16 bridge;
 
-       /* if powering down: do it immediately */
-       if (state->Vcc == 0)
-               yenta_set_power(socket, state);
-
+       yenta_set_power(socket, state);
        socket->io_irq = state->io_irq;
        bridge = config_readw(socket, CB_BRIDGE_CONTROL) & ~(CB_BRIDGE_CRST | CB_BRIDGE_INTR);
        if (cb_readl(socket, CB_SOCKET_STATE) & CB_CBCARD) {
@@ -342,10 +339,6 @@ static int yenta_set_socket(struct pcmcia_socket *sock, socket_state_t *state)
        /* Socket event mask: get card insert/remove events.. */
        cb_writel(socket, CB_SOCKET_EVENT, -1);
        cb_writel(socket, CB_SOCKET_MASK, CB_CDMASK);
-
-       /* if powering up: do it as the last step when the socket is configured */
-       if (state->Vcc != 0)
-               yenta_set_power(socket, state);
        return 0;
 }
 
@@ -923,7 +916,7 @@ static int yenta_probe_cb_irq(struct yenta_socket *socket)
 
        socket->probe_status = 0;
 
-       if (request_irq(socket->cb_irq, yenta_probe_handler, IRQF_SHARED, "yenta", socket)) {
+       if (request_irq(socket->cb_irq, yenta_probe_handler, SA_SHIRQ, "yenta", socket)) {
                printk(KERN_WARNING "Yenta: request_irq() in yenta_probe_cb_irq() failed!\n");
                return -1;
        }
@@ -1005,77 +998,6 @@ static void yenta_config_init(struct yenta_socket *socket)
        config_writew(socket, CB_BRIDGE_CONTROL, bridge);
 }
 
-/**
- * yenta_fixup_parent_bridge - Fix subordinate bus# of the parent bridge
- * @cardbus_bridge: The PCI bus which the CardBus bridge bridges to
- *
- * Checks if devices on the bus which the CardBus bridge bridges to would be
- * invisible during PCI scans because of a misconfigured subordinate number
- * of the parent brige - some BIOSes seem to be too lazy to set it right.
- * Does the fixup carefully by checking how far it can go without conflicts.
- * See http://bugzilla.kernel.org/show_bug.cgi?id=2944 for more information.
- */
-static void yenta_fixup_parent_bridge(struct pci_bus *cardbus_bridge)
-{
-       struct list_head *tmp;
-       unsigned char upper_limit;
-       /*
-        * We only check and fix the parent bridge: All systems which need
-        * this fixup that have been reviewed are laptops and the only bridge
-        * which needed fixing was the parent bridge of the CardBus bridge:
-        */
-       struct pci_bus *bridge_to_fix = cardbus_bridge->parent;
-
-       /* Check bus numbers are already set up correctly: */
-       if (bridge_to_fix->subordinate >= cardbus_bridge->subordinate)
-               return; /* The subordinate number is ok, nothing to do */
-
-       if (!bridge_to_fix->parent)
-               return; /* Root bridges are ok */
-
-       /* stay within the limits of the bus range of the parent: */
-       upper_limit = bridge_to_fix->parent->subordinate;
-
-       /* check the bus ranges of all silbling bridges to prevent overlap */
-       list_for_each(tmp, &bridge_to_fix->parent->children) {
-               struct pci_bus * silbling = pci_bus_b(tmp);
-               /*
-                * If the silbling has a higher secondary bus number
-                * and it's secondary is equal or smaller than our
-                * current upper limit, set the new upper limit to
-                * the bus number below the silbling's range:
-                */
-               if (silbling->secondary > bridge_to_fix->subordinate
-                   && silbling->secondary <= upper_limit)
-                       upper_limit = silbling->secondary - 1;
-       }
-
-       /* Show that the wanted subordinate number is not possible: */
-       if (cardbus_bridge->subordinate > upper_limit)
-               printk(KERN_WARNING "Yenta: Upper limit for fixing this "
-                       "bridge's parent bridge: #%02x\n", upper_limit);
-
-       /* If we have room to increase the bridge's subordinate number, */
-       if (bridge_to_fix->subordinate < upper_limit) {
-
-               /* use the highest number of the hidden bus, within limits */
-               unsigned char subordinate_to_assign =
-                       min(cardbus_bridge->subordinate, upper_limit);
-
-               printk(KERN_INFO "Yenta: Raising subordinate bus# of parent "
-                       "bus (#%02x) from #%02x to #%02x\n",
-                       bridge_to_fix->number,
-                       bridge_to_fix->subordinate, subordinate_to_assign);
-
-               /* Save the new subordinate in the bus struct of the bridge */
-               bridge_to_fix->subordinate = subordinate_to_assign;
-
-               /* and update the PCI config space with the new subordinate */
-               pci_write_config_byte(bridge_to_fix->self,
-                       PCI_SUBORDINATE_BUS, bridge_to_fix->subordinate);
-       }
-}
-
 /*
  * Initialize a cardbus controller. Make sure we have a usable
  * interrupt, and that we can map the cardbus area. Fill in the
@@ -1172,7 +1094,7 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
 
        /* We must finish initialization here */
 
-       if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, IRQF_SHARED, "yenta", socket)) {
+       if (!socket->cb_irq || request_irq(socket->cb_irq, yenta_interrupt, SA_SHIRQ, "yenta", socket)) {
                /* No IRQ or request_irq failed. Poll */
                socket->cb_irq = 0; /* But zero is a valid IRQ number. */
                init_timer(&socket->poll_timer);
@@ -1191,8 +1113,6 @@ static int __devinit yenta_probe (struct pci_dev *dev, const struct pci_device_i
        yenta_get_socket_capabilities(socket, isa_interrupts);
        printk(KERN_INFO "Socket status: %08x\n", cb_readl(socket, CB_SOCKET_STATE));
 
-       yenta_fixup_parent_bridge(dev->subordinate);
-
        /* Register it with the pcmcia layer.. */
        ret = pcmcia_register_socket(&socket->socket);
        if (ret == 0) {
@@ -1312,7 +1232,6 @@ static struct pci_device_id yenta_table [] = {
 
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX21_XX11, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X515, TI12XX),
-       CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_XX12, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X420, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_X620, TI12XX),
        CB_ID(PCI_VENDOR_ID_TI, PCI_DEVICE_ID_TI_7410, TI12XX),