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 <diogompaissilva@gmail.com>
Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
Diogo Silva 2026-06-23 15:19:31 +02:00 committed by Inki Dae
parent 9377ab1ee7
commit 51f556d630
No known key found for this signature in database
GPG Key ID: C5601BECE83FF9B6
5 changed files with 31 additions and 10 deletions

View File

@ -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);

View File

@ -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);

View File

@ -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)

View File

@ -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);

View File

@ -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);