diff options
| author | Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org> | 2013-08-07 18:20:47 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:20:01 -0700 |
| commit | 2ec9d7e283fb0422219ea8234de92003e34aaea0 (patch) | |
| tree | 75687db7f027e5430a22afb981f4f63b53c37706 | |
| parent | be5d954ad64fb531f677fc08fd101308d4bb15ea (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.c | 9 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 4 |
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); |
