diff --git a/drivers/video/fbdev/msm/mdss_mdp_rotator.c b/drivers/video/fbdev/msm/mdss_mdp_rotator.c index 3af013a5d342..86c61703b6d1 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_rotator.c +++ b/drivers/video/fbdev/msm/mdss_mdp_rotator.c @@ -811,10 +811,11 @@ static int mdss_mdp_rotator_config(struct msm_fb_data_type *mfd, if (rot->flags & MDP_ROT_90) swap(rot->dst.w, rot->dst.h); + rot->req_data = *req; + req->src.format = mdss_mdp_get_rotator_dst_format(req->src.format, req->flags & MDP_ROT_90, req->flags & MDP_BWC_EN); - rot->req_data = *req; rot->params_changed++; return 0; @@ -896,8 +897,17 @@ static int mdss_mdp_rotator_config_ex(struct msm_fb_data_type *mfd, } /* if session hasn't changed, skip reconfiguration */ - if (!memcmp(req, &rot->req_data, sizeof(*req))) + if (!memcmp(req, &rot->req_data, sizeof(*req))) { + /* + * as per the IOCTL spec, every successful rotator setup + * needs to return corresponding destination format. + */ + req->src.format = mdss_mdp_get_rotator_dst_format( + req->src.format, req->flags & MDP_ROT_90, + req->flags & MDP_BWC_EN); + return 0; + } flush_work(&rot->commit_work);