summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-tegra/include/mach/dc.h2
-rw-r--r--drivers/video/tegra/dc/dc.c11
-rw-r--r--drivers/video/tegra/dc/dc_priv.h4
3 files changed, 13 insertions, 4 deletions
diff --git a/arch/arm/mach-tegra/include/mach/dc.h b/arch/arm/mach-tegra/include/mach/dc.h
index ebc38b5eca02..7c96dc89cc54 100644
--- a/arch/arm/mach-tegra/include/mach/dc.h
+++ b/arch/arm/mach-tegra/include/mach/dc.h
@@ -374,6 +374,8 @@ struct tegra_dc_win {
#define TEGRA_WIN_FLAG_INVERT_H (1 << 3)
#define TEGRA_WIN_FLAG_INVERT_V (1 << 4)
#define TEGRA_WIN_FLAG_TILED (1 << 5)
+#define TEGRA_WIN_FLAG_H_FILTER (1 << 6)
+#define TEGRA_WIN_FLAG_V_FILTER (1 << 7)
#define TEGRA_WIN_BLEND_FLAGS_MASK \
(TEGRA_WIN_FLAG_BLEND_PREMULT | TEGRA_WIN_FLAG_BLEND_COVERAGE)
diff --git a/drivers/video/tegra/dc/dc.c b/drivers/video/tegra/dc/dc.c
index a2cd916332c1..10768ac60aac 100644
--- a/drivers/video/tegra/dc/dc.c
+++ b/drivers/video/tegra/dc/dc.c
@@ -811,8 +811,6 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n)
return -EFAULT;
}
- tegra_dc_set_dynamic_emc(windows, n);
-
if (no_vsync)
tegra_dc_writel(dc, WRITE_MUX_ACTIVE | READ_MUX_ACTIVE, DC_CMD_STATE_ACCESS);
else
@@ -926,6 +924,13 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n)
else if (tegra_dc_fmt_bpp(win->fmt) < 24)
val |= COLOR_EXPAND;
+ /* only B and C have H filer, force it on if scaling */
+ if (win->idx != 0 && win->w != win->out_w)
+ win->flags |= TEGRA_WIN_FLAG_H_FILTER;
+ /* only B has V filter, set it if scaling */
+ if (win->idx == 1 && win->h != win->out_h)
+ win->flags |= TEGRA_WIN_FLAG_V_FILTER;
+
if (WIN_USE_H_FILTER(win))
val |= H_FILTER_ENABLE;
if (WIN_USE_V_FILTER(win))
@@ -950,6 +955,8 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n)
}
}
+ tegra_dc_set_dynamic_emc(windows, n);
+
tegra_dc_writel(dc, update_mask << 8, DC_CMD_STATE_CONTROL);
if (!no_vsync) {
diff --git a/drivers/video/tegra/dc/dc_priv.h b/drivers/video/tegra/dc/dc_priv.h
index efc2b972a342..1e9b17fe1769 100644
--- a/drivers/video/tegra/dc/dc_priv.h
+++ b/drivers/video/tegra/dc/dc_priv.h
@@ -28,8 +28,8 @@
#define WIN_IS_TILED(win) ((win)->flags & TEGRA_WIN_FLAG_TILED)
#define WIN_IS_ENABLED(win) ((win)->flags & TEGRA_WIN_FLAG_ENABLED)
-#define WIN_USE_V_FILTER(win) ((win)->h != (win)->out_h)
-#define WIN_USE_H_FILTER(win) ((win)->w != (win)->out_w)
+#define WIN_USE_V_FILTER(win) ((win)->flags & TEGRA_WIN_FLAG_V_FILTER)
+#define WIN_USE_H_FILTER(win) ((win)->flags & TEGRA_WIN_FLAG_H_FILTER)
#define NEED_UPDATE_EMC_ON_EVERY_FRAME (windows_idle_detection_time == 0)