From: hjc Date: Mon, 9 Mar 2015 03:34:40 +0000 (+0800) Subject: rk lcdc: if win not support scale, make sure dsp size equal to act size X-Git-Tag: firefly_0821_release~4263^2~15 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=b4c7e9fd09714bf676bba07676d9bb51c51615d0;p=firefly-linux-kernel-4.4.55.git rk lcdc: if win not support scale, make sure dsp size equal to act size Signed-off-by: hjc --- diff --git a/drivers/video/rockchip/lcdc/rk312x_lcdc.c b/drivers/video/rockchip/lcdc/rk312x_lcdc.c index e714c929a32b..86039500cd49 100755 --- a/drivers/video/rockchip/lcdc/rk312x_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk312x_lcdc.c @@ -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 + diff --git a/drivers/video/rockchip/lcdc/rk3288_lcdc.c b/drivers/video/rockchip/lcdc/rk3288_lcdc.c index 3f5ced0dd7f8..062cbc1195b2 100755 --- a/drivers/video/rockchip/lcdc/rk3288_lcdc.c +++ b/drivers/video/rockchip/lcdc/rk3288_lcdc.c @@ -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);