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

Commit b1750ed6 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: mdss: fix adaptive variable refresh and dynamic fps concurrency"

parents a48893e2 4bb3edad
Loading
Loading
Loading
Loading
+19 −13
Original line number Diff line number Diff line
@@ -411,22 +411,28 @@ static void mdss_mdp_video_avr_vtotal_setup(struct mdss_mdp_ctl *ctl,

	if (test_bit(MDSS_CAPS_AVR_SUPPORTED, mdata->mdss_caps_map)) {
		struct mdss_panel_data *pdata = ctl->panel_data;
		u32 hsync_period = p->hsync_pulse_width + p->h_back_porch +
				p->width + p->h_front_porch;
		u32 vsync_period = p->vsync_pulse_width + p->v_back_porch +
				p->height + p->v_front_porch;
		u32 min_fps = pdata->panel_info.min_fps;
		u32 diff_fps = abs(pdata->panel_info.default_fps - min_fps);
		u32 vtotal = mdss_panel_get_vtotal(&pdata->panel_info);

		struct mdss_panel_info *pinfo = &pdata->panel_info;
		u32 avr_vtotal = pinfo->saved_avr_vtotal;

		if (!pinfo->saved_avr_vtotal) {
			u32 hsync_period = p->hsync_pulse_width +
				p->h_back_porch + p->width + p->h_front_porch;
			u32 vsync_period = p->vsync_pulse_width +
				p->v_back_porch + p->height + p->v_front_porch;
			u32 min_fps = pinfo->min_fps;
			u32 default_fps = mdss_panel_get_framerate(pinfo);
			u32 diff_fps = abs(default_fps - min_fps);
			u32 vtotal = mdss_panel_get_vtotal(pinfo);
			int add_porches = mult_frac(vtotal, diff_fps, min_fps);

			u32 vsync_period_slow = vsync_period + add_porches;
		u32 avr_vtotal = vsync_period_slow * hsync_period;

			avr_vtotal = vsync_period_slow * hsync_period;
			pinfo->saved_avr_vtotal = avr_vtotal;
		}

		mdp_video_write(ctx, MDSS_MDP_REG_INTF_AVR_VTOTAL, avr_vtotal);

		MDSS_XLOG(min_fps, vsync_period, vsync_period_slow, avr_vtotal);
		MDSS_XLOG(pinfo->min_fps, pinfo->default_fps, avr_vtotal);
	}
}

+0 −1
Original line number Diff line number Diff line
@@ -644,7 +644,6 @@ void mdss_panel_info_from_timing(struct mdss_panel_timing *pt,
	pinfo->dsc_enc_total = pt->dsc_enc_total;
	pinfo->fbc = pt->fbc;
	pinfo->compression_mode = pt->compression_mode;
	pinfo->default_fps = pinfo->mipi.frame_rate;

	pinfo->roi_alignment = pt->roi_alignment;
	pinfo->te = pt->te;
+3 −0
Original line number Diff line number Diff line
@@ -722,6 +722,9 @@ struct mdss_panel_info {

	/* debugfs structure for the panel */
	struct mdss_panel_debugfs_info *debugfs_info;

	/* stores initial adaptive variable refresh vtotal value */
	u32 saved_avr_vtotal;
};

struct mdss_panel_timing {