Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -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:

+9 −0
Original line number Diff line number Diff line
@@ -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);