Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1371df8c authored by Ray Zhang's avatar Ray Zhang Committed by Gerrit - the friendly Code Review server
Browse files

msm: mdss: fix fps for different interfaces



Different interfaces uses different formats for fps. Also, for
the same interface, fps format may change based on the use case.
Provide correct fps format for all uses cases to support dynamic
fps change using pixel clock change or porch change and clock
and bandwidth calculations.

Change-Id: Ifd1a92bd53a106f507c986052f63c671497ede0e
Signed-off-by: default avatarAjay Singh Parmar <aparmar@codeaurora.org>
Signed-off-by: default avatarRay Zhang <rayz@codeaurora.org>
parent 1f168b94
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -4010,7 +4010,8 @@ int dsi_panel_device_register(struct platform_device *ctrl_pdev,
		return rc;
	}

	pinfo->panel_max_fps = mdss_panel_get_framerate(pinfo);
	pinfo->panel_max_fps = mdss_panel_get_framerate(pinfo,
				FPS_RESOLUTION_HZ);
	pinfo->panel_max_vtotal = mdss_panel_get_vtotal(pinfo);

	rc = mdss_dsi_parse_gpio_params(ctrl_pdev, ctrl_pdata);
+2 −1
Original line number Diff line number Diff line
@@ -3404,7 +3404,8 @@ void mdss_panelinfo_to_fb_var(struct mdss_panel_info *pinfo,
	var->left_margin = pinfo->lcdc.h_back_porch;
	var->hsync_len = pinfo->lcdc.h_pulse_width;

	frame_rate = mdss_panel_get_framerate(pinfo);
	frame_rate = mdss_panel_get_framerate(pinfo,
					FPS_RESOLUTION_HZ);
	if (frame_rate) {
		unsigned long clk_rate, h_total, v_total;

+7 −0
Original line number Diff line number Diff line
@@ -664,6 +664,9 @@ static int hdmi_tx_update_pixel_clk(struct hdmi_tx_ctrl *hdmi_ctrl)

	power_data->clk_config->rate = pinfo->clk_rate;

	if (pinfo->out_format == MDP_Y_CBCR_H2V2)
		power_data->clk_config->rate /= 2;

	DEV_DBG("%s: rate %ld\n", __func__, power_data->clk_config->rate);

	msm_dss_clk_set_rate(power_data->clk_config, power_data->num_clk);
@@ -3494,6 +3497,9 @@ static void hdmi_tx_update_fps(struct hdmi_tx_ctrl *hdmi_ctrl)
		return;
	}

	DEV_DBG("%s: current fps %d, new fps %d\n", __func__,
		pinfo->current_fps, hdmi_ctrl->dynamic_fps);

	if (hdmi_ctrl->dynamic_fps == pinfo->current_fps) {
		DEV_DBG("%s: Panel is already at this FPS: %d\n",
			__func__, hdmi_ctrl->dynamic_fps);
@@ -3759,6 +3765,7 @@ static int hdmi_tx_event_handler(struct mdss_panel_data *panel_data,
	/* UPDATE FPS is called from atomic context */
	if (event == MDSS_EVENT_PANEL_UPDATE_FPS) {
		hdmi_ctrl->dynamic_fps = (u32) (unsigned long)arg;
		DEV_DBG("%s: fps %d\n", __func__, hdmi_ctrl->dynamic_fps);
		queue_work(hdmi_ctrl->workq, &hdmi_ctrl->fps_work);
		return rc;
	}
+12 −9
Original line number Diff line number Diff line
@@ -688,7 +688,8 @@ int mdss_mdp_get_panel_params(struct mdss_mdp_pipe *pipe,
			*fps = pinfo->panel_max_fps;
			*v_total = pinfo->panel_max_vtotal;
		} else {
			*fps = mdss_panel_get_framerate(pinfo);
			*fps = mdss_panel_get_framerate(pinfo,
					FPS_RESOLUTION_HZ);
			*v_total = mdss_panel_get_vtotal(pinfo);
		}
		*xres = get_panel_width(mixer->ctl);
@@ -826,7 +827,8 @@ static u32 mdss_mdp_get_vbp_factor(struct mdss_mdp_ctl *ctl)
		return 0;

	pinfo = &ctl->panel_data->panel_info;
	fps = mdss_panel_get_framerate(pinfo);
	fps = mdss_panel_get_framerate(pinfo,
			FPS_RESOLUTION_HZ);
	v_total = mdss_panel_get_vtotal(pinfo);
	vbp = pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width;
	vbp += pinfo->prg_fet;
@@ -874,7 +876,8 @@ static u32 __calc_prefill_line_time_us(struct mdss_mdp_ctl *ctl)
		return 0;

	pinfo = &ctl->panel_data->panel_info;
	fps = mdss_panel_get_framerate(pinfo);
	fps = mdss_panel_get_framerate(pinfo,
			FPS_RESOLUTION_HZ);
	v_total = mdss_panel_get_vtotal(pinfo);
	vbp = pinfo->lcdc.v_back_porch + pinfo->lcdc.v_pulse_width;
	vbp += pinfo->prg_fet;
@@ -931,7 +934,8 @@ static u32 mdss_mdp_calc_prefill_line_time(struct mdss_mdp_ctl *ctl,
		return -EINVAL;

	pinfo = &ctl->panel_data->panel_info;
	fps = mdss_panel_get_framerate(pinfo);
	fps = mdss_panel_get_framerate(pinfo,
		FPS_RESOLUTION_HZ);
	v_total = mdss_panel_get_vtotal(pinfo);

	/* calculate the minimum prefill */
@@ -1233,7 +1237,8 @@ static void mdss_mdp_perf_calc_mixer(struct mdss_mdp_mixer *mixer,
				fps = pinfo->panel_max_fps;
				v_total = pinfo->panel_max_vtotal;
			} else {
				fps = mdss_panel_get_framerate(pinfo);
				fps = mdss_panel_get_framerate(pinfo,
						FPS_RESOLUTION_HZ);
				v_total = mdss_panel_get_vtotal(pinfo);
			}
		} else {
@@ -5221,10 +5226,8 @@ int mdss_mdp_ctl_update_fps(struct mdss_mdp_ctl *ctl)
		(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);
		new_fps = mdss_panel_get_framerate(pinfo,
				FPS_RESOLUTION_DEFAULT);
	} else {
		new_fps = pinfo->new_fps;
	}
+1 −1
Original line number Diff line number Diff line
@@ -1160,7 +1160,7 @@ static void __dump_timings(struct seq_file *s, struct mdss_mdp_ctl *ctl)
	pinfo = &ctl->panel_data->panel_info;
	seq_printf(s, "Panel #%d %dx%dp%d\n",
			pinfo->pdest, pinfo->xres, pinfo->yres,
			mdss_panel_get_framerate(pinfo));
			mdss_panel_get_framerate(pinfo, FPS_RESOLUTION_HZ));
	seq_printf(s, "\tvbp=%d vfp=%d vpw=%d hbp=%d hfp=%d hpw=%d\n",
			pinfo->lcdc.v_back_porch,
			pinfo->lcdc.v_front_porch,
Loading