--- drivers/pcmcia/cardbus.c.original 2003-01-14 19:38:49.000000000 +0200 +++ drivers/pcmcia/cardbus.c 2003-01-15 18:21:40.000000000 +0200 @@ -285,25 +285,29 @@ dev->dev.dma_mask = &dev->dma_mask; pci_setup_device(dev); - if (pci_enable_device(dev)) - continue; strcpy(dev->dev.bus_id, dev->slot_name); - /* FIXME: Do we need to enable the expansion ROM? */ + /* We need to assign resources for expansion ROM. */ for (r = 0; r < 7; r++) { struct resource *res = dev->resource + r; - if (res->flags) + if (!res->start && res->end) pci_assign_resource(dev, r); } /* Does this function have an interrupt at all? */ pci_readb(dev, PCI_INTERRUPT_PIN, &irq_pin); - if (irq_pin) { + if (irq_pin) dev->irq = irq; - pci_writeb(dev, PCI_INTERRUPT_LINE, irq); - } + + /* pci_enable_device needs to be called after pci_assign_resource */ + /* because it returns an error if (!res->start && res->end). */ + if (pci_enable_device(dev)) + continue; + if (irq_pin) + pci_writeb(dev, PCI_INTERRUPT_LINE, irq); + device_register(&dev->dev); pci_insert_device(dev, bus); }