video: rockchip: lcdc: 3368: fix interlace mode update lead to logical error
authorHuang Jiachai <hjc@rock-chips.com>
Wed, 11 Nov 2015 10:22:36 +0000 (18:22 +0800)
committerHuang Jiachai <hjc@rock-chips.com>
Thu, 17 Dec 2015 07:41:28 +0000 (15:41 +0800)
Change-Id: I01df39134171a24b4478d7e8b9a6447f2befde8a
Fixes: 05d226be7eb7 ("video: lcdc: judge interlace mode from vmode bit mask")
Signed-off-by: Huang Jiachai <hjc@rock-chips.com>
drivers/video/rockchip/lcdc/rk3368_lcdc.c

index 43cfdcaa4106841165d2e5bcc5dcce50fa470d27..a2259e52593440a237fd5954e5a4b8429701b400 100644 (file)
@@ -2893,7 +2893,7 @@ static int dsp_y_pos(int mirror_en, struct rk_screen *screen,
 
        if (screen->y_mirror && mirror_en)
                pr_err("not support both win and global mirror\n");
-       if (screen->mode.vmode & FB_VMODE_NONINTERLACED) {
+       if (!(screen->mode.vmode & FB_VMODE_INTERLACED)) {
                if ((!mirror_en) && (!screen->y_mirror))
                        pos = area->ypos + screen->mode.upper_margin +
                                screen->mode.vsync_len;
@@ -2901,7 +2901,7 @@ static int dsp_y_pos(int mirror_en, struct rk_screen *screen,
                        pos = screen->mode.yres - area->ypos -
                                area->ysize + screen->mode.upper_margin +
                                screen->mode.vsync_len;
-       } else if (screen->mode.vmode & FB_VMODE_INTERLACED) {
+       } else {
                pos = area->ypos / 2 + screen->mode.upper_margin +
                        screen->mode.vsync_len;
                area->ysize /= 2;
@@ -3099,7 +3099,7 @@ static int win_2_3_set_par(struct lcdc_device *lcdc_dev,
                                                  &win->area[i]);
                        if (((win->area[i].xact != win->area[i].xsize) ||
                             (win->area[i].yact != win->area[i].ysize)) &&
-                            (screen->mode.vmode & FB_VMODE_NONINTERLACED)) {
+                            !(screen->mode.vmode & FB_VMODE_INTERLACED)) {
                                pr_err("win[%d]->area[%d],not support scale\n",
                                       win->id, i);
                                pr_err("xact=%d,yact=%d,xsize=%d,ysize=%d\n",
@@ -4788,7 +4788,7 @@ static irqreturn_t rk3368_lcdc_isr(int irq, void *dev_id)
                }
                lcdc_dev->driver.vsync_info.timestamp = timestamp;
                wake_up_interruptible_all(&lcdc_dev->driver.vsync_info.wait);
-               if ((screen->mode.vmode & FB_VMODE_NONINTERLACED) ||
+               if (!(screen->mode.vmode & FB_VMODE_INTERLACED) ||
                    (line_scane_num >= dsp_vs_st_f1)) {
                        lcdc_dev->driver.vsync_info.timestamp = timestamp;
                        wake_up_interruptible_all(