diff options
| author | Terence Hampson <thampson@codeaurora.org> | 2015-08-25 10:54:24 -0400 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:45:58 -0700 |
| commit | 26ef4431587d8a16a7e416b0816f8e93cacc09a3 (patch) | |
| tree | 86de5528be6cb1354ec481f94bdf4bc2f4e00685 | |
| parent | cc7c1fe8ecec23ebdcd3f4dae92ac9dd1e41f296 (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.c | 22 |
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) |
