ret = drm_vblank_init(drm, 1);
        if (ret) {
                dev_err(drm->dev, "failed to init vblank\n");
-               goto out_config;
+               return ret;
        }
 
        ret = mcde_display_init(drm);
        if (ret) {
                dev_err(drm->dev, "failed to init display\n");
-               goto out_config;
+               return ret;
        }
 
        /*
                                                    mcde->bridge);
        if (ret) {
                dev_err(drm->dev, "failed to attach display output bridge\n");
-               goto out_config;
+               return ret;
        }
 
        drm_mode_config_reset(drm);
        drm_fbdev_generic_setup(drm, 32);
 
        return 0;
-
-out_config:
-       drm_mode_config_cleanup(drm);
-       return ret;
-}
-
-static void mcde_release(struct drm_device *drm)
-{
-       drm_mode_config_cleanup(drm);
 }
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
 static struct drm_driver mcde_drm_driver = {
        .driver_features =
                DRIVER_MODESET | DRIVER_GEM | DRIVER_ATOMIC,
-       .release = mcde_release,
        .lastclose = drm_fb_helper_lastclose,
        .ioctls = NULL,
        .fops = &drm_fops,
        struct drm_device *drm = dev_get_drvdata(dev);
        int ret;
 
-       drm_mode_config_init(drm);
+       ret = drmm_mode_config_init(drm);
+       if (ret)
+               return ret;
 
        ret = component_bind_all(drm->dev, drm);
        if (ret) {