return -ENOMEM;
        }
 
-       devlink_register(devlink);
        err = pci_enable_device(pdev);
        if (err) {
                dev_err(&pdev->dev, "pci_enable_device\n");
                goto out;
 
        ptp_ocp_info(bp);
-
+       devlink_register(devlink);
        return 0;
 
 out:
 out_disable:
        pci_disable_device(pdev);
 out_unregister:
-       devlink_unregister(devlink);
        devlink_free(devlink);
        return err;
 }
        struct ptp_ocp *bp = pci_get_drvdata(pdev);
        struct devlink *devlink = priv_to_devlink(bp);
 
+       devlink_unregister(devlink);
        ptp_ocp_detach(bp);
        pci_set_drvdata(pdev, NULL);
        pci_disable_device(pdev);
 
-       devlink_unregister(devlink);
        devlink_free(devlink);
 }