The simple KMS helpers are deprecated because they only add an intermediate layer between drivers and atomic modesetting.
Open-code drm_simple_encoder_init() by calling drm_encoder_init() directly and providing driver-local drm_encoder_funcs. Also check the return value from drm_encoder_init() to avoid silent failures. Signed-off-by: Diogo Silva <[email protected]> --- drivers/gpu/drm/tegra/dsi.c | 16 +++++++++++++--- drivers/gpu/drm/tegra/rgb.c | 15 +++++++++++++-- 2 files changed, 26 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/tegra/dsi.c b/drivers/gpu/drm/tegra/dsi.c index e7fdd8c7ac12..3f818c195e9a 100644 --- a/drivers/gpu/drm/tegra/dsi.c +++ b/drivers/gpu/drm/tegra/dsi.c @@ -20,11 +20,11 @@ #include <drm/drm_atomic_helper.h> #include <drm/drm_debugfs.h> +#include <drm/drm_encoder.h> #include <drm/drm_file.h> #include <drm/drm_mipi_dsi.h> #include <drm/drm_panel.h> #include <drm/drm_print.h> -#include <drm/drm_simple_kms_helper.h> #include "dc.h" #include "drm.h" @@ -1055,6 +1055,10 @@ tegra_dsi_encoder_atomic_check(struct drm_encoder *encoder, return err; } +static const struct drm_encoder_funcs tegra_dsi_encoder_funcs = { + .destroy = drm_encoder_cleanup, +}; + static const struct drm_encoder_helper_funcs tegra_dsi_encoder_helper_funcs = { .disable = tegra_dsi_encoder_disable, .enable = tegra_dsi_encoder_enable, @@ -1078,8 +1082,14 @@ static int tegra_dsi_init(struct host1x_client *client) &tegra_dsi_connector_helper_funcs); dsi->output.connector.dpms = DRM_MODE_DPMS_OFF; - drm_simple_encoder_init(drm, &dsi->output.encoder, - DRM_MODE_ENCODER_DSI); + err = drm_encoder_init(drm, &dsi->output.encoder, + &tegra_dsi_encoder_funcs, + DRM_MODE_ENCODER_DSI, NULL); + if (err) { + drm_err(drm, "failed to initialize encoder: %d\n", err); + return err; + } + drm_encoder_helper_add(&dsi->output.encoder, &tegra_dsi_encoder_helper_funcs); diff --git a/drivers/gpu/drm/tegra/rgb.c b/drivers/gpu/drm/tegra/rgb.c index e67fbb2362e6..bc1c93c7554c 100644 --- a/drivers/gpu/drm/tegra/rgb.c +++ b/drivers/gpu/drm/tegra/rgb.c @@ -9,7 +9,8 @@ #include <drm/drm_atomic_helper.h> #include <drm/drm_bridge_connector.h> -#include <drm/drm_simple_kms_helper.h> +#include <drm/drm_encoder.h> +#include <drm/drm_print.h> #include "drm.h" #include "dc.h" @@ -194,6 +195,10 @@ tegra_rgb_encoder_atomic_check(struct drm_encoder *encoder, return err; } +static const struct drm_encoder_funcs tegra_rgb_encoder_funcs = { + .destroy = drm_encoder_cleanup, +}; + static const struct drm_encoder_helper_funcs tegra_rgb_encoder_helper_funcs = { .disable = tegra_rgb_encoder_disable, .enable = tegra_rgb_encoder_enable, @@ -305,7 +310,13 @@ int tegra_dc_rgb_init(struct drm_device *drm, struct tegra_dc *dc) if (!dc->rgb) return -ENODEV; - drm_simple_encoder_init(drm, &output->encoder, DRM_MODE_ENCODER_LVDS); + err = drm_encoder_init(drm, &output->encoder, &tegra_rgb_encoder_funcs, + DRM_MODE_ENCODER_LVDS, NULL); + if (err) { + drm_err(drm, "failed to initialize encoder: %d\n", err); + return err; + } + drm_encoder_helper_add(&output->encoder, &tegra_rgb_encoder_helper_funcs); -- 2.54.0

