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;
 | 
						struct drm_mode_config *config = &dev->mode_config;
 | 
				
			||||||
	int i;
 | 
						int i;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!drm_fbdev_emulation)
 | 
						if (!drm_fbdev_emulation) {
 | 
				
			||||||
 | 
							dev->fb_helper = fb_helper;
 | 
				
			||||||
		return 0;
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (!max_conn_count)
 | 
						if (!max_conn_count)
 | 
				
			||||||
		return -EINVAL;
 | 
							return -EINVAL;
 | 
				
			||||||
| 
						 | 
					@ -835,6 +837,8 @@ int drm_fb_helper_init(struct drm_device *dev,
 | 
				
			||||||
		i++;
 | 
							i++;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						dev->fb_helper = fb_helper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	return 0;
 | 
						return 0;
 | 
				
			||||||
out_free:
 | 
					out_free:
 | 
				
			||||||
	drm_fb_helper_crtc_free(fb_helper);
 | 
						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;
 | 
						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;
 | 
							return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	cancel_work_sync(&fb_helper->resume_work);
 | 
						cancel_work_sync(&fb_helper->resume_work);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -17,6 +17,7 @@ struct drm_vblank_crtc;
 | 
				
			||||||
struct drm_sg_mem;
 | 
					struct drm_sg_mem;
 | 
				
			||||||
struct drm_local_map;
 | 
					struct drm_local_map;
 | 
				
			||||||
struct drm_vma_offset_manager;
 | 
					struct drm_vma_offset_manager;
 | 
				
			||||||
 | 
					struct drm_fb_helper;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
struct inode;
 | 
					struct inode;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -185,6 +186,14 @@ struct drm_device {
 | 
				
			||||||
	struct drm_vma_offset_manager *vma_offset_manager;
 | 
						struct drm_vma_offset_manager *vma_offset_manager;
 | 
				
			||||||
	/*@} */
 | 
						/*@} */
 | 
				
			||||||
	int switch_power_state;
 | 
						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
 | 
					#endif
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue