Commit 04427ec5 authored by Marek Szyprowski's avatar Marek Szyprowski Committed by Inki Dae

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: default avatarAndrzej Hajda <a.hajda@samsung.com>
Reviewed-by: default avatarJavier Martinez Canillas <javier.martinez@collabora.co.uk>
Tested-by: default avatarJavier Martinez Canillas <javier.martinez@collabora.co.uk>
Signed-off-by: default avatarMarek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 2f899790
...@@ -15,6 +15,7 @@ Required properties: ...@@ -15,6 +15,7 @@ Required properties:
a) mixer: Gate of Mixer IP bus clock. a) mixer: Gate of Mixer IP bus clock.
b) sclk_hdmi: HDMI Special clock, one of the two possible inputs of b) sclk_hdmi: HDMI Special clock, one of the two possible inputs of
mixer mux. mixer mux.
c) hdmi: Gate of HDMI IP bus clock, needed together with sclk_hdmi.
Example: Example:
......
...@@ -72,6 +72,7 @@ struct mixer_resources { ...@@ -72,6 +72,7 @@ struct mixer_resources {
spinlock_t reg_slock; spinlock_t reg_slock;
struct clk *mixer; struct clk *mixer;
struct clk *vp; struct clk *vp;
struct clk *hdmi;
struct clk *sclk_mixer; struct clk *sclk_mixer;
struct clk *sclk_hdmi; struct clk *sclk_hdmi;
struct clk *mout_mixer; struct clk *mout_mixer;
...@@ -769,6 +770,12 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx) ...@@ -769,6 +770,12 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
return -ENODEV; return -ENODEV;
} }
mixer_res->hdmi = devm_clk_get(dev, "hdmi");
if (IS_ERR(mixer_res->hdmi)) {
dev_err(dev, "failed to get clock 'hdmi'\n");
return PTR_ERR(mixer_res->hdmi);
}
mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi"); mixer_res->sclk_hdmi = devm_clk_get(dev, "sclk_hdmi");
if (IS_ERR(mixer_res->sclk_hdmi)) { if (IS_ERR(mixer_res->sclk_hdmi)) {
dev_err(dev, "failed to get clock 'sclk_hdmi'\n"); dev_err(dev, "failed to get clock 'sclk_hdmi'\n");
...@@ -1092,6 +1099,7 @@ static void mixer_poweron(struct exynos_drm_crtc *crtc) ...@@ -1092,6 +1099,7 @@ static void mixer_poweron(struct exynos_drm_crtc *crtc)
pm_runtime_get_sync(ctx->dev); pm_runtime_get_sync(ctx->dev);
clk_prepare_enable(res->mixer); clk_prepare_enable(res->mixer);
clk_prepare_enable(res->hdmi);
if (ctx->vp_enabled) { if (ctx->vp_enabled) {
clk_prepare_enable(res->vp); clk_prepare_enable(res->vp);
if (ctx->has_sclk) if (ctx->has_sclk)
...@@ -1131,6 +1139,7 @@ static void mixer_poweroff(struct exynos_drm_crtc *crtc) ...@@ -1131,6 +1139,7 @@ static void mixer_poweroff(struct exynos_drm_crtc *crtc)
ctx->powered = false; ctx->powered = false;
mutex_unlock(&ctx->mixer_mutex); mutex_unlock(&ctx->mixer_mutex);
clk_disable_unprepare(res->hdmi);
clk_disable_unprepare(res->mixer); clk_disable_unprepare(res->mixer);
if (ctx->vp_enabled) { if (ctx->vp_enabled) {
clk_disable_unprepare(res->vp); clk_disable_unprepare(res->vp);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment