diff options
| author | Archit Taneja <architt@codeaurora.org> | 2015-07-31 06:51:53 -0400 |
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2015-08-06 08:13:04 -0400 |
| commit | 4f72a6eaedf71f3d7729086ca34703b3615f59d0 (patch) | |
| tree | 5cfcebcd3cad2949f3661582d5e0549064f01080 /drivers/gpu/drm/mgag200 | |
| parent | 231e6faf027ae5e86539bb5a3cdb2b22a96dae8c (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.c | 39 |
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; |
| 243 | out: | ||
| 244 | return ret; | ||
| 245 | } | 229 | } |
| 246 | 230 | ||
| 247 | static int mga_fbdev_destroy(struct drm_device *dev, | 231 | static 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); |
