diff options
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 14 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pipe.c | 18 |
2 files changed, 29 insertions, 3 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 44793c843c82..5ede39eeecc6 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -206,6 +206,11 @@ static int mdss_mdp_overlay_rotator_setup(struct msm_fb_data_type *mfd, rot->src_rect.w = req->src_rect.w; rot->src_rect.h = req->src_rect.h; + if (req->flags & MDP_DEINTERLACE) { + rot->rotations |= MDP_DEINTERLACE; + rot->src_rect.h /= 2; + } + rot->params_changed++; req->id = rot->session_id; @@ -325,6 +330,15 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd, __func__); } + if (pipe->flags & MDP_DEINTERLACE) { + if (pipe->flags & MDP_SOURCE_ROTATED_90) { + pipe->src.w /= 2; + pipe->img_width /= 2; + } else { + pipe->src.h /= 2; + } + } + pipe->params_changed++; req->id = pipe->ndx; diff --git a/drivers/video/fbdev/msm/mdss_mdp_pipe.c b/drivers/video/fbdev/msm/mdss_mdp_pipe.c index 005f0e44861b..49984b5224a7 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pipe.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pipe.c @@ -468,6 +468,7 @@ static int mdss_mdp_scale_setup(struct mdss_mdp_pipe *pipe) static int mdss_mdp_image_setup(struct mdss_mdp_pipe *pipe) { u32 img_size, src_size, src_xy, dst_size, dst_xy, ystride0, ystride1; + u32 width, height; pr_debug("pnum=%d wh=%dx%d src={%d,%d,%d,%d} dst={%d,%d,%d,%d}\n", pipe->num, pipe->img_width, pipe->img_height, @@ -477,10 +478,21 @@ static int mdss_mdp_image_setup(struct mdss_mdp_pipe *pipe) if (mdss_mdp_scale_setup(pipe)) return -EINVAL; - mdss_mdp_get_plane_sizes(pipe->src_fmt->format, pipe->img_width, - pipe->img_height, &pipe->src_planes); + width = pipe->img_width; + height = pipe->img_height; + mdss_mdp_get_plane_sizes(pipe->src_fmt->format, width, height, + &pipe->src_planes); + + if ((pipe->flags & MDP_DEINTERLACE) && + !(pipe->flags & MDP_SOURCE_ROTATED_90)) { + int i; + for (i = 0; i < pipe->src_planes.num_planes; i++) + pipe->src_planes.ystride[i] *= 2; + width *= 2; + height /= 2; + } - img_size = (pipe->img_height << 16) | pipe->img_width; + img_size = (height << 16) | width; src_size = (pipe->src.h << 16) | pipe->src.w; src_xy = (pipe->src.y << 16) | pipe->src.x; dst_size = (pipe->dst.h << 16) | pipe->dst.w; |
