DRIVER_RENDER |
                            DRIVER_PRIME |
                            DRIVER_SYNCOBJ),
-       .lastclose = drm_fb_helper_lastclose,
        .open = vc4_open,
        .postclose = vc4_close,
        .irq_handler = vc4_irq,
 
        vc4_kms_load(drm);
 
+       drm_fbdev_generic_setup(drm, 32);
+
        return 0;
 
 unbind_all:
 
        drm_dev_unregister(drm);
 
-       drm_fb_cma_fbdev_fini(drm);
-
        drm_mode_config_cleanup(drm);
 
        drm_atomic_private_obj_fini(&vc4->ctm_manager);
 
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc_helper.h>
 #include <drm/drm_plane_helper.h>
-#include <drm/drm_fb_helper.h>
-#include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
 #include "vc4_drv.h"
 #include "vc4_regs.h"
 }
 
 static const struct drm_mode_config_funcs vc4_mode_funcs = {
-       .output_poll_changed = drm_fb_helper_output_poll_changed,
        .atomic_check = vc4_atomic_check,
        .atomic_commit = vc4_atomic_commit,
        .fb_create = vc4_fb_create,
 
        drm_mode_config_reset(dev);
 
-       if (dev->mode_config.num_connector)
-               drm_fb_cma_fbdev_init(dev, 32, 0);
-
        drm_kms_helper_poll_init(dev);
 
        return 0;