diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index a2e43cd8e4fe..0c942531f6db 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -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))