forked from mirrors/linux
		
	drm: Add drm_device->fb_helper pointer
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
This commit is contained in:
		
							parent
							
								
									c777990fb4
								
							
						
					
					
						commit
						29ad20b22c
					
				
					 2 changed files with 20 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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;
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue