summaryrefslogtreecommitdiff
path: root/drivers/video/tegra/dc/dc.c
diff options
context:
space:
mode:
authorMichael Frydrych <mfrydrych@nvidia.com>2014-04-23 09:15:07 +0300
committerRaghunandan Bayes <rbayes@nvidia.com>2014-04-25 00:07:37 -0700
commit73896aaf41ac24c5d5b31cdbcf8aff4f8f659a3e (patch)
tree6d825a7181e8578b2c820467b85fc7bfe21f9ab8 /drivers/video/tegra/dc/dc.c
parent458c26866f9e0db96a154e0a8c0a0b4b097d55b3 (diff)
video: tegra: blank dc windows during dc releasedaily-2014.05.06.0_rel-roth-r4-partner
Window owned by a process should be blanked when the process releases dc or any individual window it has owned. The buffers lastly displayed on those windows will be unpinned. bug 1490686 bug 1467689 Change-Id: I3b3614a99b9598b7d432f08c4a95d8050a4ef99e Signed-off-by: Michael Frydrych <mfrydrych@nvidia.com> Reviewed-on: http://git-master/r/400894 GVS: Gerrit_Virtual_Submit Reviewed-by: David Dastous St Hilaire <ddastoussthi@nvidia.com> Tested-by: David Dastous St Hilaire <ddastoussthi@nvidia.com> Reviewed-by: Jon Mayo <jmayo@nvidia.com>
Diffstat (limited to 'drivers/video/tegra/dc/dc.c')
-rw-r--r--drivers/video/tegra/dc/dc.c27
1 files changed, 18 insertions, 9 deletions
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index 728fb555344f..f56c007d5dab 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -4,7 +4,7 @@
* Copyright (C) 2010 Google, Inc.
* Author: Erik Gilling <konkers@android.com>
*
- * Copyright (c) 2010-2013, NVIDIA CORPORATION, All rights reserved.
+ * Copyright (c) 2010-2014, NVIDIA CORPORATION, All rights reserved.
*
* This software is licensed under the terms of the GNU General Public
* License version 2, as published by the Free Software Foundation, and
@@ -2261,19 +2261,28 @@ bool tegra_dc_stats_get(struct tegra_dc *dc)
return true;
}
-/* make the screen blank by disabling all windows */
-void tegra_dc_blank(struct tegra_dc *dc)
+/* blank selected windows by disabling them */
+void tegra_dc_blank(struct tegra_dc *dc, unsigned windows)
{
struct tegra_dc_win *dcwins[DC_N_WINDOWS];
unsigned i;
+ unsigned long int blank_windows;
+ int nr_win = 0;
- for (i = 0; i < DC_N_WINDOWS; i++) {
- dcwins[i] = tegra_dc_get_window(dc, i);
- dcwins[i]->flags &= ~TEGRA_WIN_FLAG_ENABLED;
+ if (!windows)
+ return;
+
+ blank_windows = windows;
+ for_each_set_bit(i, &blank_windows, DC_N_WINDOWS) {
+ dcwins[nr_win] = tegra_dc_get_window(dc, i);
+ if (!dcwins[nr_win])
+ continue;
+ dcwins[nr_win++]->flags &= ~TEGRA_WIN_FLAG_ENABLED;
}
- tegra_dc_update_windows(dcwins, DC_N_WINDOWS);
- tegra_dc_sync_windows(dcwins, DC_N_WINDOWS);
+ tegra_dc_update_windows(dcwins, nr_win);
+ tegra_dc_sync_windows(dcwins, nr_win);
+ tegra_dc_program_bandwidth(dc, true);
}
static void _tegra_dc_disable(struct tegra_dc *dc)
@@ -2854,7 +2863,7 @@ static void tegra_dc_shutdown(struct platform_device *ndev)
if (!dc || !dc->enabled)
return;
- tegra_dc_blank(dc);
+ tegra_dc_blank(dc, BLANK_ALL);
tegra_dc_disable(dc);
}