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_dtv_encoder

Change struct mdp4_dtv_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/546178/
Link: https://lore.kernel.org/r/20230708010407.3871346-15-dmitry.baryshkov@linaro.org

+7 -30
+7 -30
drivers/gpu/drm/msm/disp/mdp4/mdp4_dtv_encoder.c
··· 25 25 return to_mdp4_kms(to_mdp_kms(priv->kms)); 26 26 } 27 27 28 - static void mdp4_dtv_encoder_destroy(struct drm_encoder *encoder) 29 - { 30 - struct mdp4_dtv_encoder *mdp4_dtv_encoder = to_mdp4_dtv_encoder(encoder); 31 - drm_encoder_cleanup(encoder); 32 - kfree(mdp4_dtv_encoder); 33 - } 34 - 35 - static const struct drm_encoder_funcs mdp4_dtv_encoder_funcs = { 36 - .destroy = mdp4_dtv_encoder_destroy, 37 - }; 38 - 39 28 static void mdp4_dtv_encoder_mode_set(struct drm_encoder *encoder, 40 29 struct drm_display_mode *mode, 41 30 struct drm_display_mode *adjusted_mode) ··· 162 173 /* initialize encoder */ 163 174 struct drm_encoder *mdp4_dtv_encoder_init(struct drm_device *dev) 164 175 { 165 - struct drm_encoder *encoder = NULL; 176 + struct drm_encoder *encoder; 166 177 struct mdp4_dtv_encoder *mdp4_dtv_encoder; 167 - int ret; 168 178 169 - mdp4_dtv_encoder = kzalloc(sizeof(*mdp4_dtv_encoder), GFP_KERNEL); 170 - if (!mdp4_dtv_encoder) { 171 - ret = -ENOMEM; 172 - goto fail; 173 - } 179 + mdp4_dtv_encoder = drmm_encoder_alloc(dev, struct mdp4_dtv_encoder, base, 180 + NULL, DRM_MODE_ENCODER_TMDS, NULL); 181 + if (IS_ERR(mdp4_dtv_encoder)) 182 + return ERR_CAST(mdp4_dtv_encoder); 174 183 175 184 encoder = &mdp4_dtv_encoder->base; 176 185 177 - drm_encoder_init(dev, encoder, &mdp4_dtv_encoder_funcs, 178 - DRM_MODE_ENCODER_TMDS, NULL); 179 186 drm_encoder_helper_add(encoder, &mdp4_dtv_encoder_helper_funcs); 180 187 181 188 mdp4_dtv_encoder->hdmi_clk = devm_clk_get(dev->dev, "hdmi_clk"); 182 189 if (IS_ERR(mdp4_dtv_encoder->hdmi_clk)) { 183 190 DRM_DEV_ERROR(dev->dev, "failed to get hdmi_clk\n"); 184 - ret = PTR_ERR(mdp4_dtv_encoder->hdmi_clk); 185 - goto fail; 191 + return ERR_CAST(mdp4_dtv_encoder->hdmi_clk); 186 192 } 187 193 188 194 mdp4_dtv_encoder->mdp_clk = devm_clk_get(dev->dev, "tv_clk"); 189 195 if (IS_ERR(mdp4_dtv_encoder->mdp_clk)) { 190 196 DRM_DEV_ERROR(dev->dev, "failed to get tv_clk\n"); 191 - ret = PTR_ERR(mdp4_dtv_encoder->mdp_clk); 192 - goto fail; 197 + return ERR_CAST(mdp4_dtv_encoder->mdp_clk); 193 198 } 194 199 195 200 return encoder; 196 - 197 - fail: 198 - if (encoder) 199 - mdp4_dtv_encoder_destroy(encoder); 200 - 201 - return ERR_PTR(ret); 202 201 }