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

Commit 277c5f9d authored by Sandeep Panda's avatar Sandeep Panda
Browse files

drm/msm/dsi-staging: optimise TE status check sequence



To check if panel is sending TE signal or not, clock and
bandwidth vote is not required. Currently in driver for
TE mode also, driver is enabling clocks and bandwidth which
is not required and might cause unnecessary MDSS wake ups.
This change optimises the same.

Change-Id: Ia00cf7a96058223e28b7bcfac144c9987f1a6513
Signed-off-by: default avatarSandeep Panda <spanda@codeaurora.org>
parent f56ef87f
Loading
Loading
Loading
Loading
+16 −12
Original line number Diff line number Diff line
@@ -819,6 +819,11 @@ int dsi_display_check_status(struct drm_connector *connector, void *display,
	if (te_check_override && gpio_is_valid(dsi_display->disp_te_gpio))
		status_mode = ESD_MODE_PANEL_TE;

	if (status_mode == ESD_MODE_PANEL_TE) {
		rc = dsi_display_status_check_te(dsi_display);
		goto exit;
	}

	dsi_display_clk_ctrl(dsi_display->dsi_clk_handle,
			     DSI_ALL_CLKS, DSI_CLK_ON);

@@ -831,26 +836,25 @@ int dsi_display_check_status(struct drm_connector *connector, void *display,
		rc = dsi_display_status_reg_read(dsi_display);
	} else if (status_mode == ESD_MODE_SW_BTA) {
		rc = dsi_display_status_bta_request(dsi_display);
	} else if (status_mode == ESD_MODE_PANEL_TE) {
		rc = dsi_display_status_check_te(dsi_display);
	} else {
		pr_warn("unsupported check status mode\n");
		pr_warn("Unsupported ESD check mode: %d\n", status_mode);
		panel->esd_config.esd_enabled = false;
	}

	/* Unmask error interrupts */
	/* Unmask error interrupts if check passed */
	if (rc > 0) {
		dsi_display_set_ctrl_esd_check_flag(dsi_display, false);
		dsi_display_mask_ctrl_error_interrupts(dsi_display, mask,
							false);
	} else {
		/* Handle Panel failures during display disable sequence */
		atomic_set(&panel->esd_recovery_pending, 1);
		dsi_display_mask_ctrl_error_interrupts(dsi_display,
						       mask, false);
	}

	dsi_display_clk_ctrl(dsi_display->dsi_clk_handle,
			     DSI_ALL_CLKS, DSI_CLK_OFF);

exit:
	/* Handle Panel failures during display disable sequence */
	if (rc <= 0)
		atomic_set(&panel->esd_recovery_pending, 1);

release_panel_lock:
	dsi_panel_release_panel_lock(panel);
	SDE_EVT32(SDE_EVTLOG_FUNC_EXIT);