diff options
-rw-r--r-- | drivers/video/tegra/dc/bandwidth.c | 6 | ||||
-rw-r--r-- | drivers/video/tegra/dc/dc_config.h | 25 | ||||
-rw-r--r-- | drivers/video/tegra/dc/window.c | 7 |
3 files changed, 26 insertions, 12 deletions
diff --git a/drivers/video/tegra/dc/bandwidth.c b/drivers/video/tegra/dc/bandwidth.c index 4989ba4d096c..181ae5a31af7 100644 --- a/drivers/video/tegra/dc/bandwidth.c +++ b/drivers/video/tegra/dc/bandwidth.c @@ -66,7 +66,7 @@ static void tegra_dc_set_latency_allowance(struct tegra_dc *dc, #if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC) /* tegra_dc_get_bandwidth() treats V filter windows as double * bandwidth, but LA has a seperate client for V filter */ - if (w->idx == 1 && win_use_v_filter(dc, w)) + if (w->idx == 1 && win_use_v_filter(dc, w, false)) bw /= 2; #endif @@ -211,7 +211,7 @@ static unsigned long tegra_dc_calc_win_bandwidth(struct tegra_dc *dc, bw *= tiled_windows_bw_multiplier; #if defined(CONFIG_ARCH_TEGRA_2x_SOC) || defined(CONFIG_ARCH_TEGRA_3x_SOC) - if (win_use_v_filter(dc, w)) + if (win_use_v_filter(dc, w, false)) bw *= 2; #endif @@ -220,7 +220,7 @@ static unsigned long tegra_dc_calc_win_bandwidth(struct tegra_dc *dc, f_h = max(in_h * 100 / w->out_h, 100u); bw *= f_w; bw /= 100; - if (win_use_v_filter(dc, w)) { + if (win_use_v_filter(dc, w, w->flags & TEGRA_WIN_FLAG_SCAN_COLUMN)) { bw *= f_h; bw /= 100; } diff --git a/drivers/video/tegra/dc/dc_config.h b/drivers/video/tegra/dc/dc_config.h index 0ef076c2d3e1..19cc71accc49 100644 --- a/drivers/video/tegra/dc/dc_config.h +++ b/drivers/video/tegra/dc/dc_config.h @@ -1,6 +1,7 @@ /* * drivers/video/tegra/dc/dc_config.c - * Copyright (c) 2010-2012, NVIDIA CORPORATION, All rights reserved. + * + * Copyright (c) 2010-2013, NVIDIA CORPORATION, All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -156,16 +157,26 @@ long *tegra_dc_parse_feature(struct tegra_dc *dc, int win_idx, int operation); void tegra_dc_feature_register(struct tegra_dc *dc); static inline bool win_use_v_filter(struct tegra_dc *dc, - const struct tegra_dc_win *win) + const struct tegra_dc_win *win, bool scan_column) { - return tegra_dc_feature_has_filter(dc, win->idx, HAS_V_FILTER) && - win->h.full != dfixed_const(win->out_h); + int has_filter; + + has_filter = tegra_dc_feature_has_filter(dc, win->idx, HAS_V_FILTER); + if (scan_column) + return has_filter && win->w.full != dfixed_const(win->out_h); + else + return has_filter && win->h.full != dfixed_const(win->out_h); } static inline bool win_use_h_filter(struct tegra_dc *dc, - const struct tegra_dc_win *win) + const struct tegra_dc_win *win, bool scan_column) { - return tegra_dc_feature_has_filter(dc, win->idx, HAS_H_FILTER) && - win->w.full != dfixed_const(win->out_w); + int has_filter; + + has_filter = tegra_dc_feature_has_filter(dc, win->idx, HAS_H_FILTER); + if (scan_column) + return has_filter && win->h.full != dfixed_const(win->out_w); + else + return has_filter && win->w.full != dfixed_const(win->out_w); } #endif diff --git a/drivers/video/tegra/dc/window.c b/drivers/video/tegra/dc/window.c index 58113ab652cb..987797aaa2a0 100644 --- a/drivers/video/tegra/dc/window.c +++ b/drivers/video/tegra/dc/window.c @@ -364,8 +364,8 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n) unsigned Bpp = tegra_dc_fmt_bpp(win->fmt) / 8; /* Bytes per pixel of bandwidth, used for dda_inc calculation */ unsigned Bpp_bw = Bpp * (yuvp ? 2 : 1); - const bool filter_h = win_use_h_filter(dc, win); - const bool filter_v = win_use_v_filter(dc, win); + bool filter_h; + bool filter_v; #if defined(CONFIG_TEGRA_DC_SCAN_COLUMN) scan_column = (win->flags & TEGRA_WIN_FLAG_SCAN_COLUMN); #endif @@ -395,6 +395,9 @@ int tegra_dc_update_windows(struct tegra_dc_win *windows[], int n) continue; } + filter_h = win_use_h_filter(dc, win, scan_column); + filter_v = win_use_v_filter(dc, win, scan_column); + tegra_dc_writel(dc, tegra_dc_fmt(win->fmt), DC_WIN_COLOR_DEPTH); tegra_dc_writel(dc, tegra_dc_fmt_byteorder(win->fmt), |