| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: "Pieter \\\"PoroCYon\\\" Sluys" <pcy@national.shitposting.agency> |
| Date: Thu, 4 Jan 2018 16:53:50 +0100 |
| Subject: vfb: fix video mode and line_length being set when loaded |
| |
| From: "Pieter \\\"PoroCYon\\\" Sluys" <pcy@national.shitposting.agency> |
| |
| |
| [ Upstream commit 7b9faf5df0ac495a1a3d7cdb64921c179f9008ac ] |
| |
| Currently, when loading the vfb module, the newly created fbdev |
| has a line_length of 0, and its video mode would be PSEUDOCOLOR |
| regardless of color depth. (The former could be worked around by |
| calling the FBIOPUT_VSCREENINFO ioctl with having the FBACTIVIATE_FORCE |
| flag set.) This patch automatically sets the line_length correctly, |
| and the video mode is derived from the bit depth now as well. |
| |
| Thanks to Geert Uytterhoeven for confirming the bug and helping me with |
| the patch. |
| |
| Output of `fbset -i' before the patch: |
| mode "1366x768-60" |
| # D: 72.432 MHz, H: 47.403 kHz, V: 60.004 Hz |
| geometry 1366 768 1366 768 32 |
| timings 13806 120 10 14 3 32 5 |
| rgba 8/0,8/8,8/16,8/24 |
| endmode |
| |
| Frame buffer device information: |
| Name : Virtual FB |
| Address : 0xffffaa1405d85000 |
| Size : 4196352 |
| Type : PACKED PIXELS |
| Visual : PSEUDOCOLOR |
| XPanStep : 1 |
| YPanStep : 1 |
| YWrapStep : 1 |
| LineLength : 0 <-- note this |
| Accelerator : No |
| |
| After: |
| mode "1366x768-60" |
| # D: 72.432 MHz, H: 47.403 kHz, V: 60.004 Hz |
| geometry 1366 768 1366 768 32 |
| timings 13806 120 10 14 3 32 5 |
| rgba 8/0,8/8,8/16,8/24 |
| endmode |
| |
| Frame buffer device information: |
| Name : Virtual FB |
| Address : 0xffffaa1405d85000 |
| Size : 4196352 |
| Type : PACKED PIXELS |
| Visual : TRUECOLOR |
| XPanStep : 1 |
| YPanStep : 1 |
| YWrapStep : 1 |
| LineLength : 5464 |
| Accelerator : No |
| |
| Signed-off-by: "Pieter \"PoroCYon\" Sluys" <pcy@national.shitposting.agency> |
| Reviewed-by: Geert Uytterhoeven <geert@linux-m68k.org> |
| [b.zolnierkie: minor fixups] |
| Signed-off-by: Bartlomiej Zolnierkiewicz <b.zolnierkie@samsung.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/video/fbdev/vfb.c | 17 +++++++++++++++++ |
| 1 file changed, 17 insertions(+) |
| |
| --- a/drivers/video/fbdev/vfb.c |
| +++ b/drivers/video/fbdev/vfb.c |
| @@ -239,8 +239,23 @@ static int vfb_check_var(struct fb_var_s |
| */ |
| static int vfb_set_par(struct fb_info *info) |
| { |
| + switch (info->var.bits_per_pixel) { |
| + case 1: |
| + info->fix.visual = FB_VISUAL_MONO01; |
| + break; |
| + case 8: |
| + info->fix.visual = FB_VISUAL_PSEUDOCOLOR; |
| + break; |
| + case 16: |
| + case 24: |
| + case 32: |
| + info->fix.visual = FB_VISUAL_TRUECOLOR; |
| + break; |
| + } |
| + |
| info->fix.line_length = get_line_length(info->var.xres_virtual, |
| info->var.bits_per_pixel); |
| + |
| return 0; |
| } |
| |
| @@ -450,6 +465,8 @@ static int vfb_probe(struct platform_dev |
| goto err2; |
| platform_set_drvdata(dev, info); |
| |
| + vfb_set_par(info); |
| + |
| fb_info(info, "Virtual frame buffer device, using %ldK of video memory\n", |
| videomemorysize >> 10); |
| return 0; |