summaryrefslogtreecommitdiff
path: root/drivers/gpu/drm/msm/msm_drv.c
diff options
context:
space:
mode:
authorLakshmi Narayana Kalavala <lkalaval@codeaurora.org>2018-02-26 15:46:57 -0800
committerLakshmi Narayana Kalavala <lkalaval@codeaurora.org>2018-03-08 13:07:14 -0800
commit4f2aa096ba1682fcd002613c6cb1550476008da1 (patch)
treeb39be34e29236c127511eea27f4a62ed1c20cb15 /drivers/gpu/drm/msm/msm_drv.c
parent07324253e2e621c2cf54105c5612e341a9f305ad (diff)
drm/msm: support shutdown sequence on msm driver
Add shutdown sequence in msm driver to turn off all connectors/bridge gracefully. That will allow the graceful shutdown for dsi panel. Change-Id: I055bd57a45706478c785b7a3c41bf7623dd8d2e7 Signed-off-by: Dhaval Patel <pdhaval@codeaurora.org> Signed-off-by: Lakshmi Narayana Kalavala <lkalaval@codeaurora.org>
Diffstat (limited to 'drivers/gpu/drm/msm/msm_drv.c')
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c25
1 files changed, 24 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 6f968e93d959..043fdb712723 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2017, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved.
* Copyright (C) 2013 Red Hat
* Author: Rob Clark <robdclark@gmail.com>
*
@@ -2199,6 +2199,28 @@ static const struct platform_device_id msm_id[] = {
{ }
};
+static void msm_pdev_shutdown(struct platform_device *pdev)
+{
+ struct drm_device *ddev = platform_get_drvdata(pdev);
+ struct msm_drm_private *priv = NULL;
+
+ if (!ddev) {
+ DRM_ERROR("invalid drm device node\n");
+ return;
+ }
+
+ priv = ddev->dev_private;
+ if (!priv) {
+ DRM_ERROR("invalid msm drm private node\n");
+ return;
+ }
+
+ msm_lastclose(ddev);
+
+ /* set this after lastclose to allow kickoff from lastclose */
+ priv->shutdown_in_progress = true;
+}
+
static const struct of_device_id dt_match[] = {
{ .compatible = "qcom,mdp" }, /* mdp4 */
{ .compatible = "qcom,sde-kms" }, /* sde */
@@ -2209,6 +2231,7 @@ MODULE_DEVICE_TABLE(of, dt_match);
static struct platform_driver msm_platform_driver = {
.probe = msm_pdev_probe,
.remove = msm_pdev_remove,
+ .shutdown = msm_pdev_shutdown,
.driver = {
.name = "msm_drm",
.of_match_table = dt_match,