diff options
Diffstat (limited to 'drivers/gpu/drm/arm/hdlcd_drv.c')
-rw-r--r-- | drivers/gpu/drm/arm/hdlcd_drv.c | 14 |
1 files changed, 3 insertions, 11 deletions
diff --git a/drivers/gpu/drm/arm/hdlcd_drv.c b/drivers/gpu/drm/arm/hdlcd_drv.c index 56b829f97699..3ac1ae4d8caf 100644 --- a/drivers/gpu/drm/arm/hdlcd_drv.c +++ b/drivers/gpu/drm/arm/hdlcd_drv.c | |||
@@ -57,14 +57,13 @@ static int hdlcd_load(struct drm_device *drm, unsigned long flags) | |||
57 | DRM_ERROR("failed to map control registers area\n"); | 57 | DRM_ERROR("failed to map control registers area\n"); |
58 | ret = PTR_ERR(hdlcd->mmio); | 58 | ret = PTR_ERR(hdlcd->mmio); |
59 | hdlcd->mmio = NULL; | 59 | hdlcd->mmio = NULL; |
60 | goto fail; | 60 | return ret; |
61 | } | 61 | } |
62 | 62 | ||
63 | version = hdlcd_read(hdlcd, HDLCD_REG_VERSION); | 63 | version = hdlcd_read(hdlcd, HDLCD_REG_VERSION); |
64 | if ((version & HDLCD_PRODUCT_MASK) != HDLCD_PRODUCT_ID) { | 64 | if ((version & HDLCD_PRODUCT_MASK) != HDLCD_PRODUCT_ID) { |
65 | DRM_ERROR("unknown product id: 0x%x\n", version); | 65 | DRM_ERROR("unknown product id: 0x%x\n", version); |
66 | ret = -EINVAL; | 66 | return -EINVAL; |
67 | goto fail; | ||
68 | } | 67 | } |
69 | DRM_INFO("found ARM HDLCD version r%dp%d\n", | 68 | DRM_INFO("found ARM HDLCD version r%dp%d\n", |
70 | (version & HDLCD_VERSION_MAJOR_MASK) >> 8, | 69 | (version & HDLCD_VERSION_MAJOR_MASK) >> 8, |
@@ -73,7 +72,7 @@ static int hdlcd_load(struct drm_device *drm, unsigned long flags) | |||
73 | /* Get the optional framebuffer memory resource */ | 72 | /* Get the optional framebuffer memory resource */ |
74 | ret = of_reserved_mem_device_init(drm->dev); | 73 | ret = of_reserved_mem_device_init(drm->dev); |
75 | if (ret && ret != -ENODEV) | 74 | if (ret && ret != -ENODEV) |
76 | goto fail; | 75 | return ret; |
77 | 76 | ||
78 | ret = dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32)); | 77 | ret = dma_set_mask_and_coherent(drm->dev, DMA_BIT_MASK(32)); |
79 | if (ret) | 78 | if (ret) |
@@ -101,8 +100,6 @@ irq_fail: | |||
101 | drm_crtc_cleanup(&hdlcd->crtc); | 100 | drm_crtc_cleanup(&hdlcd->crtc); |
102 | setup_fail: | 101 | setup_fail: |
103 | of_reserved_mem_device_release(drm->dev); | 102 | of_reserved_mem_device_release(drm->dev); |
104 | fail: | ||
105 | devm_clk_put(drm->dev, hdlcd->clk); | ||
106 | 103 | ||
107 | return ret; | 104 | return ret; |
108 | } | 105 | } |
@@ -412,7 +409,6 @@ err_unload: | |||
412 | pm_runtime_put_sync(drm->dev); | 409 | pm_runtime_put_sync(drm->dev); |
413 | pm_runtime_disable(drm->dev); | 410 | pm_runtime_disable(drm->dev); |
414 | of_reserved_mem_device_release(drm->dev); | 411 | of_reserved_mem_device_release(drm->dev); |
415 | devm_clk_put(dev, hdlcd->clk); | ||
416 | err_free: | 412 | err_free: |
417 | drm_dev_unref(drm); | 413 | drm_dev_unref(drm); |
418 | 414 | ||
@@ -436,10 +432,6 @@ static void hdlcd_drm_unbind(struct device *dev) | |||
436 | pm_runtime_put_sync(drm->dev); | 432 | pm_runtime_put_sync(drm->dev); |
437 | pm_runtime_disable(drm->dev); | 433 | pm_runtime_disable(drm->dev); |
438 | of_reserved_mem_device_release(drm->dev); | 434 | of_reserved_mem_device_release(drm->dev); |
439 | if (!IS_ERR(hdlcd->clk)) { | ||
440 | devm_clk_put(drm->dev, hdlcd->clk); | ||
441 | hdlcd->clk = NULL; | ||
442 | } | ||
443 | drm_mode_config_cleanup(drm); | 435 | drm_mode_config_cleanup(drm); |
444 | drm_dev_unregister(drm); | 436 | drm_dev_unregister(drm); |
445 | drm_dev_unref(drm); | 437 | drm_dev_unref(drm); |