Hello all.  I've recently been playing with modules on my PPC system, and
noticed that matroxfb doesn't work as a module, because of mac_vmode_to_par.
But, after looking at other drivers which did work (aty and aty128) I noticed
matroxfb was doing something it didn't need to be doing.
First, the code should never get compiled, if this is a module, and even then
the code only needs to be compiled on ALL_PPC (which is Pmac/PReP/CHRP).
Second, it's only valid to call the default_{vmode,cmode} code on a PMAC 
(tested on a pmac, and ran it by one of the IBM guys who agrees it shouldn't
break anything, but he's still working on making the machine boot to start
with. :))
Third, the nvram_read_byte needs to be protected by CONFIG_NVRAM.
Finally, the VMODE_CHOOSE stuff is 0'ed out in atyfb with a comment about this
not actually working, so I removed it.

Comments?

-- 
Tom Rini (TR1265)
http://gate.crashing.org/~trini/
===== drivers/video/matrox/matroxfb_base.c 1.13 vs edited =====
--- 1.13/drivers/video/matrox/matroxfb_base.c   Fri Dec 15 14:12:43 2000
+++ edited/drivers/video/matrox/matroxfb_base.c Sun Dec 31 10:39:11 2000
@@ -1842,33 +1842,33 @@
        }
 
        /* FIXME: Where to move this?! */
-#if defined(CONFIG_PPC)
+#if defined(CONFIG_ALL_PPC)
 #if defined(CONFIG_FB_COMPAT_XPMAC)
        strcpy(ACCESS_FBINFO(matrox_name), "MTRX,");    /* OpenFirmware naming 
convension */
        strncat(ACCESS_FBINFO(matrox_name), b->name, 26);
        if (!console_fb_info)
                console_fb_info = &ACCESS_FBINFO(fbcon);
 #endif
-       if ((xres <= 640) && (yres <= 480)) {
+#ifndef MODULE
+       if (_machine == _MACH_Pmac) {
                struct fb_var_screeninfo var;
-               if (default_vmode == VMODE_NVRAM) {
-                       default_vmode = nvram_read_byte(NV_VMODE);
-                       if (default_vmode <= 0 || default_vmode > VMODE_MAX)
-                               default_vmode = VMODE_CHOOSE;
-               }
                if (default_vmode <= 0 || default_vmode > VMODE_MAX)
                        default_vmode = VMODE_640_480_60;
+#ifdef CONFIG_NVRAM
                if (default_cmode == CMODE_NVRAM)
                        default_cmode = nvram_read_byte(NV_CMODE);
+#endif
                if (default_cmode < CMODE_8 || default_cmode > CMODE_32)
                        default_cmode = CMODE_8;
                if (!mac_vmode_to_var(default_vmode, default_cmode, &var)) {
                        var.accel_flags = vesafb_defined.accel_flags;
                        var.xoffset = var.yoffset = 0;
-                       vesafb_defined = var; /* Note: mac_vmode_to_var() doesnot set 
all parameters */
+                       /* Note: mac_vmode_to_var() does not set all parameters */
+                       vesafb_defined = var;
                }
        }
-#endif /* CONFIG_PPC */
+#endif /* !MODULE */
+#endif /* CONFIG_ALL_PPC */
        vesafb_defined.xres_virtual = vesafb_defined.xres;
        if (nopan) {
                vesafb_defined.yres_virtual = vesafb_defined.yres;

Reply via email to