Skip to content

Commit 6978bce

Browse files
committed
drm/komeda: Reordered the komeda's de-init functions
The de-init routine should be doing the following in order:- 1. Unregister the drm device 2. Shut down the crtcs - failing to do this might cause a connector leakage See the 'commit 109c4d1 ("drm/arm/malidp: Ensure that the crtcs are shutdown before removing any encoder/connector")' 3. Disable the interrupts 4. Unbind the components 5. Free up DRM mode_config info Changes from v1:- 1. Re-ordered the header files inclusion 2. Rebased on top of the latest drm-misc-fixes Signed-off-by:. Ayan Kumar Halder <[email protected]> Reviewed-by: Mihail Atanassov <[email protected]> Reviewed-by: James Qian Wang (Arm Technology China) <[email protected]> Link: https://patchwork.freedesktop.org/patch/327606/
1 parent 51a44a2 commit 6978bce

File tree

1 file changed

+15
-8
lines changed

1 file changed

+15
-8
lines changed

drivers/gpu/drm/arm/display/komeda/komeda_kms.c

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,8 @@
1414
#include <drm/drm_gem_cma_helper.h>
1515
#include <drm/drm_gem_framebuffer_helper.h>
1616
#include <drm/drm_irq.h>
17-
#include <drm/drm_vblank.h>
1817
#include <drm/drm_probe_helper.h>
18+
#include <drm/drm_vblank.h>
1919

2020
#include "komeda_dev.h"
2121
#include "komeda_framebuffer.h"
@@ -306,27 +306,33 @@ struct komeda_kms_dev *komeda_kms_attach(struct komeda_dev *mdev)
306306
komeda_kms_irq_handler, IRQF_SHARED,
307307
drm->driver->name, drm);
308308
if (err)
309-
goto cleanup_mode_config;
309+
goto free_component_binding;
310310

311311
err = mdev->funcs->enable_irq(mdev);
312312
if (err)
313-
goto cleanup_mode_config;
313+
goto free_component_binding;
314314

315315
drm->irq_enabled = true;
316316

317317
drm_kms_helper_poll_init(drm);
318318

319319
err = drm_dev_register(drm, 0);
320320
if (err)
321-
goto cleanup_mode_config;
321+
goto free_interrupts;
322322

323323
return kms;
324324

325-
cleanup_mode_config:
325+
free_interrupts:
326326
drm_kms_helper_poll_fini(drm);
327327
drm->irq_enabled = false;
328+
mdev->funcs->disable_irq(mdev);
329+
free_component_binding:
330+
component_unbind_all(mdev->dev, drm);
331+
cleanup_mode_config:
328332
drm_mode_config_cleanup(drm);
329333
komeda_kms_cleanup_private_objs(kms);
334+
drm->dev_private = NULL;
335+
drm_dev_put(drm);
330336
free_kms:
331337
kfree(kms);
332338
return ERR_PTR(err);
@@ -337,13 +343,14 @@ void komeda_kms_detach(struct komeda_kms_dev *kms)
337343
struct drm_device *drm = &kms->base;
338344
struct komeda_dev *mdev = drm->dev_private;
339345

340-
drm->irq_enabled = false;
341-
mdev->funcs->disable_irq(mdev);
342346
drm_dev_unregister(drm);
343347
drm_kms_helper_poll_fini(drm);
348+
drm_atomic_helper_shutdown(drm);
349+
drm->irq_enabled = false;
350+
mdev->funcs->disable_irq(mdev);
344351
component_unbind_all(mdev->dev, drm);
345-
komeda_kms_cleanup_private_objs(kms);
346352
drm_mode_config_cleanup(drm);
353+
komeda_kms_cleanup_private_objs(kms);
347354
drm->dev_private = NULL;
348355
drm_dev_put(drm);
349356
}

0 commit comments

Comments
 (0)