rk lcdc: if win not support scale, make sure dsp size equal to act size
authorhjc <hjc@rock-chips.com>
Mon, 9 Mar 2015 03:34:40 +0000 (11:34 +0800)
committerhjc <hjc@rock-chips.com>
Mon, 9 Mar 2015 04:30:37 +0000 (12:30 +0800)
Signed-off-by: hjc <hjc@rock-chips.com>
drivers/video/rockchip/lcdc/rk312x_lcdc.c
drivers/video/rockchip/lcdc/rk3288_lcdc.c

index e714c929a32bcc6c1698f4938fea195e40a7e4cd..86039500cd49b8843285b4c695e846ef424b78d7 100755 (executable)
@@ -472,8 +472,8 @@ static void lcdc_layer_update_regs(struct lcdc_device *lcdc_dev,
                                            WIN1_MST, win->area[0].y_addr);
                        } else {
                                lcdc_writel(lcdc_dev, WIN1_DSP_INFO_RK312X,
-                                           v_DSP_WIDTH(win->area[0].xact) |
-                                           v_DSP_HEIGHT(win->area[0].yact));
+                                           v_DSP_WIDTH(win->area[0].xsize) |
+                                           v_DSP_HEIGHT(win->area[0].ysize));
                                lcdc_writel(lcdc_dev, WIN1_DSP_ST_RK312X,
                                            v_DSP_STX(win->area[0].dsp_stx) |
                                            v_DSP_STY(win->area[0].dsp_sty));
@@ -1516,6 +1516,17 @@ static int rk312x_lcdc_set_par(struct rk_lcdc_driver *dev_drv, int win_id)
        spin_lock(&lcdc_dev->reg_lock);
        win->area[0].dsp_stx = win->area[0].xpos + screen->mode.left_margin +
                               screen->mode.hsync_len;
+       if (win_id == 1) {
+                if ((win->area[0].xact != win->area[0].xsize) ||
+                    (win->area[0].yact != win->area[0].ysize)) {
+                        pr_err("win[1],not support scale\n");
+                        pr_err("xact=%d,yact=%d,xsize=%d,ysize=%d\n",
+                                win->area[0].xact,win->area[0].yact,
+                                win->area[0].xsize,win->area[0].ysize);
+                        win->area[0].xsize = win->area[0].xact;
+                        win->area[0].ysize = win->area[0].yact;
+                    }
+       }
        if (screen->mode.vmode == FB_VMODE_INTERLACED) {
                win->area[0].ysize /= 2;
                win->area[0].dsp_sty = win->area[0].ypos / 2 +
index 3f5ced0dd7f814db2cb8e9581da3961e0a1e2500..062cbc1195b29e5d09c8c53d11ecebcb2a98b7a8 100755 (executable)
@@ -2282,6 +2282,16 @@ static int win2_set_par(struct lcdc_device *lcdc_dev,
                                        screen->mode.upper_margin +
                                        screen->mode.vsync_len;
                        }
+                       if ((win->area[i].xact != win->area[i].xsize) ||
+                           (win->area[i].yact != win->area[i].ysize)) {
+                                pr_err("win[%d]->area[%d],not support scale\n",
+                                        win->id, i);
+                                pr_err("xact=%d,yact=%d,xsize=%d,ysize=%d\n",
+                                        win->area[i].xact,win->area[i].yact,
+                                        win->area[i].xsize,win->area[i].ysize);
+                                win->area[i].xsize = win->area[i].xact;
+                                win->area[i].ysize = win->area[i].yact;
+                       }
                }
        }
        rk3288_win_2_3_reg_update(&lcdc_dev->driver,2);
@@ -2340,6 +2350,16 @@ static int win3_set_par(struct lcdc_device *lcdc_dev,
                                        screen->mode.vsync_len;
                        }
                }
+               if ((win->area[i].xact != win->area[i].xsize) ||
+                   (win->area[i].yact != win->area[i].ysize)) {
+                        pr_err("win[%d]->area[%d],not support scale\n",
+                                win->id, i);
+                        pr_err("xact=%d,yact=%d,xsize=%d,ysize=%d\n",
+                                win->area[i].xact,win->area[i].yact,
+                                win->area[i].xsize,win->area[i].ysize);
+                        win->area[i].xsize = win->area[i].xact;
+                        win->area[i].ysize = win->area[i].yact;
+               }
        }
        rk3288_win_2_3_reg_update(&lcdc_dev->driver,3);
        spin_unlock(&lcdc_dev->reg_lock);