*/
         for( count = 0; count < MAX_MTD_DEVICES; count++ ) {
 
-                if ((PCI_Device = pci_find_device(PCI_VENDOR_ID_V3_SEMI,
+                if ((PCI_Device = pci_get_device(PCI_VENDOR_ID_V3_SEMI,
                                                   PCI_DEVICE_ID_V3_SEMI_V370PDC,
                                                  PCI_Device ) ) == NULL) {
                         break;
                         kfree(mtd);
                         break;
                 }
+
+                /* Keep a reference as the add_mtd_device worked */
+                pci_dev_get(PCI_Device);
+
                 printk(KERN_NOTICE "Registered pmc551 memory device.\n");
                 printk(KERN_NOTICE "Mapped %dM of memory from 0x%p to 0x%p\n",
                        priv->asize>>20,
                found++;
         }
 
+        /* Exited early, reference left over */
+        if (PCI_Device)
+               pci_dev_put(PCI_Device);
+
         if( !pmc551list ) {
                 printk(KERN_NOTICE "pmc551: not detected\n");
                 return -ENODEV;
                                priv->asize>>20, priv->start);
                        iounmap (priv->start);
                }
+               pci_dev_put(priv->dev);
 
                kfree (mtd->priv);
                del_mtd_device (mtd);
 
                /* Disable writes through the rom window */
                pci_read_config_byte(window->pdev, 0x40, &byte);
                pci_write_config_byte(window->pdev, 0x40, byte & ~1);
+               pci_dev_put(window->pdev);
        }
 
        /* Free all of the mtd devices */
        struct amd76xrom_map_info *map = NULL;
        unsigned long map_top;
 
-       /* Remember the pci dev I find the window in */
+       /* Remember the pci dev I find the window in - already have a ref */
        window->pdev = pdev;
 
        /* Assume the rom window is properly setup, and find it's size */
        struct pci_device_id *id;
        pdev = NULL;
        for(id = amd76xrom_pci_tbl; id->vendor; id++) {
-               pdev = pci_find_device(id->vendor, id->device, NULL);
+               pdev = pci_get_device(id->vendor, id->device, NULL);
                if (pdev) {
                        break;
                }
 
        /* Disable writes through the rom window */
        pci_read_config_word(window->pdev, BIOS_CNTL, &word);
        pci_write_config_word(window->pdev, BIOS_CNTL, word & ~1);
+       pci_dev_put(window->pdev);
 
        /* Free all of the mtd devices */
        list_for_each_entry_safe(map, scratch, &window->maps, list) {
 
        pdev = NULL;
        for (id = ichxrom_pci_tbl; id->vendor; id++) {
-               pdev = pci_find_device(id->vendor, id->device, NULL);
+               pdev = pci_get_device(id->vendor, id->device, NULL);
                if (pdev) {
                        break;
                }
 
        struct resource *pm_iobase;
        __u16 word;
 
-       dev = pci_find_device(PCI_VENDOR_ID_INTEL,
+       dev = pci_get_device(PCI_VENDOR_ID_INTEL,
                PCI_DEVICE_ID_INTEL_82371AB_0, NULL);
 
-       pm_dev = pci_find_device(PCI_VENDOR_ID_INTEL,
+       pm_dev = pci_get_device(PCI_VENDOR_ID_INTEL,
                PCI_DEVICE_ID_INTEL_82371AB_3, NULL);
 
+       pci_dev_put(dev);
+
        if (!dev || !pm_dev) {
                printk(KERN_NOTICE "L440GX flash mapping: failed to find PIIX4 ISA bridge, cannot continue\n");
+               pci_dev_put(pm_dev);
                return -ENODEV;
        }
 
 
        if (!l440gx_map.virt) {
                printk(KERN_WARNING "Failed to ioremap L440GX flash region\n");
+               pci_dev_put(pm_dev);
                return -ENOMEM;
        }
        simple_map_init(&l440gx_map);
                pm_iobase->start += iobase & ~1;
                pm_iobase->end += iobase & ~1;
 
+               pci_dev_put(pm_dev);
+
                /* Allocate the resource region */
                if (pci_assign_resource(pm_dev, PIIXE_IOBASE_RESOURCE) != 0) {
+                       pci_dev_put(dev);
+                       pci_dev_put(pm_dev);
                        printk(KERN_WARNING "Could not allocate pm iobase resource\n");
                        iounmap(l440gx_map.virt);
                        return -ENXIO;
 
 
        printk(KERN_DEBUG NAME ": NatSemi SCx200 DOCCS Flash Driver\n");
 
-       if ((bridge = pci_find_device(PCI_VENDOR_ID_NS,
+       if ((bridge = pci_get_device(PCI_VENDOR_ID_NS,
                                      PCI_DEVICE_ID_NS_SCx200_BRIDGE,
                                      NULL)) == NULL)
                return -ENODEV;
 
        /* check that we have found the configuration block */
-       if (!scx200_cb_present())
+       if (!scx200_cb_present()) {
+               pci_dev_put(bridge);
                return -ENODEV;
+       }
 
        if (probe) {
                /* Try to use the present flash mapping if any */
                pci_read_config_dword(bridge, SCx200_DOCCS_BASE, &base);
                pci_read_config_dword(bridge, SCx200_DOCCS_CTRL, &ctrl);
+               pci_dev_put(bridge);
+
                pmr = inl(scx200_cb_base + SCx200_PMR);
 
                if (base == 0
                        return -ENOMEM;
                }
        } else {
+               pci_dev_put(bridge);
                for (u = size; u > 1; u >>= 1)
                        ;
                if (u != 1) {