.. | .. |
---|
320 | 320 | if (priv->afbcd.ops) { |
---|
321 | 321 | ret = priv->afbcd.ops->init(priv); |
---|
322 | 322 | if (ret) |
---|
323 | | - return ret; |
---|
| 323 | + goto free_drm; |
---|
324 | 324 | } |
---|
325 | 325 | |
---|
326 | 326 | /* Encoder Initialization */ |
---|
327 | 327 | |
---|
328 | 328 | ret = meson_venc_cvbs_create(priv); |
---|
329 | 329 | if (ret) |
---|
330 | | - goto free_drm; |
---|
| 330 | + goto exit_afbcd; |
---|
331 | 331 | |
---|
332 | 332 | if (has_components) { |
---|
333 | 333 | ret = component_bind_all(drm->dev, drm); |
---|
334 | 334 | if (ret) { |
---|
335 | 335 | dev_err(drm->dev, "Couldn't bind all components\n"); |
---|
336 | | - goto free_drm; |
---|
| 336 | + goto exit_afbcd; |
---|
337 | 337 | } |
---|
338 | 338 | } |
---|
339 | 339 | |
---|
340 | 340 | ret = meson_plane_create(priv); |
---|
341 | 341 | if (ret) |
---|
342 | | - goto free_drm; |
---|
| 342 | + goto unbind_all; |
---|
343 | 343 | |
---|
344 | 344 | ret = meson_overlay_create(priv); |
---|
345 | 345 | if (ret) |
---|
346 | | - goto free_drm; |
---|
| 346 | + goto unbind_all; |
---|
347 | 347 | |
---|
348 | 348 | ret = meson_crtc_create(priv); |
---|
349 | 349 | if (ret) |
---|
350 | | - goto free_drm; |
---|
| 350 | + goto unbind_all; |
---|
351 | 351 | |
---|
352 | 352 | ret = drm_irq_install(drm, priv->vsync_irq); |
---|
353 | 353 | if (ret) |
---|
354 | | - goto free_drm; |
---|
| 354 | + goto unbind_all; |
---|
355 | 355 | |
---|
356 | 356 | drm_mode_config_reset(drm); |
---|
357 | 357 | |
---|
.. | .. |
---|
369 | 369 | |
---|
370 | 370 | uninstall_irq: |
---|
371 | 371 | 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); |
---|
372 | 378 | free_drm: |
---|
373 | 379 | drm_dev_put(drm); |
---|
374 | 380 | |
---|