Merge tag 'drm-msm-next-2017-08-22' of git://people.freedesktop.org/~robclark/linux...
[platform/kernel/linux-exynos.git] / drivers / gpu / drm / msm / msm_drv.c
index b0129e7..606df7b 100644 (file)
@@ -73,6 +73,10 @@ bool dumpstate = false;
 MODULE_PARM_DESC(dumpstate, "Dump KMS state on errors");
 module_param(dumpstate, bool, 0600);
 
+static bool modeset = true;
+MODULE_PARM_DESC(modeset, "Use kernel modesetting [KMS] (1=on (default), 0=disable)");
+module_param(modeset, bool, 0600);
+
 /*
  * Util/helpers:
  */
@@ -878,8 +882,37 @@ static int msm_pm_resume(struct device *dev)
 }
 #endif
 
+#ifdef CONFIG_PM
+static int msm_runtime_suspend(struct device *dev)
+{
+       struct drm_device *ddev = dev_get_drvdata(dev);
+       struct msm_drm_private *priv = ddev->dev_private;
+
+       DBG("");
+
+       if (priv->mdss)
+               return msm_mdss_disable(priv->mdss);
+
+       return 0;
+}
+
+static int msm_runtime_resume(struct device *dev)
+{
+       struct drm_device *ddev = dev_get_drvdata(dev);
+       struct msm_drm_private *priv = ddev->dev_private;
+
+       DBG("");
+
+       if (priv->mdss)
+               return msm_mdss_enable(priv->mdss);
+
+       return 0;
+}
+#endif
+
 static const struct dev_pm_ops msm_pm_ops = {
        SET_SYSTEM_SLEEP_PM_OPS(msm_pm_suspend, msm_pm_resume)
+       SET_RUNTIME_PM_OPS(msm_runtime_suspend, msm_runtime_resume, NULL)
 };
 
 /*
@@ -1103,6 +1136,9 @@ static struct platform_driver msm_platform_driver = {
 
 static int __init msm_drm_register(void)
 {
+       if (!modeset)
+               return -EINVAL;
+
        DBG("init");
        msm_mdp_register();
        msm_dsi_register();