Use drm_fb_cma_fbdev_init() and drm_fb_cma_fbdev_fini() which relies on
the fact that drm_device holds a pointer to the drm_fb_helper structure.
This means that the driver doesn't have to keep track of that.
Also use the drm_fb_helper functions directly.

Cc: Marek Vasut <ma...@denx.de>
Signed-off-by: Noralf Trønnes <nor...@tronnes.org>
---
 drivers/gpu/drm/mxsfb/mxsfb_drv.c | 21 ++++-----------------
 drivers/gpu/drm/mxsfb/mxsfb_drv.h |  1 -
 2 files changed, 4 insertions(+), 18 deletions(-)

diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.c 
b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
index 1207ffe36250..d846dbfc22e9 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.c
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.c
@@ -223,11 +223,8 @@ static int mxsfb_load(struct drm_device *drm, unsigned 
long flags)
 
        drm_kms_helper_poll_init(drm);
 
-       mxsfb->fbdev = drm_fbdev_cma_init(drm, 32,
-                                         drm->mode_config.num_connector);
-       if (IS_ERR(mxsfb->fbdev)) {
-               ret = PTR_ERR(mxsfb->fbdev);
-               mxsfb->fbdev = NULL;
+       ret = drm_fb_cma_fbdev_init(drm, 32, 0);
+       if (ret) {
                dev_err(drm->dev, "Failed to init FB CMA area\n");
                goto err_cma;
        }
@@ -250,10 +247,7 @@ static int mxsfb_load(struct drm_device *drm, unsigned 
long flags)
 
 static void mxsfb_unload(struct drm_device *drm)
 {
-       struct mxsfb_drm_private *mxsfb = drm->dev_private;
-
-       if (mxsfb->fbdev)
-               drm_fbdev_cma_fini(mxsfb->fbdev);
+       drm_fb_cma_fbdev_fini(drm);
 
        drm_kms_helper_poll_fini(drm);
        drm_mode_config_cleanup(drm);
@@ -267,13 +261,6 @@ static void mxsfb_unload(struct drm_device *drm)
        pm_runtime_disable(drm->dev);
 }
 
-static void mxsfb_lastclose(struct drm_device *drm)
-{
-       struct mxsfb_drm_private *mxsfb = drm->dev_private;
-
-       drm_fbdev_cma_restore_mode(mxsfb->fbdev);
-}
-
 static int mxsfb_enable_vblank(struct drm_device *drm, unsigned int crtc)
 {
        struct mxsfb_drm_private *mxsfb = drm->dev_private;
@@ -329,7 +316,7 @@ static struct drm_driver mxsfb_driver = {
        .driver_features        = DRIVER_GEM | DRIVER_MODESET |
                                  DRIVER_PRIME | DRIVER_ATOMIC |
                                  DRIVER_HAVE_IRQ,
-       .lastclose              = mxsfb_lastclose,
+       .lastclose              = drm_fb_helper_lastclose,
        .irq_handler            = mxsfb_irq_handler,
        .irq_preinstall         = mxsfb_irq_preinstall,
        .irq_uninstall          = mxsfb_irq_preinstall,
diff --git a/drivers/gpu/drm/mxsfb/mxsfb_drv.h 
b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
index 5d0883fc805b..bedd6801edca 100644
--- a/drivers/gpu/drm/mxsfb/mxsfb_drv.h
+++ b/drivers/gpu/drm/mxsfb/mxsfb_drv.h
@@ -37,7 +37,6 @@ struct mxsfb_drm_private {
        struct drm_simple_display_pipe  pipe;
        struct drm_connector            connector;
        struct drm_panel                *panel;
-       struct drm_fbdev_cma            *fbdev;
 };
 
 int mxsfb_setup_crtc(struct drm_device *dev);
-- 
2.14.2

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to