Use drmm_plain_encoder_alloc() to allocate simple encoder and
drmm_writeback_connector_init() in order to initialize writeback
connector instance.

Signed-off-by: Dmitry Baryshkov <dmitry.barysh...@oss.qualcomm.com>
---
 .../drm/arm/display/komeda/komeda_wb_connector.c   | 30 ++++++++++++----------
 1 file changed, 17 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c 
b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c
index 
875cdbff18c9dc97e736049feaa8a1fe1bcc82ff..210841b4453abfe60cecc1cfc79a84298be3e684
 100644
--- a/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c
+++ b/drivers/gpu/drm/arm/display/komeda/komeda_wb_connector.c
@@ -5,6 +5,7 @@
  *
  */
 #include <drm/drm_framebuffer.h>
+#include <drm/drm_managed.h>
 #include "komeda_dev.h"
 #include "komeda_kms.h"
 
@@ -121,17 +122,10 @@ komeda_wb_connector_fill_modes(struct drm_connector 
*connector,
        return 0;
 }
 
-static void komeda_wb_connector_destroy(struct drm_connector *connector)
-{
-       drm_connector_cleanup(connector);
-       kfree(to_kconn(to_wb_conn(connector)));
-}
-
 static const struct drm_connector_funcs komeda_wb_connector_funcs = {
        .reset                  = drm_atomic_helper_connector_reset,
        .detect                 = komeda_wb_connector_detect,
        .fill_modes             = komeda_wb_connector_fill_modes,
-       .destroy                = komeda_wb_connector_destroy,
        .atomic_duplicate_state = drm_atomic_helper_connector_duplicate_state,
        .atomic_destroy_state   = drm_atomic_helper_connector_destroy_state,
 };
@@ -143,13 +137,15 @@ static int komeda_wb_connector_add(struct komeda_kms_dev 
*kms,
        struct komeda_wb_connector *kwb_conn;
        struct drm_writeback_connector *wb_conn;
        struct drm_display_info *info;
+       struct drm_encoder *encoder;
+
        u32 *formats, n_formats = 0;
        int err;
 
        if (!kcrtc->master->wb_layer)
                return 0;
 
-       kwb_conn = kzalloc(sizeof(*kwb_conn), GFP_KERNEL);
+       kwb_conn = drmm_kzalloc(&kms->base, sizeof(*kwb_conn), GFP_KERNEL);
        if (!kwb_conn)
                return -ENOMEM;
 
@@ -165,11 +161,19 @@ static int komeda_wb_connector_add(struct komeda_kms_dev 
*kms,
                return -ENOMEM;
        }
 
-       err = drm_writeback_connector_init(&kms->base, wb_conn,
-                                          &komeda_wb_connector_funcs,
-                                          &komeda_wb_encoder_helper_funcs,
-                                          formats, n_formats,
-                                          BIT(drm_crtc_index(&kcrtc->base)));
+       encoder = drmm_plain_encoder_alloc(&kms->base, NULL,
+                                          DRM_MODE_ENCODER_VIRTUAL, NULL);
+       if (IS_ERR(encoder))
+               return PTR_ERR(encoder);
+
+       drm_encoder_helper_add(encoder, &komeda_wb_encoder_helper_funcs);
+
+       encoder->possible_crtcs = BIT(drm_crtc_index(&kcrtc->base));
+
+       err = drmm_writeback_connector_init(&kms->base, wb_conn,
+                                           &komeda_wb_connector_funcs,
+                                           encoder,
+                                           formats, n_formats);
        komeda_put_fourcc_list(formats);
        if (err) {
                kfree(kwb_conn);

-- 
2.39.5

Reply via email to