From 9bb028df1e82a3325b474dd81e46be5f38b56f3e Mon Sep 17 00:00:00 2001 From: Ujwal Patel Date: Tue, 3 Mar 2015 19:47:29 -0800 Subject: [PATCH] msm: mdss: rotator: return dst format for request match optimization As per current implementation, every successful OVERLAY_SET IOCTL should return destination format for that request. Now there is a driver based optimization where if back to back OVERLAY_SET IOCTLs request same configurations then driver avoids extra register writes. However this optimization doesn't return correct destination format which violates the IOCTL spec and may result in inefficiencies. Fix this by returning correct destination format for this optimization. Change-Id: I792e2f44f17bceb1efc7b1d389db84478581c474 Signed-off-by: Ujwal Patel --- drivers/video/fbdev/msm/mdss_mdp_rotator.c | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) 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);