This allows to drop the custom drm_encoder_cleanup() actions. Signed-off-by: Philipp Zabel <p.zabel@xxxxxxxxxxxxxx> --- New in v3, example conversion of drm_simple_encoder_init() users. This and the following patches depend on the drm/imx conversion to use managed resources [1]. [1] https://lore.kernel.org/dri-devel/20200911133855.29801-3-p.zabel@xxxxxxxxxxxxxx/T/#m335a28c5c26ab14bccc998d4dc0aed6850e9bc36 --- drivers/gpu/drm/imx/dw_hdmi-imx.c | 19 ++++--------------- drivers/gpu/drm/imx/imx-ldb.c | 20 ++++---------------- drivers/gpu/drm/imx/imx-tve.c | 22 ++++------------------ drivers/gpu/drm/imx/parallel-display.c | 22 ++++------------------ 4 files changed, 16 insertions(+), 67 deletions(-) diff --git a/drivers/gpu/drm/imx/dw_hdmi-imx.c b/drivers/gpu/drm/imx/dw_hdmi-imx.c index 16be8bd92653..87428fb23d9f 100644 --- a/drivers/gpu/drm/imx/dw_hdmi-imx.c +++ b/drivers/gpu/drm/imx/dw_hdmi-imx.c @@ -188,13 +188,6 @@ static const struct of_device_id dw_hdmi_imx_dt_ids[] = { }; MODULE_DEVICE_TABLE(of, dw_hdmi_imx_dt_ids); -static void dw_hdmi_imx_encoder_cleanup(struct drm_device *drm, void *data) -{ - struct drm_encoder *encoder = data; - - drm_encoder_cleanup(encoder); -} - static int dw_hdmi_imx_bind(struct device *dev, struct device *master, void *data) { @@ -203,9 +196,10 @@ static int dw_hdmi_imx_bind(struct device *dev, struct device *master, struct drm_encoder *encoder; int ret; - hdmi_encoder = drmm_kzalloc(drm, sizeof(*hdmi_encoder), GFP_KERNEL); - if (!hdmi_encoder) - return -ENOMEM; + hdmi_encoder = drmm_simple_encoder_alloc(drm, struct imx_hdmi_encoder, + encoder, DRM_MODE_ENCODER_TMDS); + if (IS_ERR(hdmi_encoder)) + return PTR_ERR(hdmi_encoder); hdmi_encoder->hdmi = dev_get_drvdata(dev); encoder = &hdmi_encoder->encoder; @@ -215,11 +209,6 @@ static int dw_hdmi_imx_bind(struct device *dev, struct device *master, return ret; drm_encoder_helper_add(encoder, &dw_hdmi_imx_encoder_helper_funcs); - drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_TMDS); - - ret = drmm_add_action_or_reset(drm, dw_hdmi_imx_encoder_cleanup, encoder); - if (ret) - return ret; return drm_bridge_attach(encoder, hdmi_encoder->hdmi->bridge, NULL, 0); } diff --git a/drivers/gpu/drm/imx/imx-ldb.c b/drivers/gpu/drm/imx/imx-ldb.c index d4beb58f509d..dbfe39e2f7f6 100644 --- a/drivers/gpu/drm/imx/imx-ldb.c +++ b/drivers/gpu/drm/imx/imx-ldb.c @@ -414,13 +414,6 @@ static int imx_ldb_get_clk(struct imx_ldb *ldb, int chno) return PTR_ERR_OR_ZERO(ldb->clk_pll[chno]); } -static void imx_ldb_encoder_cleanup(struct drm_device *drm, void *data) -{ - struct drm_encoder *encoder = data; - - drm_encoder_cleanup(encoder); -} - static int imx_ldb_register(struct drm_device *drm, struct imx_ldb_channel *imx_ldb_ch) { @@ -430,20 +423,15 @@ static int imx_ldb_register(struct drm_device *drm, struct drm_encoder *encoder; int ret; - ldb_encoder = drmm_kzalloc(drm, sizeof(*ldb_encoder), GFP_KERNEL); - if (!ldb_encoder) - return -ENOMEM; + ldb_encoder = drmm_simple_encoder_alloc(drm, struct imx_ldb_encoder, + encoder, DRM_MODE_ENCODER_LVDS); + if (IS_ERR(ldb_encoder)) + return PTR_ERR(ldb_encoder); ldb_encoder->channel = imx_ldb_ch; connector = &ldb_encoder->connector; encoder = &ldb_encoder->encoder; - drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_LVDS); - - ret = drmm_add_action_or_reset(drm, imx_ldb_encoder_cleanup, encoder); - if (ret) - return ret; - ret = imx_drm_encoder_parse_of(drm, encoder, imx_ldb_ch->child); if (ret) return ret; diff --git a/drivers/gpu/drm/imx/imx-tve.c b/drivers/gpu/drm/imx/imx-tve.c index bac025eafa1f..0746f0b425df 100644 --- a/drivers/gpu/drm/imx/imx-tve.c +++ b/drivers/gpu/drm/imx/imx-tve.c @@ -433,13 +433,6 @@ static int tve_clk_init(struct imx_tve *tve, void __iomem *base) return 0; } -static void imx_tve_encoder_cleanup(struct drm_device *drm, void *ptr) -{ - struct drm_encoder *encoder = ptr; - - drm_encoder_cleanup(encoder); -} - static void imx_tve_disable_regulator(void *data) { struct imx_tve *tve = data; @@ -498,22 +491,15 @@ static int imx_tve_bind(struct device *dev, struct device *master, void *data) encoder_type = tve->mode == TVE_MODE_VGA ? DRM_MODE_ENCODER_DAC : DRM_MODE_ENCODER_TVDAC; - tvee = drmm_kzalloc(drm, sizeof(*tvee), GFP_KERNEL); - if (!tvee) - return -ENOMEM; + tvee = drmm_simple_encoder_alloc(drm, struct imx_tve_encoder, encoder, + encoder_type); + if (IS_ERR(tvee)) + return PTR_ERR(tvee); tvee->tve = tve; encoder = &tvee->encoder; connector = &tvee->connector; - ret = drm_simple_encoder_init(drm, encoder, encoder_type); - if (ret) - return ret; - - ret = drmm_add_action_or_reset(drm, imx_tve_encoder_cleanup, encoder); - if (ret) - return ret; - ret = imx_drm_encoder_parse_of(drm, encoder, tve->dev->of_node); if (ret) return ret; diff --git a/drivers/gpu/drm/imx/parallel-display.c b/drivers/gpu/drm/imx/parallel-display.c index 50b5b89c2db2..9b1ec7e73c30 100644 --- a/drivers/gpu/drm/imx/parallel-display.c +++ b/drivers/gpu/drm/imx/parallel-display.c @@ -258,13 +258,6 @@ static const struct drm_bridge_funcs imx_pd_bridge_funcs = { .atomic_get_output_bus_fmts = imx_pd_bridge_atomic_get_output_bus_fmts, }; -static void imx_pd_encoder_cleanup(struct drm_device *drm, void *ptr) -{ - struct drm_encoder *encoder = ptr; - - drm_encoder_cleanup(encoder); -} - static int imx_pd_bind(struct device *dev, struct device *master, void *data) { struct drm_device *drm = data; @@ -275,23 +268,16 @@ static int imx_pd_bind(struct device *dev, struct device *master, void *data) struct drm_bridge *bridge; int ret; - imxpd_encoder = drmm_kzalloc(drm, sizeof(*imxpd_encoder), GFP_KERNEL); - if (!imxpd_encoder) - return -ENOMEM; + imxpd_encoder = drmm_simple_encoder_alloc(drm, struct imx_parallel_display_encoder, + encoder, DRM_MODE_ENCODER_NONE); + if (IS_ERR(imxpd_encoder)) + return PTR_ERR(imxpd_encoder); imxpd_encoder->pd = imxpd; connector = &imxpd_encoder->connector; encoder = &imxpd_encoder->encoder; bridge = &imxpd_encoder->bridge; - ret = drm_simple_encoder_init(drm, encoder, DRM_MODE_ENCODER_NONE); - if (ret) - return ret; - - ret = drmm_add_action_or_reset(drm, imx_pd_encoder_cleanup, encoder); - if (ret) - return ret; - ret = imx_drm_encoder_parse_of(drm, encoder, imxpd->dev->of_node); if (ret) return ret; -- 2.20.1 _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel