Skip to content

Commit

Permalink
drm/rockchip: fix clk enable disable mismatch in vop_crtc_mode_set
Browse files Browse the repository at this point in the history
The function disables the dclk at the beginning, so don't simply return
when an error happens, but instead enable the clock again, so that
enable and disable calls are balanced.

ret_clk is introduced to hold the clk_enable result and not mangle the
original error code.

Signed-off-by: Heiko Stuebner <heiko@sntech.de>
Reviewed-by: Daniel Kurtz <djkurtz@chromium.org>
  • Loading branch information
Heiko Stuebner authored and Mark Yao committed Apr 3, 2015
1 parent 502e95c commit 7f53fbb
Showing 1 changed file with 10 additions and 8 deletions.
18 changes: 10 additions & 8 deletions drivers/gpu/drm/rockchip/rockchip_drm_vop.c
Original file line number Diff line number Diff line change
Expand Up @@ -893,7 +893,7 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,
u16 vsync_len = adjusted_mode->vsync_end - adjusted_mode->vsync_start;
u16 vact_st = adjusted_mode->vtotal - adjusted_mode->vsync_start;
u16 vact_end = vact_st + vdisplay;
int ret;
int ret, ret_clk;
uint32_t val;

/*
Expand All @@ -915,7 +915,8 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,
default:
DRM_ERROR("unsupport connector_type[%d]\n",
vop->connector_type);
return -EINVAL;
ret = -EINVAL;
goto out;
};
VOP_CTRL_SET(vop, out_mode, vop->connector_out_mode);

Expand All @@ -938,7 +939,7 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,

ret = vop_crtc_mode_set_base(crtc, x, y, fb);
if (ret)
return ret;
goto out;

/*
* reset dclk, take all mode config affect, so the clk would run in
Expand All @@ -949,13 +950,14 @@ static int vop_crtc_mode_set(struct drm_crtc *crtc,
reset_control_deassert(vop->dclk_rst);

clk_set_rate(vop->dclk, adjusted_mode->clock * 1000);
ret = clk_enable(vop->dclk);
if (ret < 0) {
dev_err(vop->dev, "failed to enable dclk - %d\n", ret);
return ret;
out:
ret_clk = clk_enable(vop->dclk);
if (ret_clk < 0) {
dev_err(vop->dev, "failed to enable dclk - %d\n", ret_clk);
return ret_clk;
}

return 0;
return ret;
}

static void vop_crtc_commit(struct drm_crtc *crtc)
Expand Down

0 comments on commit 7f53fbb

Please sign in to comment.