X-Git-Url: https://git.karo-electronics.de/?a=blobdiff_plain;f=drivers%2Fpcmcia%2Fcardbus.c;h=714baaeb6da1257a264c903b4b36d67570c15486;hb=f96ee7a41ed93ce5962961eb07c2afe8cddb6603;hp=1d755e20880cebff5015681c217dd4d672c16c97;hpb=5028770a42e7bc4d15791a44c28f0ad539323807;p=karo-tx-linux.git diff --git a/drivers/pcmcia/cardbus.c b/drivers/pcmcia/cardbus.c index 1d755e20880c..714baaeb6da1 100644 --- a/drivers/pcmcia/cardbus.c +++ b/drivers/pcmcia/cardbus.c @@ -40,8 +40,6 @@ /*====================================================================*/ -#define FIND_FIRST_BIT(n) ((n) - ((n) & ((n)-1))) - /* Offsets in the Expansion ROM Image Header */ #define ROM_SIGNATURE 0x0000 /* 2 bytes */ #define ROM_DATA_PTR 0x0018 /* 2 bytes */ @@ -138,20 +136,23 @@ int read_cb_mem(struct pcmcia_socket * s, int space, u_int addr, u_int len, void cs_dbg(s, 3, "read_cb_mem(%d, %#x, %u)\n", space, addr, len); - dev = pci_find_slot(s->cb_dev->subordinate->number, 0); + dev = pci_get_slot(s->cb_dev->subordinate, 0); if (!dev) goto fail; /* Config space? */ if (space == 0) { if (addr + len > 0x100) - goto fail; + goto failput; for (; len; addr++, ptr++, len--) pci_read_config_byte(dev, addr, ptr); return 0; } res = dev->resource + space - 1; + + pci_dev_put(dev); + if (!res->flags) goto fail; @@ -170,6 +171,8 @@ int read_cb_mem(struct pcmcia_socket * s, int space, u_int addr, u_int len, void memcpy_fromio(ptr, s->cb_cis_virt + addr, len); return 0; +failput: + pci_dev_put(dev); fail: memset(ptr, 0xff, len); return -1; @@ -228,6 +231,11 @@ int cb_alloc(struct pcmcia_socket * s) pci_bus_size_bridges(bus); pci_bus_assign_resources(bus); cardbus_assign_irqs(bus, s->pci_irq); + + /* socket specific tune function */ + if (s->tune_bridge) + s->tune_bridge(s, bus); + pci_enable_bridges(bus); pci_bus_add_devices(bus);