Loading drivers/video/msm/mdss/mdss_mdp_ctl.c +6 −1 Original line number Diff line number Diff line Loading @@ -5218,7 +5218,12 @@ int mdss_mdp_ctl_update_fps(struct mdss_mdp_ctl *ctl) (pinfo->dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) || (pinfo->dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) || (pinfo->dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) || pinfo->dfps_update == DFPS_IMMEDIATE_CLK_UPDATE_MODE) { if (pinfo->type == DTV_PANEL) new_fps = pinfo->lcdc.frame_rate; else new_fps = mdss_panel_get_framerate(pinfo); } else { new_fps = pinfo->new_fps; Loading drivers/video/msm/mdss/mdss_mdp_intf_video.c +3 −1 Original line number Diff line number Diff line Loading @@ -1353,7 +1353,9 @@ static int mdss_mdp_video_config_fps(struct mdss_mdp_ctl *ctl, int new_fps) pdata->panel_info.dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) { == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { unsigned long flags; if (!ctx->timegen_en) { pr_err("TG is OFF. DFPS mode invalid\n"); Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +39 −8 Original line number Diff line number Diff line Loading @@ -2802,14 +2802,21 @@ static void cache_initial_timings(struct mdss_panel_data *pdata) * This value will change dynamically once the * actual dfps update happen in hw. */ if (pdata->panel_info.type == DTV_PANEL) pdata->panel_info.current_fps = pdata->panel_info.lcdc.frame_rate; else pdata->panel_info.current_fps = mdss_panel_get_framerate(&pdata->panel_info); /* * Keep the initial fps and porch values for this panel before * any dfps update happen, this is to prevent losing precision * in further calculations. */ if (pdata->panel_info.type == DTV_PANEL) pdata->panel_info.default_fps = pdata->panel_info.lcdc.frame_rate; else pdata->panel_info.default_fps = mdss_panel_get_framerate(&pdata->panel_info); Loading @@ -2823,7 +2830,9 @@ static void cache_initial_timings(struct mdss_panel_data *pdata) } else if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) { DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { pdata->panel_info.saved_total = mdss_panel_get_htotal(&pdata->panel_info, true); pdata->panel_info.saved_fporch = Loading Loading @@ -2891,9 +2900,26 @@ static void dfps_update_panel_params(struct mdss_panel_data *pdata, pdata->panel_info.lcdc.h_back_porch = data->hbp; pdata->panel_info.lcdc.h_pulse_width = data->hpw; pdata->panel_info.clk_rate = data->clk_rate; if (pdata->panel_info.type == DTV_PANEL) pdata->panel_info.clk_rate *= 1000; dfps_update_fps(&pdata->panel_info, new_fps); } else if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { pr_debug("hfp=%d, hbp=%d, hpw=%d, clk=%d, fps=%d\n", data->hfp, data->hbp, data->hpw, data->clk_rate, data->fps); pdata->panel_info.lcdc.h_front_porch = data->hfp; pdata->panel_info.lcdc.h_back_porch = data->hbp; pdata->panel_info.lcdc.h_pulse_width = data->hpw; pdata->panel_info.clk_rate = data->clk_rate; dfps_update_fps(&pdata->panel_info, new_fps); mdss_panel_update_clk_rate(&pdata->panel_info, new_fps); } else { dfps_update_fps(&pdata->panel_info, new_fps); mdss_panel_update_clk_rate(&pdata->panel_info, new_fps); Loading Loading @@ -2968,7 +2994,9 @@ static ssize_t dynamic_fps_sysfs_wta_dfps(struct device *dev, } if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) { DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { if (sscanf(buf, "%u %u %u %u %u", &data.hfp, &data.hbp, &data.hpw, &data.clk_rate, &data.fps) != 5) { Loading @@ -2983,6 +3011,9 @@ static ssize_t dynamic_fps_sysfs_wta_dfps(struct device *dev, } } if (pdata->panel_info.type == DTV_PANEL) panel_fps = pdata->panel_info.lcdc.frame_rate; else panel_fps = mdss_panel_get_framerate(&pdata->panel_info); if (data.fps == panel_fps) { Loading drivers/video/msm/mdss/mdss_panel.h +8 −2 Original line number Diff line number Diff line Loading @@ -439,6 +439,9 @@ struct dynamic_fps_data { * @DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP: update fps using horizontal timings * @DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP: update fps using both horizontal * timings and clock. * @DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK: update fps using both * horizontal timings, clock need to be caculate base on new clock and * porches. * @DFPS_MODE_MAX: defines maximum limit of supported modes. */ enum dynamic_fps_update { Loading @@ -447,6 +450,7 @@ enum dynamic_fps_update { DFPS_IMMEDIATE_PORCH_UPDATE_MODE_VFP, DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP, DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP, DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK, DFPS_MODE_MAX }; Loading Loading @@ -815,7 +819,9 @@ static inline u32 mdss_panel_get_framerate(struct mdss_panel_info *panel_info) break; case DTV_PANEL: if (panel_info->dynamic_fps) { frame_rate = panel_info->lcdc.frame_rate; frame_rate = panel_info->lcdc.frame_rate / 1000; if (panel_info->lcdc.frame_rate % 1000) frame_rate += 1; break; } default: Loading Loading
drivers/video/msm/mdss/mdss_mdp_ctl.c +6 −1 Original line number Diff line number Diff line Loading @@ -5218,7 +5218,12 @@ int mdss_mdp_ctl_update_fps(struct mdss_mdp_ctl *ctl) (pinfo->dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP) || (pinfo->dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) || (pinfo->dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) || pinfo->dfps_update == DFPS_IMMEDIATE_CLK_UPDATE_MODE) { if (pinfo->type == DTV_PANEL) new_fps = pinfo->lcdc.frame_rate; else new_fps = mdss_panel_get_framerate(pinfo); } else { new_fps = pinfo->new_fps; Loading
drivers/video/msm/mdss/mdss_mdp_intf_video.c +3 −1 Original line number Diff line number Diff line Loading @@ -1353,7 +1353,9 @@ static int mdss_mdp_video_config_fps(struct mdss_mdp_ctl *ctl, int new_fps) pdata->panel_info.dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) { == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { unsigned long flags; if (!ctx->timegen_en) { pr_err("TG is OFF. DFPS mode invalid\n"); Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +39 −8 Original line number Diff line number Diff line Loading @@ -2802,14 +2802,21 @@ static void cache_initial_timings(struct mdss_panel_data *pdata) * This value will change dynamically once the * actual dfps update happen in hw. */ if (pdata->panel_info.type == DTV_PANEL) pdata->panel_info.current_fps = pdata->panel_info.lcdc.frame_rate; else pdata->panel_info.current_fps = mdss_panel_get_framerate(&pdata->panel_info); /* * Keep the initial fps and porch values for this panel before * any dfps update happen, this is to prevent losing precision * in further calculations. */ if (pdata->panel_info.type == DTV_PANEL) pdata->panel_info.default_fps = pdata->panel_info.lcdc.frame_rate; else pdata->panel_info.default_fps = mdss_panel_get_framerate(&pdata->panel_info); Loading @@ -2823,7 +2830,9 @@ static void cache_initial_timings(struct mdss_panel_data *pdata) } else if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) { DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { pdata->panel_info.saved_total = mdss_panel_get_htotal(&pdata->panel_info, true); pdata->panel_info.saved_fporch = Loading Loading @@ -2891,9 +2900,26 @@ static void dfps_update_panel_params(struct mdss_panel_data *pdata, pdata->panel_info.lcdc.h_back_porch = data->hbp; pdata->panel_info.lcdc.h_pulse_width = data->hpw; pdata->panel_info.clk_rate = data->clk_rate; if (pdata->panel_info.type == DTV_PANEL) pdata->panel_info.clk_rate *= 1000; dfps_update_fps(&pdata->panel_info, new_fps); } else if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { pr_debug("hfp=%d, hbp=%d, hpw=%d, clk=%d, fps=%d\n", data->hfp, data->hbp, data->hpw, data->clk_rate, data->fps); pdata->panel_info.lcdc.h_front_porch = data->hfp; pdata->panel_info.lcdc.h_back_porch = data->hbp; pdata->panel_info.lcdc.h_pulse_width = data->hpw; pdata->panel_info.clk_rate = data->clk_rate; dfps_update_fps(&pdata->panel_info, new_fps); mdss_panel_update_clk_rate(&pdata->panel_info, new_fps); } else { dfps_update_fps(&pdata->panel_info, new_fps); mdss_panel_update_clk_rate(&pdata->panel_info, new_fps); Loading Loading @@ -2968,7 +2994,9 @@ static ssize_t dynamic_fps_sysfs_wta_dfps(struct device *dev, } if (pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP) { DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP || pdata->panel_info.dfps_update == DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK) { if (sscanf(buf, "%u %u %u %u %u", &data.hfp, &data.hbp, &data.hpw, &data.clk_rate, &data.fps) != 5) { Loading @@ -2983,6 +3011,9 @@ static ssize_t dynamic_fps_sysfs_wta_dfps(struct device *dev, } } if (pdata->panel_info.type == DTV_PANEL) panel_fps = pdata->panel_info.lcdc.frame_rate; else panel_fps = mdss_panel_get_framerate(&pdata->panel_info); if (data.fps == panel_fps) { Loading
drivers/video/msm/mdss/mdss_panel.h +8 −2 Original line number Diff line number Diff line Loading @@ -439,6 +439,9 @@ struct dynamic_fps_data { * @DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP: update fps using horizontal timings * @DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP: update fps using both horizontal * timings and clock. * @DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK: update fps using both * horizontal timings, clock need to be caculate base on new clock and * porches. * @DFPS_MODE_MAX: defines maximum limit of supported modes. */ enum dynamic_fps_update { Loading @@ -447,6 +450,7 @@ enum dynamic_fps_update { DFPS_IMMEDIATE_PORCH_UPDATE_MODE_VFP, DFPS_IMMEDIATE_PORCH_UPDATE_MODE_HFP, DFPS_IMMEDIATE_MULTI_UPDATE_MODE_CLK_HFP, DFPS_IMMEDIATE_MULTI_MODE_HFP_CALC_CLK, DFPS_MODE_MAX }; Loading Loading @@ -815,7 +819,9 @@ static inline u32 mdss_panel_get_framerate(struct mdss_panel_info *panel_info) break; case DTV_PANEL: if (panel_info->dynamic_fps) { frame_rate = panel_info->lcdc.frame_rate; frame_rate = panel_info->lcdc.frame_rate / 1000; if (panel_info->lcdc.frame_rate % 1000) frame_rate += 1; break; } default: Loading