[MTD] Switch to pci_get_device and do ref counting
[firefly-linux-kernel-4.4.55.git] / drivers / mtd / devices / pmc551.c
index 2c0149708739814b0f34c83559f2af63c7be098e..a03a8a79e5c5589cb80c95ca3833167f2f04b62a 100644 (file)
@@ -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);