diff options
| author | Eugene Yasman <eyasman@codeaurora.org> | 2013-10-21 13:44:10 +0300 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:22:23 -0700 |
| commit | eaf8d189c191692d84a710554079cf38dfc6088d (patch) | |
| tree | ed550f53f6515a0c65662941e9efce6652d9df2a /drivers | |
| parent | 591619fc4e63ee075ce83b62ab732c5b541c6bfc (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')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_fb.c | 58 |
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: |
