]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
video: tegra: dc: ignore invalid windows
authorJon Mayo <jmayo@nvidia.com>
Tue, 5 Nov 2013 20:52:05 +0000 (12:52 -0800)
committerJon Mayo <jmayo@nvidia.com>
Thu, 7 Nov 2013 02:47:12 +0000 (18:47 -0800)
Walk through valid_windows bitmask to skip over invalid windows.
Mark invalid windows with a flag for easy checking.

Change-Id: Idda005b57ca8503462b01ef1193c993a73432e18
Signed-off-by: Jon Mayo <jmayo@nvidia.com>
Reviewed-on: http://git-master/r/326796
Reviewed-by: Automatic_Commit_Validation_User
GVS: Gerrit_Virtual_Submit

arch/arm/mach-tegra/include/mach/dc.h
drivers/video/tegra/dc/dc.c
drivers/video/tegra/dc/ext/dev.c

index 1f0ccfbc7a8976487e23c944030eac0bb3165247..ae942dbefc76915a03d943e1835f33c13ebdd9fc 100644 (file)
@@ -678,6 +678,7 @@ struct tegra_dc_win {
 #define TEGRA_WIN_FLAG_SCAN_COLUMN     (1 << 9)
 #define TEGRA_WIN_FLAG_INTERLACE       (1 << 10)
 #define TEGRA_WIN_FLAG_FB              (1 << 11)
+#define TEGRA_WIN_FLAG_INVALID         (1 << 31) /* window does not exist. */
 
 #define TEGRA_WIN_BLEND_FLAGS_MASK \
        (TEGRA_WIN_FLAG_BLEND_PREMULT | TEGRA_WIN_FLAG_BLEND_COVERAGE)
index aa3d6ff137e542c15e9025615b50a29bf0cf8886..cc2c5d85ac7023f5c6f387660b3107926fef2f70 100644 (file)
@@ -978,7 +978,7 @@ EXPORT_SYMBOL(tegra_dc_get_dc);
 
 struct tegra_dc_win *tegra_dc_get_window(struct tegra_dc *dc, unsigned win)
 {
-       if (win >= dc->n_windows)
+       if (win >= DC_N_WINDOWS || !test_bit(win, &dc->valid_windows))
                return NULL;
 
        return &dc->windows[win];
@@ -2790,9 +2790,11 @@ static int tegra_dc_probe(struct platform_device *ndev)
        tegra_dc_init_lut_defaults(&dc->fb_lut);
 
        dc->n_windows = DC_N_WINDOWS;
-       for (i = 0; i < dc->n_windows; i++) {
+       for (i = 0; i < DC_N_WINDOWS; i++) {
                struct tegra_dc_win *win = &dc->windows[i];
                struct tegra_dc_win *tmp_win = &dc->tmp_wins[i];
+               if (!test_bit(win, &dc->valid_windows))
+                       win->flags |= TEGRA_WIN_FLAG_INVALID;
                win->idx = i;
                win->dc = dc;
                tmp_win->idx = i;
index 7b6092f3a98510a28d7baa8c3aa2f676dbd8a7d2..9042090c273f1b4e27666916384b70e55a56ca13 100644 (file)
@@ -975,6 +975,8 @@ static int tegra_dc_ext_negotiate_bw(struct tegra_dc_ext_user *user,
                return -1;
 
        for (i = 0; i < win_num; i++) {
+               int idx = wins[i].index;
+
                ret = tegra_dc_ext_pin_window(user, wins[i].buff_id,
                                              &handle, &phys_addr);
                if (ret)
@@ -985,13 +987,13 @@ static int tegra_dc_ext_negotiate_bw(struct tegra_dc_ext_user *user,
                                handle->sgt, DMA_TO_DEVICE);
                        dma_buf_put(handle->buf);
                        kfree(handle);
-                       tegra_dc_ext_set_windowattr_basic(&dc->tmp_wins[i],
+                       tegra_dc_ext_set_windowattr_basic(&dc->tmp_wins[idx],
                                                          &wins[i]);
                }
                else {
                        dc->tmp_wins[i].flags = 0;
                }
-               dc_wins[i] = &dc->tmp_wins[i];
+               dc_wins[i] = &dc->tmp_wins[idx];
        }
 
        ret = tegra_dc_bandwidth_negotiate_bw(dc, dc_wins, win_num);