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