summaryrefslogtreecommitdiffstats
path: root/drivers/video
diff options
context:
space:
mode:
authorAndre Heider <a.heider@gmail.com>2013-11-05 00:00:59 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2013-11-06 09:59:04 +0100
commit485544f0fb173e1fe59b70bca0894898a37e9fb0 (patch)
tree1c7511333c44c654a81c3222d401d7df6e27fb56 /drivers/video
parent7a305b2d8a92cdf42925c7983b61d4a06fe6a789 (diff)
downloadbarebox-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.c11
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));