ps3fb: Fix spurious mode change failures
Subsystems (3)
PATCH 5/12 ps3fb: Fix spurious mode change failures
From: Geert Uytterhoeven <[email protected]>
ps3fb: Add a `mode' parameter to ps3fb_get_res_table(), as in some cases it should check the full-screen flag of the _new_ video mode instead of the current video mode.
This bug caused spurious mode change failures when switching between fullscreen and non-fullscreen modes using fbset, while ps3-video-mode worked fine.
Signed-off-by Geert Uytterhoeven <[email protected]>
CC Geoff Levand <[email protected]>
Signed-off-by Antonino Daplas <[email protected]>
---
drivers/video/ps3fb.c | 15 ++++++++------- 1 files changed, 8 insertions(+), 7 deletions(-)
drivers/video/ps3fb.c +8 -7
@@ -303,13 +303,13 @@ module_param(ps3fb_mode, int, 0);static char *mode_option__devinitdata ; -static int ps3fb_get_res_table (u32 xres,u32 yres) +static int ps3fb_get_res_table (u32 xres,u32 yres,int mode) {int full_mode;unsigned int i;u32 x, y, f; - full_mode = (ps3fb_mode &PS3FB_FULL_MODE_BIT ) ?PS3FB_RES_FULL :0 ; + full_mode = (mode &PS3FB_FULL_MODE_BIT ) ?PS3FB_RES_FULL :0 ;for (i =0 ;; i++) { x = ps3fb_res[i].xres; y = ps3fb_res[i].yres;
@@ -527,7 +527,7 @@ static int ps3fb_check_var(struct fb_var }/* Memory limit */ - i =ps3fb_get_res_table (var->xres, var->yres); + i =ps3fb_get_res_table (var->xres, var->yres, mode);if (ps3fb_res[i].xres*ps3fb_res[i].yres*BPP > ps3fb_videomemory.size) {DPRINTK ("Not enough memory\n" );return -ENOMEM ;
@@ -553,13 +553,14 @@ static int ps3fb_set_par(struct fb_infoDPRINTK ("xres:%d xv:%d yres:%d yv:%d clock:%d\n" , info->var.xres, info->var.xres_virtual, info->var.yres, info->var.yres_virtual, info->var.pixclock); - i =ps3fb_get_res_table (info->var.xres, info->var.yres); - ps3fb.res_index = i; mode =ps3fb_find_mode (&info->var, &info->fix.line_length);if (!mode)return -EINVAL ; + i =ps3fb_get_res_table (info->var.xres, info->var.yres, mode); + ps3fb.res_index = i; + offset =FB_OFF (i) +VP_OFF (i); info->fix.smem_len = ps3fb_videomemory.size - offset; info->screen_base = (char __iomem *)ps3fb.xdr_ea + offset;
@@ -610,7 +611,7 @@ static int ps3fb_mmap(struct fb_info *inunsigned long size, offset;int i; - i =ps3fb_get_res_table (info->var.xres, info->var.yres); + i =ps3fb_get_res_table (info->var.xres, info->var.yres, ps3fb_mode);if (i ==-1 )return -EINVAL ;
@@ -999,7 +1000,7 @@ static int __devinit ps3fb_probe(structif (ps3fb_mode >0 && !ps3av_video_mode2res (ps3fb_mode, &xres, &yres)) { - ps3fb.res_index =ps3fb_get_res_table (xres, yres); + ps3fb.res_index =ps3fb_get_res_table (xres, yres, ps3fb_mode);DPRINTK ("res_index:%d\n" , ps3fb.res_index); }else ps3fb.res_index =GPU_RES_INDEX ;
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/