diff options
| author | Vinu Deokaran <vinud@codeaurora.org> | 2014-05-14 15:17:39 -0400 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:30:11 -0700 |
| commit | c7dfe421a1e5bb70657f052bd561784d8a4ef5e6 (patch) | |
| tree | 0f58b013ccd653370296fa44ddb60d74e3de5fc5 /drivers | |
| parent | f0e6a39c273c61707459251248ecf3e3b07d0b55 (diff) | |
msm: display: Add pipe type selection in overlay request
Allow user to specify the type when requesting an overlay pipe.
If field is set the pipe type indication in the flags will be
ignored.
Change-Id: Iee51d24b96c7a2a987dc70a439342e6548dfc8fa
Signed-off-by: Vinu Deokaran <vinud@codeaurora.org>
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_compat_utils.c | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_compat_utils.h | 1 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 31 |
3 files changed, 27 insertions, 7 deletions
diff --git a/drivers/video/fbdev/msm/mdss_compat_utils.c b/drivers/video/fbdev/msm/mdss_compat_utils.c index ebb6e700e22e..9df9c97b5328 100644 --- a/drivers/video/fbdev/msm/mdss_compat_utils.c +++ b/drivers/video/fbdev/msm/mdss_compat_utils.c @@ -2295,6 +2295,8 @@ static int __from_user_mdp_overlay(struct mdp_overlay *ov, put_user(data, &ov->transp_mask) || get_user(data, &ov32->flags) || put_user(data, &ov->flags) || + get_user(data, &ov32->pipe_type) || + put_user(data, &ov->pipe_type) || get_user(data, &ov32->id) || put_user(data, &ov->id) || get_user(data, &ov32->priority) || diff --git a/drivers/video/fbdev/msm/mdss_compat_utils.h b/drivers/video/fbdev/msm/mdss_compat_utils.h index 740e952b53cc..cf4779aaad81 100644 --- a/drivers/video/fbdev/msm/mdss_compat_utils.h +++ b/drivers/video/fbdev/msm/mdss_compat_utils.h @@ -359,6 +359,7 @@ struct mdp_overlay32 { uint32_t blend_op; uint32_t transp_mask; uint32_t flags; + uint32_t pipe_type; uint32_t id; uint8_t priority; uint32_t user_data[6]; diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 1ba02b5a1fe9..ee2a2abf03ea 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -555,18 +555,34 @@ int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd, is_vig_needed = true; if (req->id == MSMFB_NEW_REQUEST) { - if (req->flags & MDP_OV_PIPE_FORCE_DMA) - pipe_type = MDSS_MDP_PIPE_TYPE_DMA; - else if (fmt->is_yuv || (req->flags & MDP_OV_PIPE_SHARE) || - is_vig_needed) + switch (req->pipe_type) { + case PIPE_TYPE_VIG: pipe_type = MDSS_MDP_PIPE_TYPE_VIG; - else + break; + case PIPE_TYPE_RGB: pipe_type = MDSS_MDP_PIPE_TYPE_RGB; + break; + case PIPE_TYPE_DMA: + pipe_type = MDSS_MDP_PIPE_TYPE_DMA; + break; + case PIPE_TYPE_AUTO: + default: + if (req->flags & MDP_OV_PIPE_FORCE_DMA) + pipe_type = MDSS_MDP_PIPE_TYPE_DMA; + else if (fmt->is_yuv || + (req->flags & MDP_OV_PIPE_SHARE) || + is_vig_needed) + pipe_type = MDSS_MDP_PIPE_TYPE_VIG; + else + pipe_type = MDSS_MDP_PIPE_TYPE_RGB; + break; + } pipe = mdss_mdp_pipe_alloc(mixer, pipe_type, left_blend_pipe); /* RGB pipes can be used instead of DMA */ - if (!pipe && (pipe_type == MDSS_MDP_PIPE_TYPE_DMA)) { + if ((req->pipe_type == PIPE_TYPE_AUTO) && !pipe && + (pipe_type == MDSS_MDP_PIPE_TYPE_DMA)) { pr_debug("giving RGB pipe for fb%d. flags:0x%x\n", mfd->index, req->flags); pipe_type = MDSS_MDP_PIPE_TYPE_RGB; @@ -575,7 +591,8 @@ int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd, } /* VIG pipes can also support RGB format */ - if (!pipe && pipe_type == MDSS_MDP_PIPE_TYPE_RGB) { + if ((req->pipe_type == PIPE_TYPE_AUTO) && !pipe && + (pipe_type == MDSS_MDP_PIPE_TYPE_RGB)) { pr_debug("giving ViG pipe for fb%d. flags:0x%x\n", mfd->index, req->flags); pipe_type = MDSS_MDP_PIPE_TYPE_VIG; |
