diff options
author | Andre Heider <a.heider@gmail.com> | 2013-11-05 00:00:59 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2013-11-06 09:59:04 +0100 |
commit | 485544f0fb173e1fe59b70bca0894898a37e9fb0 (patch) | |
tree | 1c7511333c44c654a81c3222d401d7df6e27fb56 /drivers/video | |
parent | 7a305b2d8a92cdf42925c7983b61d4a06fe6a789 (diff) | |
download | barebox-485544f0fb173e1fe59b70bca0894898a37e9fb0.tar.gz barebox-485544f0fb173e1fe59b70bca0894898a37e9fb0.tar.xz |
fb: add a line_length value to struct fb_info
Add support for framebuffers with noncontiguous horizontal lines.
Video drivers can set this value if the hardware requires it.
In case a driver does not set it, the current value of
xres * (bpp / 8) is used instead.
Signed-off-by: Andre Heider <a.heider@gmail.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/fb.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/video/fb.c b/drivers/video/fb.c index 420e4e301c..0159994d13 100644 --- a/drivers/video/fb.c +++ b/drivers/video/fb.c @@ -72,12 +72,16 @@ static int fb_setup_mode(struct device_d *dev, struct param_d *param, info->xres = info->mode->xres; info->yres = info->mode->yres; + info->line_length = 0; ret = info->fbops->fb_activate_var(info); + if (!info->line_length) + info->line_length = info->xres * (info->bits_per_pixel >> 3); + if (!ret) { dev->resource[0].start = (resource_size_t)info->screen_base; - info->cdev.size = info->xres * info->yres * (info->bits_per_pixel >> 3); + info->cdev.size = info->line_length * info->yres; dev->resource[0].end = dev->resource[0].start + info->cdev.size - 1; dev_param_set_generic(dev, param, val); } else @@ -122,9 +126,12 @@ int register_framebuffer(struct fb_info *info) dev = &info->dev; + if (!info->line_length) + info->line_length = info->xres * (info->bits_per_pixel >> 3); + info->cdev.ops = &fb_ops; info->cdev.name = asprintf("fb%d", id); - info->cdev.size = info->xres * info->yres * (info->bits_per_pixel >> 3); + info->cdev.size = info->line_length * info->yres; info->cdev.dev = dev; info->cdev.priv = info; dev->resource = xzalloc(sizeof(struct resource)); |