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: Aravind Venkateswaran <aravindh@codeaurora.org>
This commit is contained in:
Aravind Venkateswaran 2014-08-25 12:41:47 -07:00 committed by David Keitel
parent ef439517fe
commit f8e6cabbfc

View file

@ -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;
@ -728,7 +729,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);
msm_bus_scale_client_update_request(
@ -777,8 +779,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);
@ -1464,6 +1468,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))