From: Adam Jackson <[email protected]>

So on RHEL5 anaconda sets an xorg.conf with a fixed 800x600 mode in it,
we run radeonfb and fbdev since ati won't work in userspace due to domain
issues in the older codebase.

On certain pseries blades the built-in KVM can't accept an 800x600-43 mode,
it requires the 800x600-60 mode, so we have to have the kernel radeonfb
driver reject the 800x600-43 mode when it sees it. However then fbdev
doesn't try any of the other 800x600 modes in the modelist, and we end up
getting a default 640x480 mode we don't want.

This patch changes the mode validation loop to continue on with the other modes
that match to find one that works.

v2: move code around to avoid extra loop, after comment from Jamey.

Signed-off-by: Dave Airlie <[email protected]>
---
 hw/xfree86/fbdevhw/fbdevhw.c |   21 +++++++++++++--------
 1 files changed, 13 insertions(+), 8 deletions(-)

diff --git a/hw/xfree86/fbdevhw/fbdevhw.c b/hw/xfree86/fbdevhw/fbdevhw.c
index dee731b..7bd409e 100644
--- a/hw/xfree86/fbdevhw/fbdevhw.c
+++ b/hw/xfree86/fbdevhw/fbdevhw.c
@@ -509,20 +509,25 @@ fbdevHWSetVideoModes(ScrnInfoPtr pScrn)
        pScrn->virtualY = pScrn->display->virtualY;
 
        for (modename = pScrn->display->modes; *modename != NULL; modename++) {
-               for (mode = pScrn->monitor->Modes; mode != NULL; mode = 
mode->next)
-                       if (0 == strcmp(mode->name,*modename))
-                               break;
+
+               mode = pScrn->monitor->Modes;
+
+               for (; mode != NULL; mode = mode->next) {
+                       if (0 == strcmp(mode->name,*modename)) {
+                               if (fbdevHWSetMode(pScrn, mode, TRUE))
+                                       break;
+
+                               xf86DrvMsg(pScrn->scrnIndex, X_INFO,
+                                          "\tmode \"%s\" test failed\n", 
*modename);
+                       }
+               }
+
                if (NULL == mode) {
                        xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                                   "\tmode \"%s\" not found\n", *modename);
                        continue;
                }
 
-               if (!fbdevHWSetMode(pScrn, mode, TRUE)) {
-                       xf86DrvMsg(pScrn->scrnIndex, X_INFO,
-                                  "\tmode \"%s\" test failed\n", *modename);
-                       continue;
-               }
                xf86DrvMsg(pScrn->scrnIndex, X_INFO,
                           "\tmode \"%s\" ok\n", *modename);
 
-- 
1.7.6.4

_______________________________________________
[email protected]: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: http://lists.x.org/mailman/listinfo/xorg-devel

Reply via email to