Loading drivers/video/fbdev/msm/mdss_dsi_host.c +5 −5 Original line number Diff line number Diff line Loading @@ -3128,6 +3128,11 @@ irqreturn_t mdss_dsi_isr(int irq, void *ptr) pr_debug("%s: ndx=%d isr=%x\n", __func__, ctrl->ndx, isr); if (isr & DSI_INTR_ERROR) { MDSS_XLOG(ctrl->ndx, ctrl->mdp_busy, isr, 0x97); mdss_dsi_error(ctrl); } if (isr & DSI_INTR_BTA_DONE) { MDSS_XLOG(ctrl->ndx, ctrl->mdp_busy, isr, 0x96); spin_lock(&ctrl->mdp_lock); Loading @@ -3152,11 +3157,6 @@ irqreturn_t mdss_dsi_isr(int irq, void *ptr) spin_unlock(&ctrl->mdp_lock); } if (isr & DSI_INTR_ERROR) { MDSS_XLOG(ctrl->ndx, ctrl->mdp_busy, isr, 0x97); mdss_dsi_error(ctrl); } if (isr & DSI_INTR_VIDEO_DONE) { spin_lock(&ctrl->mdp_lock); mdss_dsi_disable_irq_nosync(ctrl, DSI_VIDEO_TERM); Loading drivers/video/fbdev/msm/mdss_mdp_ctl.c +6 −1 Original line number Diff line number Diff line Loading @@ -5495,7 +5495,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/fbdev/msm/mdss_mdp_intf_video.c +3 −1 Original line number Diff line number Diff line Loading @@ -1424,7 +1424,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/fbdev/msm/mdss_mdp_overlay.c +39 −8 Original line number Diff line number Diff line Loading @@ -3064,14 +3064,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 @@ -3085,7 +3092,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 @@ -3153,9 +3162,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 @@ -3230,7 +3256,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 @@ -3245,6 +3273,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/fbdev/msm/mdss_panel.h +8 −2 Original line number Diff line number Diff line Loading @@ -541,6 +541,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 @@ -549,6 +552,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 @@ -978,7 +982,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/fbdev/msm/mdss_dsi_host.c +5 −5 Original line number Diff line number Diff line Loading @@ -3128,6 +3128,11 @@ irqreturn_t mdss_dsi_isr(int irq, void *ptr) pr_debug("%s: ndx=%d isr=%x\n", __func__, ctrl->ndx, isr); if (isr & DSI_INTR_ERROR) { MDSS_XLOG(ctrl->ndx, ctrl->mdp_busy, isr, 0x97); mdss_dsi_error(ctrl); } if (isr & DSI_INTR_BTA_DONE) { MDSS_XLOG(ctrl->ndx, ctrl->mdp_busy, isr, 0x96); spin_lock(&ctrl->mdp_lock); Loading @@ -3152,11 +3157,6 @@ irqreturn_t mdss_dsi_isr(int irq, void *ptr) spin_unlock(&ctrl->mdp_lock); } if (isr & DSI_INTR_ERROR) { MDSS_XLOG(ctrl->ndx, ctrl->mdp_busy, isr, 0x97); mdss_dsi_error(ctrl); } if (isr & DSI_INTR_VIDEO_DONE) { spin_lock(&ctrl->mdp_lock); mdss_dsi_disable_irq_nosync(ctrl, DSI_VIDEO_TERM); Loading
drivers/video/fbdev/msm/mdss_mdp_ctl.c +6 −1 Original line number Diff line number Diff line Loading @@ -5495,7 +5495,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/fbdev/msm/mdss_mdp_intf_video.c +3 −1 Original line number Diff line number Diff line Loading @@ -1424,7 +1424,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/fbdev/msm/mdss_mdp_overlay.c +39 −8 Original line number Diff line number Diff line Loading @@ -3064,14 +3064,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 @@ -3085,7 +3092,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 @@ -3153,9 +3162,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 @@ -3230,7 +3256,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 @@ -3245,6 +3273,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/fbdev/msm/mdss_panel.h +8 −2 Original line number Diff line number Diff line Loading @@ -541,6 +541,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 @@ -549,6 +552,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 @@ -978,7 +982,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