diff options
-rw-r--r-- | drivers/gpu/drm/sun4i/sun4i_drv.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c index 1de15cd1b102..767bbadcc85d 100644 --- a/drivers/gpu/drm/sun4i/sun4i_drv.c +++ b/drivers/gpu/drm/sun4i/sun4i_drv.c | |||
@@ -12,6 +12,7 @@ | |||
12 | 12 | ||
13 | #include <linux/component.h> | 13 | #include <linux/component.h> |
14 | #include <linux/of_graph.h> | 14 | #include <linux/of_graph.h> |
15 | #include <linux/of_reserved_mem.h> | ||
15 | 16 | ||
16 | #include <drm/drmP.h> | 17 | #include <drm/drmP.h> |
17 | #include <drm/drm_crtc_helper.h> | 18 | #include <drm/drm_crtc_helper.h> |
@@ -101,10 +102,16 @@ static int sun4i_drv_bind(struct device *dev) | |||
101 | } | 102 | } |
102 | drm->dev_private = drv; | 103 | drm->dev_private = drv; |
103 | 104 | ||
105 | ret = of_reserved_mem_device_init(dev); | ||
106 | if (ret && ret != -ENODEV) { | ||
107 | dev_err(drm->dev, "Couldn't claim our memory region\n"); | ||
108 | goto free_drm; | ||
109 | } | ||
110 | |||
104 | /* drm_vblank_init calls kcalloc, which can fail */ | 111 | /* drm_vblank_init calls kcalloc, which can fail */ |
105 | ret = drm_vblank_init(drm, 1); | 112 | ret = drm_vblank_init(drm, 1); |
106 | if (ret) | 113 | if (ret) |
107 | goto free_drm; | 114 | goto free_mem_region; |
108 | 115 | ||
109 | drm_mode_config_init(drm); | 116 | drm_mode_config_init(drm); |
110 | 117 | ||
@@ -142,6 +149,8 @@ finish_poll: | |||
142 | cleanup_mode_config: | 149 | cleanup_mode_config: |
143 | drm_mode_config_cleanup(drm); | 150 | drm_mode_config_cleanup(drm); |
144 | drm_vblank_cleanup(drm); | 151 | drm_vblank_cleanup(drm); |
152 | free_mem_region: | ||
153 | of_reserved_mem_device_release(dev); | ||
145 | free_drm: | 154 | free_drm: |
146 | drm_dev_unref(drm); | 155 | drm_dev_unref(drm); |
147 | return ret; | 156 | return ret; |
@@ -156,6 +165,7 @@ static void sun4i_drv_unbind(struct device *dev) | |||
156 | sun4i_framebuffer_free(drm); | 165 | sun4i_framebuffer_free(drm); |
157 | drm_mode_config_cleanup(drm); | 166 | drm_mode_config_cleanup(drm); |
158 | drm_vblank_cleanup(drm); | 167 | drm_vblank_cleanup(drm); |
168 | of_reserved_mem_device_release(dev); | ||
159 | drm_dev_unref(drm); | 169 | drm_dev_unref(drm); |
160 | } | 170 | } |
161 | 171 | ||