Use runtime PM autosuspend feature, with 1s timeout, to avoid
unnecessary suspend-resume cycles when, e.g. the userspace temporarily
turns off the crtcs when configuring the outputs.

Signed-off-by: Tomi Valkeinen <tomi.valkei...@ideasonboard.com>
---
 drivers/gpu/drm/tidss/tidss_drv.c | 8 +++++++-
 1 file changed, 7 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/tidss/tidss_drv.c 
b/drivers/gpu/drm/tidss/tidss_drv.c
index f403db11b846..64914331715a 100644
--- a/drivers/gpu/drm/tidss/tidss_drv.c
+++ b/drivers/gpu/drm/tidss/tidss_drv.c
@@ -43,7 +43,9 @@ void tidss_runtime_put(struct tidss_device *tidss)
 
        dev_dbg(tidss->dev, "%s\n", __func__);
 
-       r = pm_runtime_put_sync(tidss->dev);
+       pm_runtime_mark_last_busy(tidss->dev);
+
+       r = pm_runtime_put_autosuspend(tidss->dev);
        WARN_ON(r < 0);
 }
 
@@ -144,6 +146,9 @@ static int tidss_probe(struct platform_device *pdev)
 
        pm_runtime_enable(dev);
 
+       pm_runtime_set_autosuspend_delay(dev, 1000);
+       pm_runtime_use_autosuspend(dev);
+
 #ifndef CONFIG_PM
        /* If we don't have PM, we need to call resume manually */
        dispc_runtime_resume(tidss->dispc);
@@ -215,6 +220,7 @@ static void tidss_remove(struct platform_device *pdev)
        /* If we don't have PM, we need to call suspend manually */
        dispc_runtime_suspend(tidss->dispc);
 #endif
+       pm_runtime_dont_use_autosuspend(dev);
        pm_runtime_disable(dev);
 
        /* devm allocated dispc goes away with the dev so mark it NULL */

-- 
2.34.1

Reply via email to