Skip to content

Commit

Permalink
drm: Add drm_device->fb_helper pointer
Browse files Browse the repository at this point in the history
drm_fb_helper is *the* way of doing fbdev emulation so add a pointer to
struct drm_device. This makes it possible to add callback helpers for
.last_close and .output_poll_changed further reducing fbdev emulation
footprint in drivers. The pointer is set by drm_fb_helper_init() and
cleared by drm_fb_helper_fini().

Signed-off-by: Noralf Trønnes <noralf@tronnes.org>
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20171030153951.56269-3-noralf@tronnes.org
  • Loading branch information
Noralf Trønnes committed Oct 31, 2017
1 parent c777990 commit 29ad20b
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 2 deletions.
13 changes: 11 additions & 2 deletions drivers/gpu/drm/drm_fb_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -799,8 +799,10 @@ int drm_fb_helper_init(struct drm_device *dev,
struct drm_mode_config *config = &dev->mode_config;
int i;

if (!drm_fbdev_emulation)
if (!drm_fbdev_emulation) {
dev->fb_helper = fb_helper;
return 0;
}

if (!max_conn_count)
return -EINVAL;
Expand Down Expand Up @@ -835,6 +837,8 @@ int drm_fb_helper_init(struct drm_device *dev,
i++;
}

dev->fb_helper = fb_helper;

return 0;
out_free:
drm_fb_helper_crtc_free(fb_helper);
Expand Down Expand Up @@ -913,7 +917,12 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)
{
struct fb_info *info;

if (!drm_fbdev_emulation || !fb_helper)
if (!fb_helper)
return;

fb_helper->dev->fb_helper = NULL;

if (!drm_fbdev_emulation)
return;

cancel_work_sync(&fb_helper->resume_work);
Expand Down
9 changes: 9 additions & 0 deletions include/drm/drm_device.h
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ struct drm_vblank_crtc;
struct drm_sg_mem;
struct drm_local_map;
struct drm_vma_offset_manager;
struct drm_fb_helper;

struct inode;

Expand Down Expand Up @@ -185,6 +186,14 @@ struct drm_device {
struct drm_vma_offset_manager *vma_offset_manager;
/*@} */
int switch_power_state;

/**
* @fb_helper:
*
* Pointer to the fbdev emulation structure.
* Set by drm_fb_helper_init() and cleared by drm_fb_helper_fini().
*/
struct drm_fb_helper *fb_helper;
};

#endif

0 comments on commit 29ad20b

Please sign in to comment.