summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTerence Hampson <thampson@codeaurora.org>2015-08-25 10:54:24 -0400
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 20:45:58 -0700
commit26ef4431587d8a16a7e416b0816f8e93cacc09a3 (patch)
tree86de5528be6cb1354ec481f94bdf4bc2f4e00685
parentcc7c1fe8ecec23ebdcd3f4dae92ac9dd1e41f296 (diff)
msm: mdss: rotator: deinterlace layer prior to rotation
Make use of the MDP_ROTATION_DEINTERLACE flag. By using the deinterlaced flag we are able to properly read in the source layer for rotation. Change-Id: Ia4198f228188975cfc6b57acecedb153c7234aa4 Signed-off-by: Terence Hampson <thampson@codeaurora.org>
-rw-r--r--drivers/video/fbdev/msm/mdss_rotator.c22
1 files changed, 21 insertions, 1 deletions
diff --git a/drivers/video/fbdev/msm/mdss_rotator.c b/drivers/video/fbdev/msm/mdss_rotator.c
index da8320333efb..a8bd7d93f258 100644
--- a/drivers/video/fbdev/msm/mdss_rotator.c
+++ b/drivers/video/fbdev/msm/mdss_rotator.c
@@ -1360,6 +1360,20 @@ static int mdss_rotator_validate_img_roi(struct mdp_rotation_item *item)
return ret;
}
+static int mdss_rotator_validate_fmt_and_item_flags(
+ struct mdp_rotation_config *config, struct mdp_rotation_item *item)
+{
+ struct mdss_mdp_format_params *fmt;
+
+ fmt = mdss_mdp_get_format_params(item->input.format);
+ if ((item->flags & MDP_ROTATION_DEINTERLACE) &&
+ mdss_mdp_is_ubwc_format(fmt)) {
+ pr_err("cannot perform mdp deinterlace on tiled formats\n");
+ return -EINVAL;
+ }
+ return 0;
+}
+
static int mdss_rotator_validate_entry(struct mdss_rot_mgr *mgr,
struct mdss_rot_file_private *private,
struct mdss_rot_entry *entry)
@@ -1400,6 +1414,10 @@ static int mdss_rotator_validate_entry(struct mdss_rot_mgr *mgr,
return ret;
}
+ ret = mdss_rotator_validate_fmt_and_item_flags(&perf->config, item);
+ if (ret)
+ return ret;
+
ret = mdss_rotator_config_dnsc_factor(mgr, entry);
if (ret) {
pr_err("fail to configure downscale factor\n");
@@ -1625,7 +1643,7 @@ static void mdss_rotator_translate_rect(struct mdss_rect *dst,
static u32 mdss_rotator_translate_flags(u32 input)
{
- u32 output;
+ u32 output = 0;
if (input & MDP_ROTATION_NOP)
output |= MDP_ROT_NOP;
@@ -1635,6 +1653,8 @@ static u32 mdss_rotator_translate_flags(u32 input)
output |= MDP_FLIP_UD;
if (input & MDP_ROTATION_90)
output |= MDP_ROT_90;
+ if (input & MDP_ROTATION_DEINTERLACE)
+ output |= MDP_DEINTERLACE;
if (input & MDP_ROTATION_SECURE)
output |= MDP_SECURE_OVERLAY_SESSION;
if (input & MDP_ROTATION_BWC_EN)