From 51f556d630bbabf582ef61e3c59850b8b18b6c49 Mon Sep 17 00:00:00 2001 From: Diogo Silva Date: Tue, 23 Jun 2026 15:19:31 +0200 Subject: [PATCH] drm/exynos: Add error handling to drm_encoder_init() Not handling the return code on drm_encoder_init can lead to silent failure and/or a drm_encoder_cleanup on a non-initialized encoder. This patch adds error handling to the drm_encoder_init calls to prevent that from happening. Signed-off-by: Diogo Silva Signed-off-by: Inki Dae --- drivers/gpu/drm/exynos/exynos_dp.c | 8 ++++++-- drivers/gpu/drm/exynos/exynos_drm_dpi.c | 9 +++++++-- drivers/gpu/drm/exynos/exynos_drm_dsi.c | 6 ++++-- drivers/gpu/drm/exynos/exynos_drm_vidi.c | 9 +++++++-- drivers/gpu/drm/exynos/exynos_hdmi.c | 9 +++++++-- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/drivers/gpu/drm/exynos/exynos_dp.c b/drivers/gpu/drm/exynos/exynos_dp.c index 8e684e59ea91..e1c9e2946b8a 100644 --- a/drivers/gpu/drm/exynos/exynos_dp.c +++ b/drivers/gpu/drm/exynos/exynos_dp.c @@ -99,8 +99,12 @@ static int exynos_dp_bind(struct device *dev, struct device *master, void *data) dp->drm_dev = drm_dev; - drm_encoder_init(drm_dev, encoder, &exynos_dp_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); + ret = drm_encoder_init(drm_dev, encoder, &exynos_dp_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); + if (ret) { + dev_err(dp->dev, "Failed to initialize encoder\n"); + return ret; + } drm_encoder_helper_add(encoder, &exynos_dp_encoder_helper_funcs); diff --git a/drivers/gpu/drm/exynos/exynos_drm_dpi.c b/drivers/gpu/drm/exynos/exynos_drm_dpi.c index d77b9b2b5373..0683236aa5df 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dpi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dpi.c @@ -198,8 +198,13 @@ int exynos_dpi_bind(struct drm_device *dev, struct drm_encoder *encoder) { int ret; - drm_encoder_init(dev, encoder, &exynos_dpi_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); + ret = drm_encoder_init(dev, encoder, &exynos_dpi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); + if (ret) { + DRM_DEV_ERROR(encoder_to_dpi(encoder)->dev, + "failed to create encoder ret = %d\n", ret); + return ret; + } drm_encoder_helper_add(encoder, &exynos_dpi_encoder_helper_funcs); diff --git a/drivers/gpu/drm/exynos/exynos_drm_dsi.c b/drivers/gpu/drm/exynos/exynos_drm_dsi.c index 686c805887a3..2f83f3249242 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_dsi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_dsi.c @@ -83,8 +83,10 @@ static int exynos_dsi_bind(struct device *dev, struct device *master, void *data struct drm_device *drm_dev = data; int ret; - drm_encoder_init(drm_dev, encoder, &exynos_drm_dsi_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); + ret = drm_encoder_init(drm_dev, encoder, &exynos_drm_dsi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); + if (ret) + return ret; ret = exynos_drm_set_possible_crtcs(encoder, EXYNOS_DISPLAY_TYPE_LCD); if (ret < 0) diff --git a/drivers/gpu/drm/exynos/exynos_drm_vidi.c b/drivers/gpu/drm/exynos/exynos_drm_vidi.c index d905dc703c06..59dea853d364 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_vidi.c +++ b/drivers/gpu/drm/exynos/exynos_drm_vidi.c @@ -449,8 +449,13 @@ static int vidi_bind(struct device *dev, struct device *master, void *data) return PTR_ERR(ctx->crtc); } - drm_encoder_init(drm_dev, encoder, &exynos_vidi_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); + ret = drm_encoder_init(drm_dev, encoder, &exynos_vidi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); + if (ret) { + DRM_DEV_ERROR(dev, "failed to initialize encoder ret = %d\n", + ret); + return ret; + } drm_encoder_helper_add(encoder, &exynos_vidi_encoder_helper_funcs); diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c index 7b2668d284a4..3d609f6744ab 100644 --- a/drivers/gpu/drm/exynos/exynos_hdmi.c +++ b/drivers/gpu/drm/exynos/exynos_hdmi.c @@ -1866,8 +1866,13 @@ static int hdmi_bind(struct device *dev, struct device *master, void *data) hdata->phy_clk.enable = hdmiphy_clk_enable; - drm_encoder_init(drm_dev, encoder, &exynos_hdmi_encoder_funcs, - DRM_MODE_ENCODER_TMDS, NULL); + ret = drm_encoder_init(drm_dev, encoder, &exynos_hdmi_encoder_funcs, + DRM_MODE_ENCODER_TMDS, NULL); + if (ret) { + DRM_DEV_ERROR(dev, "failed to initialize encoder ret = %d\n", + ret); + return ret; + } drm_encoder_helper_add(encoder, &exynos_hdmi_encoder_helper_funcs);