| From 05aae3a8db54dfa8c154b6a97ea60e766d806e74 Mon Sep 17 00:00:00 2001 |
| From: Chris Wilson <chris@chris-wilson.co.uk> |
| Date: Tue, 6 Aug 2013 17:43:07 +0100 |
| Subject: drm/i915: Export intel_framebuffer_fini |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| Rather than open-code the teardown of a framebuffer, export the routine |
| from intel_display.c. This then make intel_fbdev symmetric in its use of |
| the common intel_framebuffer routines to initialise and clean up the |
| struct intel_framebuffer. (And new features need only be added in one |
| location!) |
| |
| Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> |
| Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit ddfe15677d9c47f2491e401cd773b45e1aac74bf) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_display.c | 10 +++++++--- |
| drivers/gpu/drm/i915/intel_drv.h | 1 + |
| drivers/gpu/drm/i915/intel_fb.c | 15 +++++---------- |
| 3 files changed, 13 insertions(+), 13 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c |
| index bd3591af3395..a5aee8993283 100644 |
| --- a/drivers/gpu/drm/i915/intel_display.c |
| +++ b/drivers/gpu/drm/i915/intel_display.c |
| @@ -9408,13 +9408,17 @@ static void intel_setup_outputs(struct drm_device *dev) |
| drm_helper_move_panel_connectors_to_head(dev); |
| } |
| |
| +void intel_framebuffer_fini(struct intel_framebuffer *fb) |
| +{ |
| + drm_framebuffer_cleanup(&fb->base); |
| + drm_gem_object_unreference_unlocked(&fb->obj->base); |
| +} |
| + |
| static void intel_user_framebuffer_destroy(struct drm_framebuffer *fb) |
| { |
| struct intel_framebuffer *intel_fb = to_intel_framebuffer(fb); |
| |
| - drm_framebuffer_cleanup(fb); |
| - drm_gem_object_unreference_unlocked(&intel_fb->obj->base); |
| - |
| + intel_framebuffer_fini(intel_fb); |
| kfree(intel_fb); |
| } |
| |
| diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h |
| index ed33976c194b..54e389de9f42 100644 |
| --- a/drivers/gpu/drm/i915/intel_drv.h |
| +++ b/drivers/gpu/drm/i915/intel_drv.h |
| @@ -720,6 +720,7 @@ extern int intel_framebuffer_init(struct drm_device *dev, |
| struct intel_framebuffer *ifb, |
| struct drm_mode_fb_cmd2 *mode_cmd, |
| struct drm_i915_gem_object *obj); |
| +extern void intel_framebuffer_fini(struct intel_framebuffer *fb); |
| extern int intel_fbdev_init(struct drm_device *dev); |
| extern void intel_fbdev_initial_config(struct drm_device *dev); |
| extern void intel_fbdev_fini(struct drm_device *dev); |
| diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c |
| index f3c97e05b0d8..bc2100007b21 100644 |
| --- a/drivers/gpu/drm/i915/intel_fb.c |
| +++ b/drivers/gpu/drm/i915/intel_fb.c |
| @@ -193,26 +193,21 @@ static struct drm_fb_helper_funcs intel_fb_helper_funcs = { |
| static void intel_fbdev_destroy(struct drm_device *dev, |
| struct intel_fbdev *ifbdev) |
| { |
| - struct fb_info *info; |
| - struct intel_framebuffer *ifb = &ifbdev->ifb; |
| - |
| if (ifbdev->helper.fbdev) { |
| - info = ifbdev->helper.fbdev; |
| + struct fb_info *info = ifbdev->helper.fbdev; |
| + |
| unregister_framebuffer(info); |
| iounmap(info->screen_base); |
| if (info->cmap.len) |
| fb_dealloc_cmap(&info->cmap); |
| + |
| framebuffer_release(info); |
| } |
| |
| drm_fb_helper_fini(&ifbdev->helper); |
| |
| - drm_framebuffer_unregister_private(&ifb->base); |
| - drm_framebuffer_cleanup(&ifb->base); |
| - if (ifb->obj) { |
| - drm_gem_object_unreference_unlocked(&ifb->obj->base); |
| - ifb->obj = NULL; |
| - } |
| + drm_framebuffer_unregister_private(&ifbdev->ifb.base); |
| + intel_framebuffer_fini(&ifbdev->ifb); |
| } |
| |
| int intel_fbdev_init(struct drm_device *dev) |
| -- |
| 1.8.5.rc3 |
| |