summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>2013-08-07 18:20:47 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:20:01 -0700
commit2ec9d7e283fb0422219ea8234de92003e34aaea0 (patch)
tree75687db7f027e5430a22afb981f4f63b53c37706
parentbe5d954ad64fb531f677fc08fd101308d4bb15ea (diff)
msm: mdss: Support planar output format for rotator
For high end targets planar format as output from the rotator can be supported as there are more SMP blocks available relatively. Also, this gives HAL flexibility with the output buffer as currently its always defaulted to Psuedo Planar. Change-Id: I0428ea2a227bf73bc4eada0d2533520799321195 Signed-off-by: Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c9
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c4
2 files changed, 11 insertions, 2 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c b/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c
index ff977a9a5cd2..06f73b1889cc 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_intf_writeback.c
@@ -248,6 +248,7 @@ static int mdss_mdp_writeback_prepare_rot(struct mdss_mdp_ctl *ctl, void *arg)
struct mdss_mdp_writeback_ctx *ctx;
struct mdss_mdp_writeback_arg *wb_args;
struct mdss_mdp_rotator_session *rot;
+ struct mdss_data_type *mdata;
u32 format;
ctx = (struct mdss_mdp_writeback_ctx *) ctl->priv_data;
@@ -262,6 +263,11 @@ static int mdss_mdp_writeback_prepare_rot(struct mdss_mdp_ctl *ctl, void *arg)
pr_err("unable to retrieve rot session ctl=%d\n", ctl->num);
return -ENODEV;
}
+ mdata = ctl->mdata;
+ if (!mdata) {
+ pr_err("no mdata attached to ctl=%d", ctl->num);
+ return -ENODEV;
+ }
pr_debug("rot setup wb_num=%d\n", ctx->wb_num);
ctx->opmode = BIT(6); /* ROT EN */
@@ -280,7 +286,8 @@ static int mdss_mdp_writeback_prepare_rot(struct mdss_mdp_ctl *ctl, void *arg)
ctx->rot90 = !!(rot->flags & MDP_ROT_90);
- if (ctx->bwc_mode || ctx->rot90)
+ if (ctx->bwc_mode || (ctx->rot90 &&
+ (mdata->mdp_rev < MDSS_MDP_HW_REV_102)))
format = mdss_mdp_get_rotator_dst_format(rot->format);
else
format = rot->format;
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
index c5480364d9b7..801852c30dfa 100644
--- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c
+++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c
@@ -355,6 +355,7 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
struct mdss_mdp_mixer *mixer = NULL;
u32 pipe_type, mixer_mux, len;
struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd);
+ struct mdss_data_type *mdata = mfd_to_mdata(mfd);
struct mdp_histogram_start_req hist;
int ret;
u32 bwc_enabled;
@@ -381,7 +382,8 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd,
pr_debug("pipe ctl=%u req id=%x mux=%d\n", mdp5_data->ctl->num, req->id,
mixer_mux);
- if (req->flags & (MDP_SOURCE_ROTATED_90 | MDP_BWC_EN))
+ if ((req->flags & MDP_BWC_EN) || ((req->flags & MDP_SOURCE_ROTATED_90)
+ && (mdata->mdp_rev < MDSS_MDP_HW_REV_102)))
req->src.format =
mdss_mdp_get_rotator_dst_format(req->src.format);