diff options
author | Kevin Huang <kevinh@nvidia.com> | 2011-07-15 02:31:19 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:47:53 -0800 |
commit | b4445c0a7c94ae7b009bf7807ddafadceae8a9df (patch) | |
tree | 7e86442c40cfdd8b30b4d0ce37714affe804ef46 | |
parent | 23c729fd88bef942beb2d1b807a483dee5e848e8 (diff) |
video: tegra: dsi: Fix DC & DSI clock issue.
- Balance the clock disable/enable in DSI module to fix the issue that
DC can't be disabled in suspend.
Bug 847254
Original-Change-Id: I1beaab6d0ba96e9b886526c1f07107b8d27bcf94
Reviewed-on: http://git-master/r/41180
Reviewed-by: Kevin Huang <kevinh@nvidia.com>
Tested-by: Kevin Huang <kevinh@nvidia.com>
Reviewed-by: Chih-Lung Huang <lhuang@nvidia.com>
Tested-by: Chih-Lung Huang <lhuang@nvidia.com>
Reviewed-by: Jonathan Mayo <jmayo@nvidia.com>
Rebase-Id: Rfa9c3d7db30920baaea79bc7d05f3a92404e18ec
-rw-r--r-- | drivers/video/tegra/dc/dsi.c | 10 |
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/video/tegra/dc/dsi.c b/drivers/video/tegra/dc/dsi.c index 87de2e11f204..f395c60af46d 100644 --- a/drivers/video/tegra/dc/dsi.c +++ b/drivers/video/tegra/dc/dsi.c @@ -97,6 +97,7 @@ struct tegra_dc_dsi_data { struct clk *dc_clk; struct clk *dsi_clk; + bool clk_ref; struct mutex lock; @@ -417,6 +418,7 @@ static void tegra_dsi_init_sw(struct tegra_dc *dc, dsi->controller_index = dc->ndev->id; dsi->ulpm = false; dsi->enabled = false; + dsi->clk_ref = false; dsi->dsi_control_val = DSI_CONTROL_VIRTUAL_CHANNEL(dsi->info.virtual_channel) | @@ -465,7 +467,6 @@ static void tegra_dsi_init_sw(struct tegra_dc *dc, dsi->target_hs_clk_khz); dsi->controller_index = dc->ndev->id; - dsi->ulpm = false; #if DSI_USE_SYNC_POINTS dsi->syncpt_id = NVSYNCPT_DSI; @@ -901,8 +902,6 @@ static void tegra_dsi_set_dc_clk(struct tegra_dc *dc, val = PIXEL_CLK_DIVIDER_PCD1 | SHIFT_CLK_DIVIDER(shift_clk_div_register); tegra_dc_writel(dc, val, DC_DISP_DISP_CLOCK_CONTROL); - - clk_enable(dsi->dc_clk); } static void tegra_dsi_set_dsi_clk(struct tegra_dc *dc, @@ -919,6 +918,10 @@ static void tegra_dsi_set_dsi_clk(struct tegra_dc *dc, dc->mode.pclk = clk*1000; tegra_dc_setup_clk(dc, dsi->dsi_clk); + if (dsi->clk_ref == true) + clk_disable(dsi->dsi_clk); + else + dsi->clk_ref = true; clk_enable(dsi->dsi_clk); tegra_periph_reset_deassert(dsi->dsi_clk); @@ -2123,6 +2126,7 @@ static void tegra_dc_dsi_suspend(struct tegra_dc *dc) dsi->enabled = false; clk_disable(dsi->dsi_clk); + dsi->clk_ref = false; fail: mutex_unlock(&dsi->lock); tegra_dc_io_end(dc); |