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

Commit 3cee7664 authored by Aravind Venkateswaran's avatar Aravind Venkateswaran
Browse files

msm: mdss: enable runtime autosuspend for mdp device



With MDSS idle power collapse feature enabled, it is possible that
the runtime suspend callback for MDP device to be called when there are
no display updates. This results in MDSS GDSC to be turned off in idle
screen usecases, and would subsequently be turned back on upon the next
update. However, toggling GDSC can be an expensive operation and should
only be done when it is expected to be off for a substantial time. To
achieve this, enable the runtime autosuspend status for the mdp device.

Change-Id: I6e4127efe7b01d7e164b0763d34995c82c2e8be9
Signed-off-by: default avatarAravind Venkateswaran <aravindh@codeaurora.org>
parent 93271abe
Loading
Loading
Loading
Loading
+10 −3
Original line number Diff line number Diff line
@@ -58,6 +58,7 @@
#include "mdss_mdp_trace.h"

#define AXI_HALT_TIMEOUT_US	0x4000
#define AUTOSUSPEND_TIMEOUT_MS	200

struct mdss_data_type *mdss_res;

@@ -859,7 +860,8 @@ void mdss_bus_bandwidth_ctrl(int enable)
		if (!enable) {
			msm_bus_scale_client_update_request(
				mdata->bus_hdl, 0);
			pm_runtime_put(&mdata->pdev->dev);
			pm_runtime_mark_last_busy(&mdata->pdev->dev);
			pm_runtime_put_autosuspend(&mdata->pdev->dev);
		} else {
			pm_runtime_get_sync(&mdata->pdev->dev);
			mdss_mdp_idle_pc_restore();
@@ -909,8 +911,10 @@ void mdss_mdp_clk_ctrl(int enable)
		if (mdata->vsync_ena)
			mdss_mdp_clk_update(MDSS_CLK_MDP_VSYNC, enable);

		if (!enable)
			pm_runtime_put(&mdata->pdev->dev);
		if (!enable) {
			pm_runtime_mark_last_busy(&mdata->pdev->dev);
			pm_runtime_put_autosuspend(&mdata->pdev->dev);
		}
	}

	mutex_unlock(&mdp_clk_lock);
@@ -1572,6 +1576,9 @@ static int mdss_mdp_probe(struct platform_device *pdev)
		goto probe_done;
	}

	pm_runtime_set_autosuspend_delay(&pdev->dev, AUTOSUSPEND_TIMEOUT_MS);
	if (mdata->idle_pc_enabled)
		pm_runtime_use_autosuspend(&pdev->dev);
	pm_runtime_set_suspended(&pdev->dev);
	pm_runtime_enable(&pdev->dev);
	if (!pm_runtime_enabled(&pdev->dev))