|
15 | 15 |
|
16 | 16 | #include <drm/drm_atomic_helper.h>
|
17 | 17 | #include <drm/drm_gem.h>
|
| 18 | +#include <drm/drm_gem_framebuffer_helper.h> |
18 | 19 | #include <drm/drm_gem_vram_helper.h>
|
19 | 20 | #include <drm/drm_print.h>
|
20 | 21 |
|
@@ -97,74 +98,8 @@ int hibmc_dumb_create(struct drm_file *file, struct drm_device *dev,
|
97 | 98 | return 0;
|
98 | 99 | }
|
99 | 100 |
|
100 |
| -static void hibmc_user_framebuffer_destroy(struct drm_framebuffer *fb) |
101 |
| -{ |
102 |
| - struct hibmc_framebuffer *hibmc_fb = to_hibmc_framebuffer(fb); |
103 |
| - |
104 |
| - drm_gem_object_put_unlocked(hibmc_fb->obj); |
105 |
| - drm_framebuffer_cleanup(fb); |
106 |
| - kfree(hibmc_fb); |
107 |
| -} |
108 |
| - |
109 |
| -static const struct drm_framebuffer_funcs hibmc_fb_funcs = { |
110 |
| - .destroy = hibmc_user_framebuffer_destroy, |
111 |
| -}; |
112 |
| - |
113 |
| -struct hibmc_framebuffer * |
114 |
| -hibmc_framebuffer_init(struct drm_device *dev, |
115 |
| - const struct drm_mode_fb_cmd2 *mode_cmd, |
116 |
| - struct drm_gem_object *obj) |
117 |
| -{ |
118 |
| - struct hibmc_framebuffer *hibmc_fb; |
119 |
| - int ret; |
120 |
| - |
121 |
| - hibmc_fb = kzalloc(sizeof(*hibmc_fb), GFP_KERNEL); |
122 |
| - if (!hibmc_fb) { |
123 |
| - DRM_ERROR("failed to allocate hibmc_fb\n"); |
124 |
| - return ERR_PTR(-ENOMEM); |
125 |
| - } |
126 |
| - |
127 |
| - drm_helper_mode_fill_fb_struct(dev, &hibmc_fb->fb, mode_cmd); |
128 |
| - hibmc_fb->obj = obj; |
129 |
| - ret = drm_framebuffer_init(dev, &hibmc_fb->fb, &hibmc_fb_funcs); |
130 |
| - if (ret) { |
131 |
| - DRM_ERROR("drm_framebuffer_init failed: %d\n", ret); |
132 |
| - kfree(hibmc_fb); |
133 |
| - return ERR_PTR(ret); |
134 |
| - } |
135 |
| - |
136 |
| - return hibmc_fb; |
137 |
| -} |
138 |
| - |
139 |
| -static struct drm_framebuffer * |
140 |
| -hibmc_user_framebuffer_create(struct drm_device *dev, |
141 |
| - struct drm_file *filp, |
142 |
| - const struct drm_mode_fb_cmd2 *mode_cmd) |
143 |
| -{ |
144 |
| - struct drm_gem_object *obj; |
145 |
| - struct hibmc_framebuffer *hibmc_fb; |
146 |
| - |
147 |
| - DRM_DEBUG_DRIVER("%dx%d, format %c%c%c%c\n", |
148 |
| - mode_cmd->width, mode_cmd->height, |
149 |
| - (mode_cmd->pixel_format) & 0xff, |
150 |
| - (mode_cmd->pixel_format >> 8) & 0xff, |
151 |
| - (mode_cmd->pixel_format >> 16) & 0xff, |
152 |
| - (mode_cmd->pixel_format >> 24) & 0xff); |
153 |
| - |
154 |
| - obj = drm_gem_object_lookup(filp, mode_cmd->handles[0]); |
155 |
| - if (!obj) |
156 |
| - return ERR_PTR(-ENOENT); |
157 |
| - |
158 |
| - hibmc_fb = hibmc_framebuffer_init(dev, mode_cmd, obj); |
159 |
| - if (IS_ERR(hibmc_fb)) { |
160 |
| - drm_gem_object_put_unlocked(obj); |
161 |
| - return ERR_PTR((long)hibmc_fb); |
162 |
| - } |
163 |
| - return &hibmc_fb->fb; |
164 |
| -} |
165 |
| - |
166 | 101 | const struct drm_mode_config_funcs hibmc_mode_funcs = {
|
167 | 102 | .atomic_check = drm_atomic_helper_check,
|
168 | 103 | .atomic_commit = drm_atomic_helper_commit,
|
169 |
| - .fb_create = hibmc_user_framebuffer_create, |
| 104 | + .fb_create = drm_gem_fb_create, |
170 | 105 | };
|
0 commit comments