Messages in this thread Patch in this message |  | | From | Dmitry Baryshkov <> | | Date | Tue, 05 May 2026 03:25:02 +0300 | | Subject | [PATCH v5 5/8] drm: renesas: rcar-du: use drmm_writeback_connector_init() |
| |
The driver uses drm_writeback_connector_init() instead of its drmm counterpart, but it doesn't perform the job queue cleanup (neither manually nor by calling drm_writeback_connector_cleanup()). On the contrary, the drmm_writeback_connector_init() function ensures the proper cleanup of the job queue.
Use drmm_plain_encoder_alloc() to allocate simple encoder and drmm_writeback_connector_init() in order to initialize writeback connector instance.
Reviewed-by: Suraj Kandpal <suraj.kandpal@intel.com> Reviewed-by: Louis Chauvet <louis.chauvet@bootlin.com> Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> --- .../gpu/drm/renesas/rcar-du/rcar_du_writeback.c | 22 +++++++++++++++------- 1 file changed, 15 insertions(+), 7 deletions(-)
diff --git a/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c b/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c index e5e6e6a156aa..ecfd4fc1f210 100644 --- a/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c +++ b/drivers/gpu/drm/renesas/rcar-du/rcar_du_writeback.c @@ -134,7 +134,6 @@ static void rcar_du_wb_conn_reset(struct drm_connector *connector) static const struct drm_connector_funcs rcar_du_wb_conn_funcs = { .reset = rcar_du_wb_conn_reset, .fill_modes = drm_helper_probe_single_connector_modes, - .destroy = drm_connector_cleanup, .atomic_duplicate_state = rcar_du_wb_conn_duplicate_state, .atomic_destroy_state = rcar_du_wb_conn_destroy_state, }; @@ -201,16 +200,25 @@ int rcar_du_writeback_init(struct rcar_du_device *rcdu, struct rcar_du_crtc *rcrtc) { struct drm_writeback_connector *wb_conn = &rcrtc->writeback; + struct drm_encoder *encoder; + + encoder = drmm_plain_encoder_alloc(&rcdu->ddev, NULL, + DRM_MODE_ENCODER_VIRTUAL, NULL); + if (IS_ERR(encoder)) + return PTR_ERR(encoder); + + drm_encoder_helper_add(encoder, &rcar_du_wb_enc_helper_funcs); + + encoder->possible_crtcs = drm_crtc_mask(&rcrtc->crtc); drm_connector_helper_add(&wb_conn->base, &rcar_du_wb_conn_helper_funcs); - return drm_writeback_connector_init(&rcdu->ddev, wb_conn, - &rcar_du_wb_conn_funcs, - &rcar_du_wb_enc_helper_funcs, - writeback_formats, - ARRAY_SIZE(writeback_formats), - 1 << drm_crtc_index(&rcrtc->crtc)); + return drmm_writeback_connector_init(&rcdu->ddev, wb_conn, + &rcar_du_wb_conn_funcs, + encoder, + writeback_formats, + ARRAY_SIZE(writeback_formats)); } void rcar_du_writeback_setup(struct rcar_du_crtc *rcrtc, -- 2.47.3
|  |