diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index e6b9878592fd..9f91ea939437 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -567,6 +567,20 @@ static u32 apply_overhead_factors(u32 quota, } return overhead_quota; +}; + +static u32 mdss_mdp_get_rotator_fps(struct mdss_mdp_pipe *pipe) +{ + struct mdss_data_type *mdata = mdss_mdp_get_mdata(); + u32 fps = DEFAULT_FRAME_RATE; + + if (mdata->traffic_shaper_en) + fps = DEFAULT_ROTATOR_FRAME_RATE; + + if (pipe->src.w >= 3840 || pipe->src.h >= 3840) + fps = ROTATOR_LOW_FRAME_RATE; + + return fps; } /** @@ -614,8 +628,7 @@ int mdss_mdp_perf_calc_pipe(struct mdss_mdp_pipe *pipe, src = pipe->src; if (mixer->rotator_mode) { - if (mdata->traffic_shaper_en) - fps = DEFAULT_ROTATOR_FRAME_RATE; + fps = mdss_mdp_get_rotator_fps(pipe); } else if (mixer->type == MDSS_MDP_MIXER_TYPE_INTF) { struct mdss_panel_info *pinfo; diff --git a/drivers/video/fbdev/msm/mdss_panel.h b/drivers/video/fbdev/msm/mdss_panel.h index 83fd7c3dc69a..c0f36351576f 100644 --- a/drivers/video/fbdev/msm/mdss_panel.h +++ b/drivers/video/fbdev/msm/mdss_panel.h @@ -27,6 +27,7 @@ struct panel_id { #define DEFAULT_FRAME_RATE 60 #define DEFAULT_ROTATOR_FRAME_RATE 120 +#define ROTATOR_LOW_FRAME_RATE 30 #define MDSS_DSI_RST_SEQ_LEN 10 #define MDSS_MDP_MAX_FETCH 12