diff options
author | Marek Szyprowski <m.szyprowski@samsung.com> | 2015-02-02 08:20:28 -0500 |
---|---|---|
committer | Inki Dae <inki.dae@samsung.com> | 2015-02-07 02:38:40 -0500 |
commit | 04427ec57480d83f98d8a8a326b831dfa474f297 (patch) | |
tree | 60fd428aabe4e4461fa6092e122f20c12a7d266c /drivers/gpu/drm | |
parent | 2f8997902e64951228385ca1cebb0d2f16f99a23 (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.c | 9 |
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); |