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: Laurent Pinchart <laurent.pinch...@ideasonboard.com>
Signed-off-by: Noralf Trønnes <nor...@tronnes.org>
---
 drivers/gpu/drm/rcar-du/rcar_du_drv.c | 13 +++----------
 drivers/gpu/drm/rcar-du/rcar_du_drv.h |  2 --
 drivers/gpu/drm/rcar-du/rcar_du_kms.c | 20 +++++---------------
 3 files changed, 8 insertions(+), 27 deletions(-)

diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.c 
b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
index d2f29e6b1112..aa342a1b0d12 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.c
@@ -23,6 +23,7 @@
 
 #include <drm/drmP.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 
@@ -224,19 +225,12 @@ MODULE_DEVICE_TABLE(of, rcar_du_of_table);
  * DRM operations
  */
 
-static void rcar_du_lastclose(struct drm_device *dev)
-{
-       struct rcar_du_device *rcdu = dev->dev_private;
-
-       drm_fbdev_cma_restore_mode(rcdu->fbdev);
-}
-
 DEFINE_DRM_GEM_CMA_FOPS(rcar_du_fops);
 
 static struct drm_driver rcar_du_driver = {
        .driver_features        = DRIVER_GEM | DRIVER_MODESET | DRIVER_PRIME
                                | DRIVER_ATOMIC,
-       .lastclose              = rcar_du_lastclose,
+       .lastclose              = drm_fb_helper_lastclose,
        .gem_free_object_unlocked = drm_gem_cma_free_object,
        .gem_vm_ops             = &drm_gem_cma_vm_ops,
        .prime_handle_to_fd     = drm_gem_prime_handle_to_fd,
@@ -298,8 +292,7 @@ static int rcar_du_remove(struct platform_device *pdev)
 
        drm_dev_unregister(ddev);
 
-       if (rcdu->fbdev)
-               drm_fbdev_cma_fini(rcdu->fbdev);
+       drm_fb_cma_fbdev_fini(ddev);
 
        drm_kms_helper_poll_fini(ddev);
        drm_mode_config_cleanup(ddev);
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_drv.h 
b/drivers/gpu/drm/rcar-du/rcar_du_drv.h
index f8cd79488ece..bb3516ad26b3 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_drv.h
+++ b/drivers/gpu/drm/rcar-du/rcar_du_drv.h
@@ -24,7 +24,6 @@
 struct clk;
 struct device;
 struct drm_device;
-struct drm_fbdev_cma;
 struct rcar_du_device;
 struct rcar_du_lvdsenc;
 
@@ -80,7 +79,6 @@ struct rcar_du_device {
        void __iomem *mmio;
 
        struct drm_device *ddev;
-       struct drm_fbdev_cma *fbdev;
 
        struct rcar_du_crtc crtcs[RCAR_DU_MAX_CRTCS];
        unsigned int num_crtcs;
diff --git a/drivers/gpu/drm/rcar-du/rcar_du_kms.c 
b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
index 566d1a948c8f..344c4613fbc1 100644
--- a/drivers/gpu/drm/rcar-du/rcar_du_kms.c
+++ b/drivers/gpu/drm/rcar-du/rcar_du_kms.c
@@ -16,6 +16,7 @@
 #include <drm/drm_atomic_helper.h>
 #include <drm/drm_crtc.h>
 #include <drm/drm_crtc_helper.h>
+#include <drm/drm_fb_helper.h>
 #include <drm/drm_fb_cma_helper.h>
 #include <drm/drm_gem_cma_helper.h>
 #include <drm/drm_gem_framebuffer_helper.h>
@@ -217,13 +218,6 @@ rcar_du_fb_create(struct drm_device *dev, struct drm_file 
*file_priv,
        return drm_gem_fb_create(dev, file_priv, mode_cmd);
 }
 
-static void rcar_du_output_poll_changed(struct drm_device *dev)
-{
-       struct rcar_du_device *rcdu = dev->dev_private;
-
-       drm_fbdev_cma_hotplug_event(rcdu->fbdev);
-}
-
 /* 
-----------------------------------------------------------------------------
  * Atomic Check and Update
  */
@@ -278,7 +272,7 @@ static const struct drm_mode_config_helper_funcs 
rcar_du_mode_config_helper = {
 
 static const struct drm_mode_config_funcs rcar_du_mode_config_funcs = {
        .fb_create = rcar_du_fb_create,
-       .output_poll_changed = rcar_du_output_poll_changed,
+       .output_poll_changed = drm_fb_helper_output_poll_changed,
        .atomic_check = rcar_du_atomic_check,
        .atomic_commit = drm_atomic_helper_commit,
 };
@@ -519,7 +513,6 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
 
        struct drm_device *dev = rcdu->ddev;
        struct drm_encoder *encoder;
-       struct drm_fbdev_cma *fbdev;
        unsigned int num_encoders;
        unsigned int num_groups;
        unsigned int i;
@@ -629,12 +622,9 @@ int rcar_du_modeset_init(struct rcar_du_device *rcdu)
        drm_kms_helper_poll_init(dev);
 
        if (dev->mode_config.num_connector) {
-               fbdev = drm_fbdev_cma_init(dev, 32,
-                                          dev->mode_config.num_connector);
-               if (IS_ERR(fbdev))
-                       return PTR_ERR(fbdev);
-
-               rcdu->fbdev = fbdev;
+               ret = drm_fb_cma_fbdev_init(dev, 32, 0);
+               if (ret)
+                       return ret;
        } else {
                dev_info(rcdu->dev,
                         "no connector found, disabling fbdev emulation\n");
-- 
2.14.2

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

Reply via email to