aboutsummaryrefslogtreecommitdiff
path: root/drivers/mtd/devices/pmc551.c
diff options
context:
space:
mode:
authorAlan Cox2006-09-22 10:19:20 +0100
committerDavid Woodhouse2006-09-22 10:19:20 +0100
commitdd8e9ed6ed544e2b924429d29cd2a6b55590109b (patch)
tree0961c205e59591e7da65ce7504c919e7ee3e4351 /drivers/mtd/devices/pmc551.c
parent668040fcd1e06fc3e68a92708cbdfa5a52c37d3c (diff)
[MTD] Switch to pci_get_device and do ref counting
Signed-off-by: Alan Cox <alan@redhat.com> Cc: Greg KH <greg@kroah.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: David Woodhouse <dwmw2@infradead.org>
Diffstat (limited to 'drivers/mtd/devices/pmc551.c')
-rw-r--r--drivers/mtd/devices/pmc551.c11
1 files changed, 10 insertions, 1 deletions
diff --git a/drivers/mtd/devices/pmc551.c b/drivers/mtd/devices/pmc551.c
index 2c0149708739..a03a8a79e5c5 100644
--- a/drivers/mtd/devices/pmc551.c
+++ b/drivers/mtd/devices/pmc551.c
@@ -674,7 +674,7 @@ static int __init init_pmc551(void)
*/
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;
@@ -783,6 +783,10 @@ static int __init init_pmc551(void)
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,
@@ -797,6 +801,10 @@ static int __init init_pmc551(void)
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;
@@ -824,6 +832,7 @@ static void __exit cleanup_pmc551(void)
priv->asize>>20, priv->start);
iounmap (priv->start);
}
+ pci_dev_put(priv->dev);
kfree (mtd->priv);
del_mtd_device (mtd);