drm/fb-helper: Export drm_fb_helper_release_info()
Export the fb_info release code as drm_fb_helper_release_info(). Will help with cleaning up failed fbdev probing. Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de> Reviewed-by: Javier Martinez Canillas <javierm@redhat.com> Acked-by: Zack Rusin <zackr@vmware.com> Tested-by: Sui Jingfeng<suijingfeng@loongson.cn> Link: https://patchwork.freedesktop.org/patch/msgid/20230320150751.20399-4-tzimmermann@suse.de
This commit is contained in:
parent
7423740b25
commit
6a4fef2181
@ -538,6 +538,29 @@ err_release:
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_alloc_info);
|
||||
|
||||
/**
|
||||
* drm_fb_helper_release_info - release fb_info and its members
|
||||
* @fb_helper: driver-allocated fbdev helper
|
||||
*
|
||||
* A helper to release fb_info and the member cmap. Drivers do not
|
||||
* need to release the allocated fb_info structure themselves, this is
|
||||
* automatically done when calling drm_fb_helper_fini().
|
||||
*/
|
||||
void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper)
|
||||
{
|
||||
struct fb_info *info = fb_helper->info;
|
||||
|
||||
if (!info)
|
||||
return;
|
||||
|
||||
fb_helper->info = NULL;
|
||||
|
||||
if (info->cmap.len)
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
framebuffer_release(info);
|
||||
}
|
||||
EXPORT_SYMBOL(drm_fb_helper_release_info);
|
||||
|
||||
/**
|
||||
* drm_fb_helper_unregister_info - unregister fb_info framebuffer device
|
||||
* @fb_helper: driver-allocated fbdev helper, can be NULL
|
||||
@ -561,8 +584,6 @@ EXPORT_SYMBOL(drm_fb_helper_unregister_info);
|
||||
*/
|
||||
void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
|
||||
{
|
||||
struct fb_info *info;
|
||||
|
||||
if (!fb_helper)
|
||||
return;
|
||||
|
||||
@ -574,13 +595,7 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
|
||||
cancel_work_sync(&fb_helper->resume_work);
|
||||
cancel_work_sync(&fb_helper->damage_work);
|
||||
|
||||
info = fb_helper->info;
|
||||
if (info) {
|
||||
if (info->cmap.len)
|
||||
fb_dealloc_cmap(&info->cmap);
|
||||
framebuffer_release(info);
|
||||
}
|
||||
fb_helper->info = NULL;
|
||||
drm_fb_helper_release_info(fb_helper);
|
||||
|
||||
mutex_lock(&kernel_fb_helper_lock);
|
||||
if (!list_empty(&fb_helper->kernel_fb_list)) {
|
||||
|
@ -256,6 +256,7 @@ int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
|
||||
int drm_fb_helper_restore_fbdev_mode_unlocked(struct drm_fb_helper *fb_helper);
|
||||
|
||||
struct fb_info *drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper);
|
||||
void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper);
|
||||
void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper);
|
||||
void drm_fb_helper_fill_info(struct fb_info *info,
|
||||
struct drm_fb_helper *fb_helper,
|
||||
@ -365,6 +366,10 @@ drm_fb_helper_alloc_info(struct drm_fb_helper *fb_helper)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
static inline void drm_fb_helper_release_info(struct drm_fb_helper *fb_helper)
|
||||
{
|
||||
}
|
||||
|
||||
static inline void drm_fb_helper_unregister_info(struct drm_fb_helper *fb_helper)
|
||||
{
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user