summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorDhaval Patel <pdhaval@quicinc.com>2016-08-17 23:26:28 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-17 23:26:28 -0700
commit95b47eedb3e120a02edd0a08c7e3673523d651de (patch)
treea7994831263aa454ac2e4d5fc3aa0231fc8bd134 /drivers/gpu
parentb4c0f14b2a79cdbddca2821b6d1a5dae3d61ba44 (diff)
parent4a2d598d1f2fd75b4f5522fff2567278eb077076 (diff)
Merge "drm/msm: enable/disable sde during driver open and close" into dev/msm-4.4-drm_kms
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/msm_drv.c8
-rw-r--r--drivers/gpu/drm/msm/msm_kms.h1
-rw-r--r--drivers/gpu/drm/msm/sde/sde_kms.c10
3 files changed, 18 insertions, 1 deletions
diff --git a/drivers/gpu/drm/msm/msm_drv.c b/drivers/gpu/drm/msm/msm_drv.c
index 8b9867fffe35..4f9ffa3236b1 100644
--- a/drivers/gpu/drm/msm/msm_drv.c
+++ b/drivers/gpu/drm/msm/msm_drv.c
@@ -485,6 +485,14 @@ static int msm_open(struct drm_device *dev, struct drm_file *file)
file->driver_priv = ctx;
+ if (dev && dev->dev_private) {
+ struct msm_drm_private *priv = dev->dev_private;
+ struct msm_kms *kms;
+
+ kms = priv->kms;
+ if (kms && kms->funcs && kms->funcs->postopen)
+ kms->funcs->postopen(kms, file);
+ }
return 0;
}
diff --git a/drivers/gpu/drm/msm/msm_kms.h b/drivers/gpu/drm/msm/msm_kms.h
index 26e41880c670..f30df61ae307 100644
--- a/drivers/gpu/drm/msm/msm_kms.h
+++ b/drivers/gpu/drm/msm/msm_kms.h
@@ -77,6 +77,7 @@ struct msm_kms_funcs {
struct drm_encoder *encoder,
struct drm_encoder *slave_encoder,
bool is_cmd_mode);
+ void (*postopen)(struct msm_kms *kms, struct drm_file *file);
/* cleanup: */
void (*preclose)(struct msm_kms *kms, struct drm_file *file);
void (*destroy)(struct msm_kms *kms);
diff --git a/drivers/gpu/drm/msm/sde/sde_kms.c b/drivers/gpu/drm/msm/sde/sde_kms.c
index 67c70af5967f..6967dae10135 100644
--- a/drivers/gpu/drm/msm/sde/sde_kms.c
+++ b/drivers/gpu/drm/msm/sde/sde_kms.c
@@ -319,8 +319,16 @@ static long sde_round_pixclk(struct msm_kms *kms, unsigned long rate,
return rate;
}
+static void sde_postopen(struct msm_kms *kms, struct drm_file *file)
+{
+ if (kms)
+ sde_enable(to_sde_kms(kms));
+}
+
static void sde_preclose(struct msm_kms *kms, struct drm_file *file)
{
+ if (kms)
+ sde_disable(to_sde_kms(kms));
}
static void sde_destroy(struct msm_kms *kms)
@@ -349,6 +357,7 @@ static const struct msm_kms_funcs kms_funcs = {
.check_modified_format = sde_format_check_modified_format,
.get_format = sde_get_msm_format,
.round_pixclk = sde_round_pixclk,
+ .postopen = sde_postopen,
.preclose = sde_preclose,
.destroy = sde_destroy,
};
@@ -657,7 +666,6 @@ struct msm_kms *sde_kms_init(struct drm_device *dev)
*/
clk_set_rate(sde_kms->src_clk, DEFAULT_MDP_SRC_CLK);
- sde_enable(sde_kms);
sde_kms->hw_res.res_table = res_table;
/*