From 4a78789776f879eb9eeec10d1768aaa0143d5974 Mon Sep 17 00:00:00 2001 From: Liu Ying Date: Mon, 11 Jun 2012 09:06:50 +0800 Subject: [PATCH] --- yaml --- r: 321021 b: refs/heads/master c: 41a490ec019fd172f5d0356e01d8101b4708aee2 h: refs/heads/master i: 321019: f3a6530d8cd6e3f2ab605282adff5e1140c626b6 v: v3 --- [refs] | 2 +- trunk/drivers/video/mx3fb.c | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/[refs] b/[refs] index 5aaf588eb06f..a97d50c5759f 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 6cd77e00c00c5da3b6f8546dcb6dfac9611ca10b +refs/heads/master: 41a490ec019fd172f5d0356e01d8101b4708aee2 diff --git a/trunk/drivers/video/mx3fb.c b/trunk/drivers/video/mx3fb.c index da1d052a18a5..c89f8a8d36d2 100644 --- a/trunk/drivers/video/mx3fb.c +++ b/trunk/drivers/video/mx3fb.c @@ -698,6 +698,26 @@ static void mx3fb_dma_done(void *arg) complete(&mx3_fbi->flip_cmpl); } +static bool mx3fb_must_set_par(struct fb_info *fbi) +{ + struct mx3fb_info *mx3_fbi = fbi->par; + struct fb_var_screeninfo old_var = mx3_fbi->cur_var; + struct fb_var_screeninfo new_var = fbi->var; + + if ((fbi->var.activate & FB_ACTIVATE_FORCE) && + (fbi->var.activate & FB_ACTIVATE_MASK) == FB_ACTIVATE_NOW) + return true; + + /* + * Ignore xoffset and yoffset update, + * because pan display handles this case. + */ + old_var.xoffset = new_var.xoffset; + old_var.yoffset = new_var.yoffset; + + return !!memcmp(&old_var, &new_var, sizeof(struct fb_var_screeninfo)); +} + static int __set_par(struct fb_info *fbi, bool lock) { u32 mem_len, cur_xoffset, cur_yoffset; @@ -819,7 +839,7 @@ static int mx3fb_set_par(struct fb_info *fbi) mutex_lock(&mx3_fbi->mutex); - ret = __set_par(fbi, true); + ret = mx3fb_must_set_par(fbi) ? __set_par(fbi, true) : 0; mutex_unlock(&mx3_fbi->mutex);