38dbafb98e
The problem behind swapped red and blue is inverted byte order in framebuffer driver pixel format. This patch sets the correct byte order in the framebuffer driver. The previous workaround patch is removed because it fixes improperly the red-screen issue, causing the swapped red and blue problem that this commit solves [ci:skip-build]: already built successfully in CI
91 lines
2.7 KiB
Diff
91 lines
2.7 KiB
Diff
From a23d549c51e38ad9fc481859326a786bc00baad8 Mon Sep 17 00:00:00 2001
|
|
From: Federico Amedeo Izzo <federico.izzo42@gmail.com>
|
|
Date: Fri, 22 Mar 2019 19:37:07 +0100
|
|
Subject: [PATCH] fix video argb setting
|
|
|
|
---
|
|
drivers/video/msm/mdss/mdss_fb.c | 34 ++++++++++++++++----------------
|
|
1 file changed, 17 insertions(+), 17 deletions(-)
|
|
|
|
diff --git a/drivers/video/msm/mdss/mdss_fb.c b/drivers/video/msm/mdss/mdss_fb.c
|
|
index 835f6fc9687..a598cbd72dc 100644
|
|
--- a/drivers/video/msm/mdss/mdss_fb.c
|
|
+++ b/drivers/video/msm/mdss/mdss_fb.c
|
|
@@ -1767,16 +1767,16 @@ static int mdss_fb_register(struct msm_fb_data_type *mfd)
|
|
fix->xpanstep = 1;
|
|
fix->ypanstep = 1;
|
|
var->vmode = FB_VMODE_NONINTERLACED;
|
|
- var->blue.offset = 0;
|
|
- var->green.offset = 8;
|
|
- var->red.offset = 16;
|
|
+ var->blue.offset = 24;
|
|
+ var->green.offset = 16;
|
|
+ var->red.offset = 8;
|
|
var->blue.length = 8;
|
|
var->green.length = 8;
|
|
var->red.length = 8;
|
|
var->blue.msb_right = 0;
|
|
var->green.msb_right = 0;
|
|
var->red.msb_right = 0;
|
|
- var->transp.offset = 24;
|
|
+ var->transp.offset = 0;
|
|
var->transp.length = 8;
|
|
bpp = 4;
|
|
break;
|
|
@@ -1786,16 +1786,16 @@ static int mdss_fb_register(struct msm_fb_data_type *mfd)
|
|
fix->xpanstep = 1;
|
|
fix->ypanstep = 1;
|
|
var->vmode = FB_VMODE_NONINTERLACED;
|
|
- var->blue.offset = 8;
|
|
- var->green.offset = 16;
|
|
- var->red.offset = 24;
|
|
+ var->blue.offset = 16;
|
|
+ var->green.offset = 8;
|
|
+ var->red.offset = 0;
|
|
var->blue.length = 8;
|
|
var->green.length = 8;
|
|
var->red.length = 8;
|
|
var->blue.msb_right = 0;
|
|
var->green.msb_right = 0;
|
|
var->red.msb_right = 0;
|
|
- var->transp.offset = 0;
|
|
+ var->transp.offset = 24;
|
|
var->transp.length = 8;
|
|
bpp = 4;
|
|
break;
|
|
@@ -2723,15 +2723,15 @@ static int mdss_fb_check_var(struct fb_var_screeninfo *var,
|
|
/* Figure out if the user meant RGBA or ARGB
|
|
and verify the position of the RGB components */
|
|
|
|
- if (var->transp.offset == 24) {
|
|
- if ((var->blue.offset != 0) ||
|
|
- (var->green.offset != 8) ||
|
|
- (var->red.offset != 16))
|
|
- return -EINVAL;
|
|
- } else if (var->transp.offset == 0) {
|
|
- if ((var->blue.offset != 8) ||
|
|
+ if (var->transp.offset == 0) {
|
|
+ if ((var->blue.offset != 24) ||
|
|
(var->green.offset != 16) ||
|
|
- (var->red.offset != 24))
|
|
+ (var->red.offset != 8))
|
|
+ return -EINVAL;
|
|
+ } else if (var->transp.offset == 24) {
|
|
+ if ((var->blue.offset != 16) ||
|
|
+ (var->green.offset != 8) ||
|
|
+ (var->red.offset != 0))
|
|
return -EINVAL;
|
|
} else
|
|
return -EINVAL;
|
|
@@ -2821,7 +2821,7 @@ static int mdss_fb_set_par(struct fb_info *info)
|
|
break;
|
|
|
|
case 32:
|
|
- if (var->transp.offset == 24)
|
|
+ if (var->transp.offset == 0)
|
|
mfd->fb_imgType = MDP_ARGB_8888;
|
|
else
|
|
mfd->fb_imgType = MDP_RGBA_8888;
|
|
--
|
|
2.21.0
|
|
|