diff options
| author | James Simmons <jsimmons@infradead.org> | 2010-12-23 16:40:37 +0000 | 
|---|---|---|
| committer | Dave Airlie <airlied@redhat.com> | 2011-01-07 13:44:40 +1000 | 
| commit | dfe63bb0ad9810db13aab0058caba97866e0a681 (patch) | |
| tree | ffc5e9335283001c072aa0377ba9fd92ac3b1919 /drivers/gpu/drm/drm_fb_helper.c | |
| parent | f598aa7593427ffe3a61e7767c34bd695a5e7ed0 (diff) | |
| download | olio-linux-3.10-dfe63bb0ad9810db13aab0058caba97866e0a681.tar.xz olio-linux-3.10-dfe63bb0ad9810db13aab0058caba97866e0a681.zip  | |
drm: Update fbdev fb_fix_screeninfo
If you change the color depth via fbset or some other framebuffer aware
userland application struct fb_fix_screeninfo is not updated to this new
information. This patch fixes this issue. Also the function is changed to
just pass in struct drm_framebuffer so in the future we could use more
fields. I'm hoping some day fix->smem* could be set here :-)
Signed-off-by: James Simmons <jsimmons@infradead.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu/drm/drm_fb_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_fb_helper.c | 41 | 
1 files changed, 21 insertions, 20 deletions
diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c index 5c4f9b9ecdc..0307d601f5e 100644 --- a/drivers/gpu/drm/drm_fb_helper.c +++ b/drivers/gpu/drm/drm_fb_helper.c @@ -607,6 +607,25 @@ void drm_fb_helper_fini(struct drm_fb_helper *fb_helper)  }  EXPORT_SYMBOL(drm_fb_helper_fini); +void drm_fb_helper_fill_fix(struct fb_info *info, struct drm_framebuffer *fb) +{ +	info->fix.type = FB_TYPE_PACKED_PIXELS; +	info->fix.visual = fb->depth == 8 ? FB_VISUAL_PSEUDOCOLOR : +		FB_VISUAL_TRUECOLOR; +	info->fix.mmio_start = 0; +	info->fix.mmio_len = 0; +	info->fix.type_aux = 0; +	info->fix.xpanstep = 1; /* doing it in hw */ +	info->fix.ypanstep = 1; /* doing it in hw */ +	info->fix.ywrapstep = 0; +	info->fix.accel = FB_ACCEL_NONE; +	info->fix.type_aux = 0; + +	info->fix.line_length = fb->pitch; +	return; +} +EXPORT_SYMBOL(drm_fb_helper_fill_fix); +  static int setcolreg(struct drm_crtc *crtc, u16 red, u16 green,  		     u16 blue, u16 regno, struct fb_info *info)  { @@ -816,6 +835,7 @@ int drm_fb_helper_set_par(struct fb_info *info)  			mutex_unlock(&dev->mode_config.mutex);  			return ret;  		} +		drm_fb_helper_fill_fix(info, fb_helper->fb);  	}  	mutex_unlock(&dev->mode_config.mutex); @@ -953,6 +973,7 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,  	if (new_fb) {  		info->var.pixclock = 0; +		drm_fb_helper_fill_fix(info, fb_helper->fb);  		if (register_framebuffer(info) < 0) {  			return -EINVAL;  		} @@ -979,26 +1000,6 @@ int drm_fb_helper_single_fb_probe(struct drm_fb_helper *fb_helper,  }  EXPORT_SYMBOL(drm_fb_helper_single_fb_probe); -void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch, -			    uint32_t depth) -{ -	info->fix.type = FB_TYPE_PACKED_PIXELS; -	info->fix.visual = depth == 8 ? FB_VISUAL_PSEUDOCOLOR : -		FB_VISUAL_TRUECOLOR; -	info->fix.mmio_start = 0; -	info->fix.mmio_len = 0; -	info->fix.type_aux = 0; -	info->fix.xpanstep = 1; /* doing it in hw */ -	info->fix.ypanstep = 1; /* doing it in hw */ -	info->fix.ywrapstep = 0; -	info->fix.accel = FB_ACCEL_NONE; -	info->fix.type_aux = 0; - -	info->fix.line_length = pitch; -	return; -} -EXPORT_SYMBOL(drm_fb_helper_fill_fix); -  void drm_fb_helper_fill_var(struct fb_info *info, struct drm_fb_helper *fb_helper,  			    uint32_t fb_width, uint32_t fb_height)  {  |