Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/msm/mdp4: use drmm-managed allocation for mdp4_lcdc_encoder

Change struct mdp4_lcdc_encoder allocation to use drmm_encoder_alloc().
This removes the need to perform any actions on this encoder
destruction.

Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
Reviewed-by: Abhinav Kumar <quic_abhinavk@quicinc.com>
Patchwork: https://patchwork.freedesktop.org/patch/546176/
Link: https://lore.kernel.org/r/20230708010407.3871346-16-dmitry.baryshkov@linaro.org

+7 -29
+7 -29
drivers/gpu/drm/msm/disp/mdp4/mdp4_lcdc_encoder.c
··· 30 30 return to_mdp4_kms(to_mdp_kms(priv->kms)); 31 31 } 32 32 33 - static void mdp4_lcdc_encoder_destroy(struct drm_encoder *encoder) 34 - { 35 - struct mdp4_lcdc_encoder *mdp4_lcdc_encoder = 36 - to_mdp4_lcdc_encoder(encoder); 37 - drm_encoder_cleanup(encoder); 38 - kfree(mdp4_lcdc_encoder); 39 - } 40 - 41 - static const struct drm_encoder_funcs mdp4_lcdc_encoder_funcs = { 42 - .destroy = mdp4_lcdc_encoder_destroy, 43 - }; 44 - 45 33 /* this should probably be a helper: */ 46 34 static struct drm_connector *get_connector(struct drm_encoder *encoder) 47 35 { ··· 365 377 struct drm_encoder *mdp4_lcdc_encoder_init(struct drm_device *dev, 366 378 struct device_node *panel_node) 367 379 { 368 - struct drm_encoder *encoder = NULL; 380 + struct drm_encoder *encoder; 369 381 struct mdp4_lcdc_encoder *mdp4_lcdc_encoder; 370 382 int ret; 371 383 372 - mdp4_lcdc_encoder = kzalloc(sizeof(*mdp4_lcdc_encoder), GFP_KERNEL); 373 - if (!mdp4_lcdc_encoder) { 374 - ret = -ENOMEM; 375 - goto fail; 376 - } 384 + mdp4_lcdc_encoder = drmm_encoder_alloc(dev, struct mdp4_lcdc_encoder, base, 385 + NULL, DRM_MODE_ENCODER_LVDS, NULL); 386 + if (IS_ERR(mdp4_lcdc_encoder)) 387 + return ERR_CAST(mdp4_lcdc_encoder); 377 388 378 389 mdp4_lcdc_encoder->panel_node = panel_node; 379 390 380 391 encoder = &mdp4_lcdc_encoder->base; 381 392 382 - drm_encoder_init(dev, encoder, &mdp4_lcdc_encoder_funcs, 383 - DRM_MODE_ENCODER_LVDS, NULL); 384 393 drm_encoder_helper_add(encoder, &mdp4_lcdc_encoder_helper_funcs); 385 394 386 395 /* TODO: do we need different pll in other cases? */ 387 396 mdp4_lcdc_encoder->lcdc_clk = mpd4_lvds_pll_init(dev); 388 397 if (IS_ERR(mdp4_lcdc_encoder->lcdc_clk)) { 389 398 DRM_DEV_ERROR(dev->dev, "failed to get lvds_clk\n"); 390 - ret = PTR_ERR(mdp4_lcdc_encoder->lcdc_clk); 391 - goto fail; 399 + return ERR_CAST(mdp4_lcdc_encoder->lcdc_clk); 392 400 } 393 401 394 402 /* TODO: different regulators in other cases? */ ··· 396 412 ARRAY_SIZE(mdp4_lcdc_encoder->regs), 397 413 mdp4_lcdc_encoder->regs); 398 414 if (ret) 399 - goto fail; 415 + return ERR_PTR(ret); 400 416 401 417 return encoder; 402 - 403 - fail: 404 - if (encoder) 405 - mdp4_lcdc_encoder_destroy(encoder); 406 - 407 - return ERR_PTR(ret); 408 418 }