summaryrefslogtreecommitdiff
path: root/drivers/video/fbdev
diff options
context:
space:
mode:
authorSree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>2013-11-19 12:22:08 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:23:34 -0700
commit875c917e7aff1f046d35c2e18bad7ade5aed150f (patch)
tree6540b6614eeffa238eca38452a3f1abc43affbe6 /drivers/video/fbdev
parentf900819c1bc59b298bf935318f03c372ca74b24a (diff)
msm: mdss: Swap RGBA format to BGRA with bwc rotation
When BWC is enabled, rotator format needs to be swapped from RGBA to BGRA to avoid color mismatch on the ouput image. This is specially needed with a GPU composed FB. Change-Id: I956a354f3fe605e2c7bda4c4331cfe5bcd6417c7 Signed-off-by: Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>
Diffstat (limited to 'drivers/video/fbdev')
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c6
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c7
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_rotator.h8
3 files changed, 15 insertions, 6 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c b/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c
index f1d46214e832..8b6ed00385ba 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c
@@ -296,9 +296,11 @@ static int mdss_mdp_writeback_prepare_rot(struct mdss_mdp_ctl *ctl, void *arg)
if (ctx->bwc_mode || (ctx->rot90 &&
((mdata->mdp_rev < MDSS_MDP_HW_REV_102)
|| !fmt->is_yuv)))
- format = mdss_mdp_get_rotator_dst_format(rot->format, 1);
+ format = mdss_mdp_get_rotator_dst_format(rot->format, 1,
+ ctx->bwc_mode);
else
- format = mdss_mdp_get_rotator_dst_format(rot->format, 0);
+ format = mdss_mdp_get_rotator_dst_format(rot->format, 0,
+ ctx->bwc_mode);
if (ctx->rot90) {
ctx->opmode |= BIT(5); /* ROT 90 */
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
index 43a0be5ad662..6618875e2851 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
@@ -373,10 +373,12 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
return -EINVAL;
}
- if ((req->flags & MDP_BWC_EN) || ((req->flags & MDP_SOURCE_ROTATED_90)
+ bwc_enabled = req->flags & MDP_BWC_EN;
+ if (bwc_enabled || ((req->flags & MDP_SOURCE_ROTATED_90)
&& ((mdata->mdp_rev < MDSS_MDP_HW_REV_102) || !fmt->is_yuv))) {
req->src.format =
- mdss_mdp_get_rotator_dst_format(req->src.format, 1);
+ mdss_mdp_get_rotator_dst_format(req->src.format, 1,
+ bwc_enabled);
fmt = mdss_mdp_get_format_params(req->src.format);
if (!fmt) {
pr_err("invalid pipe format %d\n", req->src.format);
@@ -460,7 +462,6 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
}
pipe->flags = req->flags;
- bwc_enabled = req->flags & MDP_BWC_EN;
if (bwc_enabled && !mdp5_data->mdata->has_bwc) {
pr_err("BWC is not supported in MDP version %x\n",
mdp5_data->mdata->mdp_rev);
diff --git a/drivers/video/fbdev/msm/mdss_mdp_rotator.h b/drivers/video/fbdev/msm/mdss_mdp_rotator.h
index 7229995f80a0..fbe6f0abf180 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_rotator.h
+++ b/drivers/video/fbdev/msm/mdss_mdp_rotator.h
@@ -51,7 +51,8 @@ struct mdss_mdp_rotator_session {
struct work_struct commit_work;
};
-static inline u32 mdss_mdp_get_rotator_dst_format(u32 in_format, u8 in_rot90)
+static inline u32 mdss_mdp_get_rotator_dst_format(u32 in_format, u8 in_rot90,
+ u8 bwc)
{
switch (in_format) {
case MDP_RGB_565:
@@ -60,6 +61,11 @@ static inline u32 mdss_mdp_get_rotator_dst_format(u32 in_format, u8 in_rot90)
return MDP_RGB_888;
else
return in_format;
+ case MDP_RGBA_8888:
+ if (bwc)
+ return MDP_BGRA_8888;
+ else
+ return in_format;
case MDP_Y_CBCR_H2V2_VENUS:
case MDP_Y_CBCR_H2V2:
if (in_rot90)