diff options
| author | Dhaval Patel <pdhaval@quicinc.com> | 2016-08-17 23:26:28 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-17 23:26:28 -0700 |
| commit | 95b47eedb3e120a02edd0a08c7e3673523d651de (patch) | |
| tree | a7994831263aa454ac2e4d5fc3aa0231fc8bd134 /drivers/gpu | |
| parent | b4c0f14b2a79cdbddca2821b6d1a5dae3d61ba44 (diff) | |
| parent | 4a2d598d1f2fd75b4f5522fff2567278eb077076 (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.c | 8 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/msm_kms.h | 1 | ||||
| -rw-r--r-- | drivers/gpu/drm/msm/sde/sde_kms.c | 10 |
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; /* |
