aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/mgag200
diff options
context:
space:
mode:
authorArchit Taneja <architt@codeaurora.org>2015-07-31 06:51:53 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2015-08-06 08:13:04 -0400
commit4f72a6eaedf71f3d7729086ca34703b3615f59d0 (patch)
tree5cfcebcd3cad2949f3661582d5e0549064f01080 /drivers/gpu/drm/mgag200
parent231e6faf027ae5e86539bb5a3cdb2b22a96dae8c (diff)
drm/mgag200: Use new drm_fb_helper functions
Use the newly created wrapper drm_fb_helper functions instead of calling core fbdev functions directly. They also simplify the fb_info creation. v3: - Don't touch remove_conflicting_framebuffers v2: - remove unused goto label 'out' Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Cc: David Airlie <airlied@linux.ie> Cc: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Archit Taneja <architt@codeaurora.org> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/mgag200')
-rw-r--r--drivers/gpu/drm/mgag200/mgag200_fb.c39
1 files changed, 8 insertions, 31 deletions
diff --git a/drivers/gpu/drm/mgag200/mgag200_fb.c b/drivers/gpu/drm/mgag200/mgag200_fb.c
index 958cf3cf082d..87de15ea1f93 100644
--- a/drivers/gpu/drm/mgag200/mgag200_fb.c
+++ b/drivers/gpu/drm/mgag200/mgag200_fb.c
@@ -101,7 +101,7 @@ static void mga_fillrect(struct fb_info *info,
101 const struct fb_fillrect *rect) 101 const struct fb_fillrect *rect)
102{ 102{
103 struct mga_fbdev *mfbdev = info->par; 103 struct mga_fbdev *mfbdev = info->par;
104 sys_fillrect(info, rect); 104 drm_fb_helper_sys_fillrect(info, rect);
105 mga_dirty_update(mfbdev, rect->dx, rect->dy, rect->width, 105 mga_dirty_update(mfbdev, rect->dx, rect->dy, rect->width,
106 rect->height); 106 rect->height);
107} 107}
@@ -110,7 +110,7 @@ static void mga_copyarea(struct fb_info *info,
110 const struct fb_copyarea *area) 110 const struct fb_copyarea *area)
111{ 111{
112 struct mga_fbdev *mfbdev = info->par; 112 struct mga_fbdev *mfbdev = info->par;
113 sys_copyarea(info, area); 113 drm_fb_helper_sys_copyarea(info, area);
114 mga_dirty_update(mfbdev, area->dx, area->dy, area->width, 114 mga_dirty_update(mfbdev, area->dx, area->dy, area->width,
115 area->height); 115 area->height);
116} 116}
@@ -119,7 +119,7 @@ static void mga_imageblit(struct fb_info *info,
119 const struct fb_image *image) 119 const struct fb_image *image)
120{ 120{
121 struct mga_fbdev *mfbdev = info->par; 121 struct mga_fbdev *mfbdev = info->par;
122 sys_imageblit(info, image); 122 drm_fb_helper_sys_imageblit(info, image);
123 mga_dirty_update(mfbdev, image->dx, image->dy, image->width, 123 mga_dirty_update(mfbdev, image->dx, image->dy, image->width,
124 image->height); 124 image->height);
125} 125}
@@ -166,7 +166,6 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
166 struct fb_info *info; 166 struct fb_info *info;
167 struct drm_framebuffer *fb; 167 struct drm_framebuffer *fb;
168 struct drm_gem_object *gobj = NULL; 168 struct drm_gem_object *gobj = NULL;
169 struct device *device = &dev->pdev->dev;
170 int ret; 169 int ret;
171 void *sysram; 170 void *sysram;
172 int size; 171 int size;
@@ -189,9 +188,9 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
189 if (!sysram) 188 if (!sysram)
190 return -ENOMEM; 189 return -ENOMEM;
191 190
192 info = framebuffer_alloc(0, device); 191 info = drm_fb_helper_alloc_fbi(helper);
193 if (info == NULL) 192 if (IS_ERR(info))
194 return -ENOMEM; 193 return PTR_ERR(info);
195 194
196 info->par = mfbdev; 195 info->par = mfbdev;
197 196
@@ -206,14 +205,6 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
206 205
207 /* setup helper */ 206 /* setup helper */
208 mfbdev->helper.fb = fb; 207 mfbdev->helper.fb = fb;
209 mfbdev->helper.fbdev = info;
210
211 ret = fb_alloc_cmap(&info->cmap, 256, 0);
212 if (ret) {
213 DRM_ERROR("%s: can't allocate color map\n", info->fix.id);
214 ret = -ENOMEM;
215 goto out;
216 }
217 208
218 strcpy(info->fix.id, "mgadrmfb"); 209 strcpy(info->fix.id, "mgadrmfb");
219 210
@@ -221,11 +212,6 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
221 info->fbops = &mgag200fb_ops; 212 info->fbops = &mgag200fb_ops;
222 213
223 /* setup aperture base/size for vesafb takeover */ 214 /* setup aperture base/size for vesafb takeover */
224 info->apertures = alloc_apertures(1);
225 if (!info->apertures) {
226 ret = -ENOMEM;
227 goto out;
228 }
229 info->apertures->ranges[0].base = mdev->dev->mode_config.fb_base; 215 info->apertures->ranges[0].base = mdev->dev->mode_config.fb_base;
230 info->apertures->ranges[0].size = mdev->mc.vram_size; 216 info->apertures->ranges[0].size = mdev->mc.vram_size;
231 217
@@ -240,24 +226,15 @@ static int mgag200fb_create(struct drm_fb_helper *helper,
240 DRM_DEBUG_KMS("allocated %dx%d\n", 226 DRM_DEBUG_KMS("allocated %dx%d\n",
241 fb->width, fb->height); 227 fb->width, fb->height);
242 return 0; 228 return 0;
243out:
244 return ret;
245} 229}
246 230
247static int mga_fbdev_destroy(struct drm_device *dev, 231static int mga_fbdev_destroy(struct drm_device *dev,
248 struct mga_fbdev *mfbdev) 232 struct mga_fbdev *mfbdev)
249{ 233{
250 struct fb_info *info;
251 struct mga_framebuffer *mfb = &mfbdev->mfb; 234 struct mga_framebuffer *mfb = &mfbdev->mfb;
252 235
253 if (mfbdev->helper.fbdev) { 236 drm_fb_helper_unregister_fbi(&mfbdev->helper);
254 info = mfbdev->helper.fbdev; 237 drm_fb_helper_release_fbi(&mfbdev->helper);
255
256 unregister_framebuffer(info);
257 if (info->cmap.len)
258 fb_dealloc_cmap(&info->cmap);
259 framebuffer_release(info);
260 }
261 238
262 if (mfb->obj) { 239 if (mfb->obj) {
263 drm_gem_object_unreference_unlocked(mfb->obj); 240 drm_gem_object_unreference_unlocked(mfb->obj);