summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/video/tegra/dc/dc.c12
1 files changed, 11 insertions, 1 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index 8b3bf041a7df..113e64c59563 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -2101,8 +2101,11 @@ static void tegra_dc_underflow_handler(struct tegra_dc *dc)
dc->windows[i].underflows++;
#ifdef CONFIG_ARCH_TEGRA_2x_SOC
- if (dc->windows[i].underflows > 4)
+ if (dc->windows[i].underflows > 4) {
schedule_work(&dc->reset_work);
+ /* reset counter */
+ dc->windows[i].underflows = 0;
+ }
#endif
} else {
dc->windows[i].underflows = 0;
@@ -2734,6 +2737,13 @@ static void tegra_dc_reset_worker(struct work_struct *work)
_tegra_dc_controller_reset_enable(dc);
dc->enabled = true;
+
+ /* reopen host read bus */
+ val = tegra_dc_readl(dc, DC_CMD_CONT_SYNCPT_VSYNC);
+ val &= ~(0x00000100);
+ val |= 0x100;
+ tegra_dc_writel(dc, val, DC_CMD_CONT_SYNCPT_VSYNC);
+
unlock:
mutex_unlock(&dc->lock);
mutex_unlock(&shared_lock);