aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm
diff options
context:
space:
mode:
authorMarek Szyprowski <m.szyprowski@samsung.com>2015-02-02 08:20:28 -0500
committerInki Dae <inki.dae@samsung.com>2015-02-07 02:38:40 -0500
commit04427ec57480d83f98d8a8a326b831dfa474f297 (patch)
tree60fd428aabe4e4461fa6092e122f20c12a7d266c /drivers/gpu/drm
parent2f8997902e64951228385ca1cebb0d2f16f99a23 (diff)
drm/exynos: add support for 'hdmi' clock
Mixed need to have hdmi clock enabled to properly perform power on/off sequences, so add handling of this clock directly to the mixer driver. Dependency between hdmi clock and mixer module has been observed on Exynos4 based boards. Suggested-by: Andrzej Hajda <a.hajda@samsung.com> Reviewed-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> Tested-by: Javier Martinez Canillas <javier.martinez@collabora.co.uk> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu/drm')
-rw-r--r--drivers/gpu/drm/exynos/exynos_mixer.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c b/drivers/gpu/drm/exynos/exynos_mixer.c
index ed44cd4f01f7..1c65a3164ce0 100644
--- a/drivers/gpu/drm/exynos/exynos_mixer.c
+++ b/drivers/gpu/drm/exynos/exynos_mixer.c
@@ -72,6 +72,7 @@ struct mixer_resources {
72 spinlock_t reg_slock; 72 spinlock_t reg_slock;
73 struct clk *mixer; 73 struct clk *mixer;
74 struct clk *vp; 74 struct clk *vp;
75 struct clk *hdmi;
75 struct clk *sclk_mixer; 76 struct clk *sclk_mixer;
76 struct clk *sclk_hdmi; 77 struct clk *sclk_hdmi;
77 struct clk *mout_mixer; 78 struct clk *mout_mixer;
@@ -769,6 +770,12 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
769 return -ENODEV; 770 return -ENODEV;
770 } 771 }
771 772
773 mixer_res->hdmi = devm_clk_get(dev, "hdmi");
774 if (IS_ERR(mixer_res->hdmi)) {
775 dev_err(dev, "failed to get clock 'hdmi'\n");
776 return PTR_ERR(mixer_res->hdmi);
777 }
778
772 mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi"); 779 mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi");
773 if (IS_ERR(mixer_res->sclk_hdmi)) { 780 if (IS_ERR(mixer_res->sclk_hdmi)) {
774 dev_err(dev, "failed to get clock 'sclk_hdmi'\n"); 781 dev_err(dev, "failed to get clock 'sclk_hdmi'\n");
@@ -1092,6 +1099,7 @@ static void mixer_poweron(struct exynos_drm_crtc *crtc)
1092 pm_runtime_get_sync(ctx->dev); 1099 pm_runtime_get_sync(ctx->dev);
1093 1100
1094 clk_prepare_enable(res->mixer); 1101 clk_prepare_enable(res->mixer);
1102 clk_prepare_enable(res->hdmi);
1095 if (ctx->vp_enabled) { 1103 if (ctx->vp_enabled) {
1096 clk_prepare_enable(res->vp); 1104 clk_prepare_enable(res->vp);
1097 if (ctx->has_sclk) 1105 if (ctx->has_sclk)
@@ -1131,6 +1139,7 @@ static void mixer_poweroff(struct exynos_drm_crtc *crtc)
1131 ctx->powered = false; 1139 ctx->powered = false;
1132 mutex_unlock(&ctx->mixer_mutex); 1140 mutex_unlock(&ctx->mixer_mutex);
1133 1141
1142 clk_disable_unprepare(res->hdmi);
1134 clk_disable_unprepare(res->mixer); 1143 clk_disable_unprepare(res->mixer);
1135 if (ctx->vp_enabled) { 1144 if (ctx->vp_enabled) {
1136 clk_disable_unprepare(res->vp); 1145 clk_disable_unprepare(res->vp);