summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorVinu Deokaran <vinud@codeaurora.org>2014-05-14 15:17:39 -0400
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:30:11 -0700
commitc7dfe421a1e5bb70657f052bd561784d8a4ef5e6 (patch)
tree0f58b013ccd653370296fa44ddb60d74e3de5fc5 /drivers
parentf0e6a39c273c61707459251248ecf3e3b07d0b55 (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.c2
-rw-r--r--drivers/video/fbdev/msm/mdss_compat_utils.h1
-rw-r--r--drivers/video/fbdev/msm/mdss_mdp_overlay.c31
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;