1785b93efSDave Airlie /* 2785b93efSDave Airlie * Copyright (c) 2006-2009 Red Hat Inc. 3785b93efSDave Airlie * Copyright (c) 2006-2008 Intel Corporation 4785b93efSDave Airlie * Copyright (c) 2007 Dave Airlie <airlied@linux.ie> 5785b93efSDave Airlie * 6785b93efSDave Airlie * DRM framebuffer helper functions 7785b93efSDave Airlie * 8785b93efSDave Airlie * Permission to use, copy, modify, distribute, and sell this software and its 9785b93efSDave Airlie * documentation for any purpose is hereby granted without fee, provided that 10785b93efSDave Airlie * the above copyright notice appear in all copies and that both that copyright 11785b93efSDave Airlie * notice and this permission notice appear in supporting documentation, and 12785b93efSDave Airlie * that the name of the copyright holders not be used in advertising or 13785b93efSDave Airlie * publicity pertaining to distribution of the software without specific, 14785b93efSDave Airlie * written prior permission. The copyright holders make no representations 15785b93efSDave Airlie * about the suitability of this software for any purpose. It is provided "as 16785b93efSDave Airlie * is" without express or implied warranty. 17785b93efSDave Airlie * 18785b93efSDave Airlie * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, 19785b93efSDave Airlie * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO 20785b93efSDave Airlie * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR 21785b93efSDave Airlie * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, 22785b93efSDave Airlie * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER 23785b93efSDave Airlie * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE 24785b93efSDave Airlie * OF THIS SOFTWARE. 25785b93efSDave Airlie * 26785b93efSDave Airlie * Authors: 27785b93efSDave Airlie * Dave Airlie <airlied@linux.ie> 28785b93efSDave Airlie * Jesse Barnes <jesse.barnes@intel.com> 29785b93efSDave Airlie */ 30785b93efSDave Airlie #ifndef DRM_FB_HELPER_H 31785b93efSDave Airlie #define DRM_FB_HELPER_H 32785b93efSDave Airlie 33785b93efSDave Airlie struct drm_fb_helper_crtc { 34785b93efSDave Airlie uint32_t crtc_id; 35785b93efSDave Airlie struct drm_mode_set mode_set; 368be48d92SDave Airlie struct drm_display_mode *desired_mode; 37785b93efSDave Airlie }; 38785b93efSDave Airlie 39d50ba256SDave Airlie 40785b93efSDave Airlie struct drm_fb_helper_funcs { 41785b93efSDave Airlie void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green, 42785b93efSDave Airlie u16 blue, int regno); 43b8c00ac5SDave Airlie void (*gamma_get)(struct drm_crtc *crtc, u16 *red, u16 *green, 44b8c00ac5SDave Airlie u16 *blue, int regno); 45785b93efSDave Airlie }; 46785b93efSDave Airlie 47d50ba256SDave Airlie /* mode specified on the command line */ 48d50ba256SDave Airlie struct drm_fb_helper_cmdline_mode { 49d50ba256SDave Airlie bool specified; 50d50ba256SDave Airlie bool refresh_specified; 51d50ba256SDave Airlie bool bpp_specified; 52d50ba256SDave Airlie int xres, yres; 53d50ba256SDave Airlie int bpp; 54d50ba256SDave Airlie int refresh; 55d50ba256SDave Airlie bool rb; 56d50ba256SDave Airlie bool interlace; 57d50ba256SDave Airlie bool cvt; 58d50ba256SDave Airlie bool margins; 59d50ba256SDave Airlie }; 60d50ba256SDave Airlie 6138651674SDave Airlie struct drm_fb_helper_surface_size { 6238651674SDave Airlie u32 fb_width; 6338651674SDave Airlie u32 fb_height; 6438651674SDave Airlie u32 surface_width; 6538651674SDave Airlie u32 surface_height; 6638651674SDave Airlie u32 surface_bpp; 6738651674SDave Airlie u32 surface_depth; 6838651674SDave Airlie }; 6938651674SDave Airlie 70d50ba256SDave Airlie struct drm_fb_helper_connector { 71d50ba256SDave Airlie struct drm_fb_helper_cmdline_mode cmdline_mode; 72d50ba256SDave Airlie }; 73d50ba256SDave Airlie 74785b93efSDave Airlie struct drm_fb_helper { 75785b93efSDave Airlie struct drm_framebuffer *fb; 76785b93efSDave Airlie struct drm_device *dev; 77785b93efSDave Airlie struct drm_display_mode *mode; 78785b93efSDave Airlie int crtc_count; 79785b93efSDave Airlie struct drm_fb_helper_crtc *crtc_info; 80785b93efSDave Airlie struct drm_fb_helper_funcs *funcs; 81785b93efSDave Airlie int conn_limit; 8238651674SDave Airlie struct fb_info *fbdev; 8338651674SDave Airlie u32 pseudo_palette[17]; 84785b93efSDave Airlie struct list_head kernel_fb_list; 858be48d92SDave Airlie 868be48d92SDave Airlie int (*fb_probe)(struct drm_fb_helper *helper, 878be48d92SDave Airlie struct drm_fb_helper_surface_size *sizes); 88785b93efSDave Airlie }; 89785b93efSDave Airlie 908be48d92SDave Airlie int drm_fb_helper_single_fb_probe(struct drm_fb_helper *helper, 918be48d92SDave Airlie int preferred_bpp); 928be48d92SDave Airlie 938be48d92SDave Airlie int drm_fb_helper_init_crtc_count(struct drm_device *dev, 948be48d92SDave Airlie struct drm_fb_helper *helper, int crtc_count, 95785b93efSDave Airlie int max_conn); 96785b93efSDave Airlie void drm_fb_helper_free(struct drm_fb_helper *helper); 97785b93efSDave Airlie int drm_fb_helper_blank(int blank, struct fb_info *info); 98785b93efSDave Airlie int drm_fb_helper_pan_display(struct fb_var_screeninfo *var, 99785b93efSDave Airlie struct fb_info *info); 100785b93efSDave Airlie int drm_fb_helper_set_par(struct fb_info *info); 101785b93efSDave Airlie int drm_fb_helper_check_var(struct fb_var_screeninfo *var, 102785b93efSDave Airlie struct fb_info *info); 103785b93efSDave Airlie int drm_fb_helper_setcolreg(unsigned regno, 104785b93efSDave Airlie unsigned red, 105785b93efSDave Airlie unsigned green, 106785b93efSDave Airlie unsigned blue, 107785b93efSDave Airlie unsigned transp, 108785b93efSDave Airlie struct fb_info *info); 109785b93efSDave Airlie 110785b93efSDave Airlie void drm_fb_helper_restore(void); 11138651674SDave Airlie void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper, 112785b93efSDave Airlie uint32_t fb_width, uint32_t fb_height); 113068143d3SDave Airlie void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, 114068143d3SDave Airlie uint32_t depth); 115785b93efSDave Airlie 116d50ba256SDave Airlie int drm_fb_helper_add_connector(struct drm_connector *connector); 117d50ba256SDave Airlie int drm_fb_helper_parse_command_line(struct drm_device *dev); 118068143d3SDave Airlie int drm_fb_helper_setcmap(struct fb_cmap *cmap, struct fb_info *info); 119d50ba256SDave Airlie 1208be48d92SDave Airlie bool drm_helper_fb_hotplug_event(struct drm_fb_helper *fb_helper, u32 max_width, 1218be48d92SDave Airlie u32 max_height); 1228be48d92SDave Airlie bool drm_fb_helper_initial_config(struct drm_fb_helper *fb_helper); 1238be48d92SDave Airlie 124785b93efSDave Airlie #endif 125