diff options
author | Animesh Kishore <ankishore@nvidia.com> | 2012-03-14 16:55:12 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-03-20 16:24:27 -0700 |
commit | dd3b612801db7d5c6291ac13d66e1d994221746a (patch) | |
tree | ce2aabf8fc7cb7af69d85895b6a36b717915e83d /drivers/video | |
parent | 526ef97771c4b0e839bf5c6206f6c9d971f5f9dc (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.c | 14 |
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) |