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>
This commit is contained in:
parent
2f8997902e
commit
04427ec574
|
@ -15,6 +15,7 @@ Required properties:
|
|||
a) mixer: Gate of Mixer IP bus clock.
|
||||
b) sclk_hdmi: HDMI Special clock, one of the two possible inputs of
|
||||
mixer mux.
|
||||
c) hdmi: Gate of HDMI IP bus clock, needed together with sclk_hdmi.
|
||||
|
||||
Example:
|
||||
|
||||
|
|
|
@ -72,6 +72,7 @@ struct mixer_resources {
|
|||
spinlock_t reg_slock;
|
||||
struct clk *mixer;
|
||||
struct clk *vp;
|
||||
struct clk *hdmi;
|
||||
struct clk *sclk_mixer;
|
||||
struct clk *sclk_hdmi;
|
||||
struct clk *mout_mixer;
|
||||
|
@ -769,6 +770,12 @@ static int mixer_resources_init(struct mixer_context *mixer_ctx)
|
|||
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");
|
||||
if (IS_ERR(mixer_res->sclk_hdmi)) {
|
||||
dev_err(dev, "failed to get clock 'sclk_hdmi'\n");
|
||||
|
@ -1092,6 +1099,7 @@ static void mixer_poweron(struct exynos_drm_crtc *crtc)
|
|||
pm_runtime_get_sync(ctx->dev);
|
||||
|
||||
clk_prepare_enable(res->mixer);
|
||||
clk_prepare_enable(res->hdmi);
|
||||
if (ctx->vp_enabled) {
|
||||
clk_prepare_enable(res->vp);
|
||||
if (ctx->has_sclk)
|
||||
|
@ -1131,6 +1139,7 @@ static void mixer_poweroff(struct exynos_drm_crtc *crtc)
|
|||
ctx->powered = false;
|
||||
mutex_unlock(&ctx->mixer_mutex);
|
||||
|
||||
clk_disable_unprepare(res->hdmi);
|
||||
clk_disable_unprepare(res->mixer);
|
||||
if (ctx->vp_enabled) {
|
||||
clk_disable_unprepare(res->vp);
|
||||
|
|
Loading…
Reference in New Issue