[PATCH -v2] drm/exynos: do not disable hdmi clocks for exynos5420

Gustavo Padovan gustavo at padovan.org
Mon Feb 2 06:26:41 PST 2015


From: Prathyush K <prathyush.k at samsung.com>

When VPLL clock of less than 140 MHz was used and all the three clocks -
hdmiphy, hdmi, sclk_hdmi are disabled, the system hangs during S2R when
HDMI is connected. Since we want to use a vpll clock of 70.5 MHz, we
cannot disable these 3 clocks before suspending.  This patch add an extra
clk enable/disable of hdmi and sclk_hdmi outside of the pm ops so these
clocks are always enabled. Now system suspends and resumes with HDMI
connected with VPLL set at 70.5 MHz.

This is not the best solution, but it inhibits a crash while we figure out
what is the correct solution for this issue.

Signed-off-by: Prathyush K <prathyush.k at samsung.com>
Signed-off-by: Andrew Bresticker <abrestic at chromium.org>
Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
---
 drivers/gpu/drm/exynos/exynos_hdmi.c | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)

diff --git a/drivers/gpu/drm/exynos/exynos_hdmi.c b/drivers/gpu/drm/exynos/exynos_hdmi.c
index 6aa0d65..c6baf64 100644
--- a/drivers/gpu/drm/exynos/exynos_hdmi.c
+++ b/drivers/gpu/drm/exynos/exynos_hdmi.c
@@ -2254,6 +2254,20 @@ static int hdmi_resources_init(struct hdmi_context *hdata)
 	} else
 		res->reg_hdmi_en = NULL;
 
+	/*
+	 * For these two clocks exynos5420 fails to suspend if VPLL clock of
+	 * 70.5 MHz is used and these clocks are disabled before suspend. So
+	 * enable them here.
+	 * Note that this will keep the clocks enabled for the entire
+	 * lifetime of the driver and waste energy when it is suspended.
+	 * However it prevents the system crash until a better solution is
+	 * found
+	 */
+	if (of_device_is_compatible(dev->of_node, "samsung,exynos5420-hdmi")) {
+		clk_prepare_enable(res->sclk_hdmi);
+		clk_prepare_enable(res->hdmi);
+	}
+
 	return ret;
 fail:
 	DRM_ERROR("HDMI resource init - failed\n");
@@ -2516,6 +2530,12 @@ static int hdmi_remove(struct platform_device *pdev)
 	if (hdata->res.reg_hdmi_en)
 		regulator_disable(hdata->res.reg_hdmi_en);
 
+	if (of_device_is_compatible(hdata->dev->of_node,
+				    "samsung,exynos5420-hdmi")) {
+		clk_disable_unprepare(hdata->res.sclk_hdmi);
+		clk_disable_unprepare(hdata->res.hdmi);
+	}
+
 	if (hdata->hdmiphy_port)
 		put_device(&hdata->hdmiphy_port->dev);
 	put_device(&hdata->ddc_adpt->dev);
-- 
1.9.3



More information about the dri-devel mailing list