aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/arm/hdlcd_drv.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/arm/hdlcd_drv.c')
-rw-r--r--drivers/gpu/drm/arm/hdlcd_drv.c13
1 files changed, 8 insertions, 5 deletions
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c
index 70fca288313a..0ed1cde98cf8 100644
--- a/drivers/gpu/drm/arm/hdlcd_drv.c
+++ b/drivers/gpu/drm/arm/hdlcd_drv.c
@@ -325,6 +325,7 @@ err_fbdev:
325err_vblank: 325err_vblank:
326 pm_runtime_disable(drm->dev); 326 pm_runtime_disable(drm->dev);
327err_pm_active: 327err_pm_active:
328 drm_atomic_helper_shutdown(drm);
328 component_unbind_all(dev, drm); 329 component_unbind_all(dev, drm);
329err_unload: 330err_unload:
330 of_node_put(hdlcd->crtc.port); 331 of_node_put(hdlcd->crtc.port);
@@ -350,16 +351,18 @@ static void hdlcd_drm_unbind(struct device *dev)
350 component_unbind_all(dev, drm); 351 component_unbind_all(dev, drm);
351 of_node_put(hdlcd->crtc.port); 352 of_node_put(hdlcd->crtc.port);
352 hdlcd->crtc.port = NULL; 353 hdlcd->crtc.port = NULL;
353 pm_runtime_get_sync(drm->dev); 354 pm_runtime_get_sync(dev);
355 drm_crtc_vblank_off(&hdlcd->crtc);
354 drm_irq_uninstall(drm); 356 drm_irq_uninstall(drm);
355 pm_runtime_put_sync(drm->dev);
356 pm_runtime_disable(drm->dev);
357 of_reserved_mem_device_release(drm->dev);
358 drm_atomic_helper_shutdown(drm); 357 drm_atomic_helper_shutdown(drm);
358 pm_runtime_put(dev);
359 if (pm_runtime_enabled(dev))
360 pm_runtime_disable(dev);
361 of_reserved_mem_device_release(dev);
359 drm_mode_config_cleanup(drm); 362 drm_mode_config_cleanup(drm);
360 drm_dev_put(drm);
361 drm->dev_private = NULL; 363 drm->dev_private = NULL;
362 dev_set_drvdata(dev, NULL); 364 dev_set_drvdata(dev, NULL);
365 drm_dev_put(drm);
363} 366}
364 367
365static const struct component_master_ops hdlcd_master_ops = { 368static const struct component_master_ops hdlcd_master_ops = {