#include <drm/drm_gem.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
+#include <drm/drm_managed.h>
 #include <drm/drm_of.h>
 #include <drm/drm_probe_helper.h>
 #include <drm/drm_panel.h>
 
 static void mcde_release(struct drm_device *drm)
 {
-       struct mcde *mcde = drm->dev_private;
-
        drm_mode_config_cleanup(drm);
        drm_dev_fini(drm);
-       kfree(mcde);
 }
 
 DEFINE_DRM_GEM_CMA_FOPS(drm_fops);
        }
        drm = &mcde->drm;
        drm->dev_private = mcde;
+       drmm_add_final_kfree(drm, mcde);
        platform_set_drvdata(pdev, drm);
 
        /* Enable continuous updates: this is what Linux' framebuffer expects */