Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=c95344a557099f4e4a9fd05b6145a72541b2158a
Commit:     c95344a557099f4e4a9fd05b6145a72541b2158a
Parent:     8ca0bf750b7d9b7e859f2f40516b914827e7afd8
Author:     Geert Uytterhoeven <[EMAIL PROTECTED]>
AuthorDate: Tue Oct 16 01:29:25 2007 -0700
Committer:  Linus Torvalds <[EMAIL PROTECTED]>
CommitDate: Tue Oct 16 09:43:19 2007 -0700

    ps3fb: Fix spurious mode change failures
    
    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]>
    Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
    Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
---
 drivers/video/ps3fb.c |   15 ++++++++-------
 1 files changed, 8 insertions(+), 7 deletions(-)

diff --git a/drivers/video/ps3fb.c b/drivers/video/ps3fb.c
index e0beb97..c9037e9 100644
--- a/drivers/video/ps3fb.c
+++ b/drivers/video/ps3fb.c
@@ -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_screeninfo *var, 
struct fb_info *info)
        }
 
        /* 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_info *info)
        DPRINTK("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 *info, struct 
vm_area_struct *vma)
        unsigned 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(struct 
ps3_system_bus_device *dev)
 
        if (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;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to