summaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authorAnimesh Kishore <ankishore@nvidia.com>2012-03-14 16:55:12 +0530
committerSimone Willett <swillett@nvidia.com>2012-03-20 16:24:27 -0700
commitdd3b612801db7d5c6291ac13d66e1d994221746a (patch)
treece2aabf8fc7cb7af69d85895b6a36b717915e83d /drivers/video
parent526ef97771c4b0e839bf5c6206f6c9d971f5f9dc (diff)
video: tegra: dsi: Clear host trigger bit explicitly on fifo empty
dsi HW does not clear host trigger bit automatically on dsi interface disable if host fifo is empty. This leads to hang. Clearing the bit explicitly. Bug 930453 Change-Id: Id24359dc274f187f8ac634ad838ef4a6a29a6a5e Signed-off-by: Animesh Kishore <ankishore@nvidia.com> Reviewed-on: http://git-master/r/90043 Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com> Reviewed-by: Automatic_Commit_Validation_User
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/tegra/dc/dsi.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/video/tegra/dc/dsi.c b/drivers/video/tegra/dc/dsi.c
index f76852fa4fac..c33d6e0a58b3 100644
--- a/drivers/video/tegra/dc/dsi.c
+++ b/drivers/video/tegra/dc/dsi.c
@@ -1707,6 +1707,9 @@ fail:
static void tegra_dsi_soft_reset(struct tegra_dc_dsi_data *dsi)
{
+ u32 trigger;
+ u32 status;
+
tegra_dsi_writel(dsi,
DSI_POWER_CONTROL_LEG_DSI_ENABLE(TEGRA_DSI_DISABLE),
DSI_POWER_CONTROL);
@@ -1718,6 +1721,17 @@ static void tegra_dsi_soft_reset(struct tegra_dc_dsi_data *dsi)
DSI_POWER_CONTROL);
/* stabilization delay */
udelay(300);
+
+ /* dsi HW does not clear host trigger bit automatically
+ * on dsi interface disable if host fifo is empty
+ */
+ trigger = tegra_dsi_readl(dsi, DSI_TRIGGER);
+ status = tegra_dsi_readl(dsi, DSI_STATUS);
+ if (trigger & DSI_TRIGGER_HOST_TRIGGER(0x1) &&
+ status & DSI_STATUS_IDLE(0x1)) {
+ trigger &= ~(DSI_TRIGGER_HOST_TRIGGER(0x1));
+ tegra_dsi_writel(dsi, trigger, DSI_TRIGGER);
+ }
}
static void tegra_dsi_reset_read_count(struct tegra_dc_dsi_data *dsi)