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

Commit 38000dbb authored by Gustavo Padovan's avatar Gustavo Padovan Committed by Inki Dae
Browse files

drm/exynos: add error messages if clks failed to get enabled



Check error and call DRM_ERROR if clk_prepare_enable() fails.

Signed-off-by: default avatarGustavo Padovan <gustavo.padovan@collabora.co.uk>
Signed-off-by: default avatarInki Dae <inki.dae@samsung.com>
parent 1e5507ce
Loading
Loading
Loading
Loading
+24 −4
Original line number Diff line number Diff line
@@ -606,6 +606,7 @@ static void decon_init(struct decon_context *ctx)
static void decon_enable(struct exynos_drm_crtc *crtc)
{
	struct decon_context *ctx = crtc->ctx;
	int ret;

	if (!ctx->suspended)
		return;
@@ -614,10 +615,29 @@ static void decon_enable(struct exynos_drm_crtc *crtc)

	pm_runtime_get_sync(ctx->dev);

	clk_prepare_enable(ctx->pclk);
	clk_prepare_enable(ctx->aclk);
	clk_prepare_enable(ctx->eclk);
	clk_prepare_enable(ctx->vclk);
	ret = clk_prepare_enable(ctx->pclk);
	if (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the pclk [%d]\n", ret);
		return;
	}

	ret = clk_prepare_enable(ctx->aclk);
	if (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the aclk [%d]\n", ret);
		return;
	}

	ret = clk_prepare_enable(ctx->eclk);
	if  (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the eclk [%d]\n", ret);
		return;
	}

	ret = clk_prepare_enable(ctx->vclk);
	if  (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the vclk [%d]\n", ret);
		return;
	}

	decon_init(ctx);

+12 −2
Original line number Diff line number Diff line
@@ -808,6 +808,7 @@ static void fimd_apply(struct fimd_context *ctx)
static void fimd_enable(struct exynos_drm_crtc *crtc)
{
	struct fimd_context *ctx = crtc->ctx;
	int ret;

	if (!ctx->suspended)
		return;
@@ -816,8 +817,17 @@ static void fimd_enable(struct exynos_drm_crtc *crtc)

	pm_runtime_get_sync(ctx->dev);

	clk_prepare_enable(ctx->bus_clk);
	clk_prepare_enable(ctx->lcd_clk);
	ret = clk_prepare_enable(ctx->bus_clk);
	if (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the bus clk [%d]\n", ret);
		return;
	}

	ret = clk_prepare_enable(ctx->lcd_clk);
	if  (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the lcd clk [%d]\n", ret);
		return;
	}

	/* if vblank was enabled status, enable it again. */
	if (test_and_clear_bit(0, &ctx->irq_flags))
+26 −5
Original line number Diff line number Diff line
@@ -1031,6 +1031,7 @@ static void mixer_enable(struct exynos_drm_crtc *crtc)
{
	struct mixer_context *ctx = crtc->ctx;
	struct mixer_resources *res = &ctx->mixer_res;
	int ret;

	mutex_lock(&ctx->mixer_mutex);
	if (ctx->powered) {
@@ -1042,12 +1043,32 @@ static void mixer_enable(struct exynos_drm_crtc *crtc)

	pm_runtime_get_sync(ctx->dev);

	clk_prepare_enable(res->mixer);
	clk_prepare_enable(res->hdmi);
	ret = clk_prepare_enable(res->mixer);
	if (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the mixer clk [%d]\n", ret);
		return;
	}
	ret = clk_prepare_enable(res->hdmi);
	if (ret < 0) {
		DRM_ERROR("Failed to prepare_enable the hdmi clk [%d]\n", ret);
		return;
	}
	if (ctx->vp_enabled) {
		clk_prepare_enable(res->vp);
		if (ctx->has_sclk)
			clk_prepare_enable(res->sclk_mixer);
		ret = clk_prepare_enable(res->vp);
		if (ret < 0) {
			DRM_ERROR("Failed to prepare_enable the vp clk [%d]\n",
				  ret);
			return;
		}
		if (ctx->has_sclk) {
			ret = clk_prepare_enable(res->sclk_mixer);
			if (ret < 0) {
				DRM_ERROR("Failed to prepare_enable the " \
					   "sclk_mixer clk [%d]\n",
					  ret);
				return;
			}
		}
	}

	mutex_lock(&ctx->mixer_mutex);