pci_set_master(pdev);
 
        cafe = kzalloc(sizeof(*cafe), GFP_KERNEL);
-       if (!cafe)
-               return  -ENOMEM;
+       if (!cafe) {
+               err = -ENOMEM;
+               goto out_disable_device;
+       }
 
        mtd = nand_to_mtd(&cafe->nand);
        mtd->dev.parent = &pdev->dev;
        pci_iounmap(pdev, cafe->mmio);
  out_free_mtd:
        kfree(cafe);
+ out_disable_device:
+       pci_disable_device(pdev);
  out:
        return err;
 }
        pci_iounmap(pdev, cafe->mmio);
        dma_free_coherent(&cafe->pdev->dev, 2112, cafe->dmabuf, cafe->dmaaddr);
        kfree(cafe);
+       pci_disable_device(pdev);
 }
 
 static const struct pci_device_id cafe_nand_tbl[] = {