summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorEugene Yasman <eyasman@codeaurora.org>2013-10-21 13:44:10 +0300
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:22:23 -0700
commiteaf8d189c191692d84a710554079cf38dfc6088d (patch)
treeed550f53f6515a0c65662941e9efce6652d9df2a /drivers/video/fbdev
parent591619fc4e63ee075ce83b62ab732c5b541c6bfc (diff)
msm: mdss: fix MDP color format offsets
Color offsets are used by some X11 environments to properly set/get the color format. This change fixes the offsets to represent the color formats correctly. Change-Id: I5068897f18e1d119a9bb7f1fe59f9b662153e1b0 Signed-off-by: Eugene Yasman <eyasman@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_fb.c58
1 files changed, 36 insertions, 22 deletions
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
index 073cdf9a9b69..79291062bccc 100644
--- a/drivers/video/fbdev/msm/mdss_fb.c
+++ b/drivers/video/fbdev/msm/mdss_fb.c
@@ -995,16 +995,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;
@@ -1014,16 +1014,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;
@@ -1530,21 +1530,22 @@ static int mdss_fb_check_var(struct fb_var_screeninfo *var,
break;
case 32:
- /* Figure out if the user meant RGBA or ARGB
+ /* Check user specified color format BGRA/ARGB/RGBA
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) ||
- (var->green.offset != 16) ||
- (var->red.offset != 24))
+ if (!((var->transp.offset == 24) &&
+ (var->blue.offset == 0) &&
+ (var->green.offset == 8) &&
+ (var->red.offset == 16)) &&
+ !((var->transp.offset == 0) &&
+ (var->blue.offset == 24) &&
+ (var->green.offset == 16) &&
+ (var->red.offset == 8)) &&
+ !((var->transp.offset == 24) &&
+ (var->blue.offset == 16) &&
+ (var->green.offset == 8) &&
+ (var->red.offset == 0)))
return -EINVAL;
- } else
- return -EINVAL;
/* Check the common values for both RGBA and ARGB */
@@ -1625,10 +1626,23 @@ static int mdss_fb_set_par(struct fb_info *info)
break;
case 32:
- if (var->transp.offset == 24)
+ if ((var->red.offset == 0) &&
+ (var->green.offset == 8) &&
+ (var->blue.offset == 16) &&
+ (var->transp.offset == 24))
+ mfd->fb_imgType = MDP_RGBA_8888;
+ else if ((var->red.offset == 16) &&
+ (var->green.offset == 8) &&
+ (var->blue.offset == 0) &&
+ (var->transp.offset == 24))
+ mfd->fb_imgType = MDP_BGRA_8888;
+ else if ((var->red.offset == 8) &&
+ (var->green.offset == 16) &&
+ (var->blue.offset == 24) &&
+ (var->transp.offset == 0))
mfd->fb_imgType = MDP_ARGB_8888;
else
- mfd->fb_imgType = MDP_RGBA_8888;
+ mfd->fb_imgType = MDP_RGBA_8888;
break;
default: