if (ret)
                return ret;
 
-       vbox = kzalloc(sizeof(*vbox), GFP_KERNEL);
-       if (!vbox)
-               return -ENOMEM;
-
-       ret = drm_dev_init(&vbox->ddev, &driver, &pdev->dev);
-       if (ret) {
-               kfree(vbox);
-               return ret;
-       }
+       vbox = devm_drm_dev_alloc(&pdev->dev, &driver,
+                                 struct vbox_private, ddev);
+       if (IS_ERR(vbox))
+               return PTR_ERR(vbox);
 
        vbox->ddev.pdev = pdev;
        vbox->ddev.dev_private = vbox;
        pci_set_drvdata(pdev, vbox);
-       drmm_add_final_kfree(&vbox->ddev, vbox);
        mutex_init(&vbox->hw_mutex);
 
        ret = pci_enable_device(pdev);
        if (ret)
-               goto err_dev_put;
+               return ret;
 
        ret = vbox_hw_init(vbox);
        if (ret)
        vbox_hw_fini(vbox);
 err_pci_disable:
        pci_disable_device(pdev);
-err_dev_put:
-       drm_dev_put(&vbox->ddev);
        return ret;
 }
 
        vbox_mode_fini(vbox);
        vbox_mm_fini(vbox);
        vbox_hw_fini(vbox);
-       drm_dev_put(&vbox->ddev);
 }
 
 #ifdef CONFIG_PM_SLEEP