diff options
author | Jon Mayo <jmayo@nvidia.com> | 2011-07-07 18:34:12 -0700 |
---|---|---|
committer | Dan Willemsen <dwillemsen@nvidia.com> | 2011-11-30 21:47:42 -0800 |
commit | 42138dfbc2b47f803928f82c1841395c68c80270 (patch) | |
tree | c0e03592e3baf54c2d665d1423f1b76fd225b1a9 /drivers/video | |
parent | 0622ec5c0158daa485cb0bc0b3905a0997a32edc (diff) |
video: tegra: dc: only set supported filters
Not all windows are created equal, only set vertical or horizontal
filters when the window supports them.
Bug 850852
Original-Change-Id: I69b40ff47fd8ed8499857408c249ddd35299ae95
Reviewed-on: http://git-master/r/40132
Reviewed-by: Varun Colbert <vcolbert@nvidia.com>
Tested-by: Varun Colbert <vcolbert@nvidia.com>
Rebase-Id: R339412d8ca44cd3bbe69f4af8c9bdde32a6d56c7
Diffstat (limited to 'drivers/video')
-rw-r--r-- | drivers/video/tegra/dc/dc.c | 11 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc_priv.h | 4 |
2 files changed, 11 insertions, 4 deletions
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) |