#include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_fb_cma_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_modeset_helper.h>
 
                        "Invalid legacyfb_depth.  Defaulting to 24bpp\n");
                legacyfb_depth = 24;
        }
-       fsl_dev->fbdev = drm_fbdev_cma_init(dev, legacyfb_depth, 1);
-       if (IS_ERR(fsl_dev->fbdev)) {
-               ret = PTR_ERR(fsl_dev->fbdev);
-               fsl_dev->fbdev = NULL;
-               goto done;
-       }
 
        return 0;
 done:
        drm_kms_helper_poll_fini(dev);
 
-       if (fsl_dev->fbdev)
-               drm_fbdev_cma_fini(fsl_dev->fbdev);
-
        drm_mode_config_cleanup(dev);
        drm_irq_uninstall(dev);
        dev->dev_private = NULL;
 
 static void fsl_dcu_unload(struct drm_device *dev)
 {
-       struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
-
        drm_atomic_helper_shutdown(dev);
        drm_kms_helper_poll_fini(dev);
 
-       if (fsl_dev->fbdev)
-               drm_fbdev_cma_fini(fsl_dev->fbdev);
-
        drm_mode_config_cleanup(dev);
        drm_irq_uninstall(dev);
 
        return IRQ_HANDLED;
 }
 
-static void fsl_dcu_drm_lastclose(struct drm_device *dev)
-{
-       struct fsl_dcu_drm_device *fsl_dev = dev->dev_private;
-
-       drm_fbdev_cma_restore_mode(fsl_dev->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(fsl_dcu_drm_fops);
 
 static struct drm_driver fsl_dcu_drm_driver = {
        .driver_features        = DRIVER_HAVE_IRQ | DRIVER_GEM | DRIVER_MODESET
                                | DRIVER_PRIME | DRIVER_ATOMIC,
-       .lastclose              = fsl_dcu_drm_lastclose,
        .load                   = fsl_dcu_load,
        .unload                 = fsl_dcu_unload,
        .irq_handler            = fsl_dcu_drm_irq,
        if (ret < 0)
                goto put;
 
+       drm_fbdev_generic_setup(drm, legacyfb_depth);
+
        return 0;
 
 put: