diff options
-rw-r--r-- | arch/arm/mach-tegra/include/mach/dc.h | 2 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 11 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc_priv.h | 4 |
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) |