hc
2024-01-03 2f7c68cb55ecb7331f2381deb497c27155f32faf
kernel/drivers/gpu/drm/meson/meson_drv.c
....@@ -320,38 +320,38 @@
320320 if (priv->afbcd.ops) {
321321 ret = priv->afbcd.ops->init(priv);
322322 if (ret)
323
- return ret;
323
+ goto free_drm;
324324 }
325325
326326 /* Encoder Initialization */
327327
328328 ret = meson_venc_cvbs_create(priv);
329329 if (ret)
330
- goto free_drm;
330
+ goto exit_afbcd;
331331
332332 if (has_components) {
333333 ret = component_bind_all(drm->dev, drm);
334334 if (ret) {
335335 dev_err(drm->dev, "Couldn't bind all components\n");
336
- goto free_drm;
336
+ goto exit_afbcd;
337337 }
338338 }
339339
340340 ret = meson_plane_create(priv);
341341 if (ret)
342
- goto free_drm;
342
+ goto unbind_all;
343343
344344 ret = meson_overlay_create(priv);
345345 if (ret)
346
- goto free_drm;
346
+ goto unbind_all;
347347
348348 ret = meson_crtc_create(priv);
349349 if (ret)
350
- goto free_drm;
350
+ goto unbind_all;
351351
352352 ret = drm_irq_install(drm, priv->vsync_irq);
353353 if (ret)
354
- goto free_drm;
354
+ goto unbind_all;
355355
356356 drm_mode_config_reset(drm);
357357
....@@ -369,6 +369,12 @@
369369
370370 uninstall_irq:
371371 drm_irq_uninstall(drm);
372
+unbind_all:
373
+ if (has_components)
374
+ component_unbind_all(drm->dev, drm);
375
+exit_afbcd:
376
+ if (priv->afbcd.ops)
377
+ priv->afbcd.ops->exit(priv);
372378 free_drm:
373379 drm_dev_put(drm);
374380