return -EINVAL;
        }
 
-       priv = kzalloc(sizeof(*priv), GFP_KERNEL);
-       if (!priv)
-               return -ENOMEM;
+       priv = devm_drm_dev_alloc(dev, &ingenic_drm_driver_data,
+                                 struct ingenic_drm, drm);
+       if (IS_ERR(priv))
+               return PTR_ERR(priv);
 
        priv->soc_info = soc_info;
        priv->dev = dev;
 
        platform_set_drvdata(pdev, priv);
 
-       ret = devm_drm_dev_init(dev, drm, &ingenic_drm_driver_data);
-       if (ret) {
-               kfree(priv);
-               return ret;
-       }
-       drmm_add_final_kfree(drm, priv);
-
        ret = drmm_mode_config_init(drm);
        if (ret)
                return ret;