We have bought a number of Dells with the OEM RadeonVE card. I can certainly confirm that they are strange compared to the out-of-box Radeon VE QY, although the PCI vendor id is identical. Have a look at:
http://wetlogic.net/stewart/xfree-radeon-ve/radeon-ve-dell.jpg to see the card and the single connector on the board. Unlike the retail version of the board I have, this board does not duplicate output on both connectors, but instead displays only on cable 1 (the blue connector on the Y-adaptor in the picture), and nothing at all on cable 2. When I tried a dual-head configuration that works successfully on a retail version of the Radeon VE versions, I found two problems which I patched: - The first problem is that the primary interface does not report the BIOS value that radeon_driver.c expects in the function RADEONGetBIOSParameters(). Instead, it reports only a CRT on the secondary connector. In the single-headed case this works correctly. In the dual-head case things would also work correctly except that when RADEONPreInit() is called on the second screen instance, it checks for BypassSecondary and quite silently returns FALSE. This stumped me for a long time since there were no error messages in the X log file that indicated why Screen 1 was completely ignored in my XF86Config-4. I'm not sure I understand why it is an error ifthe BIOS doesn't claim to detect a second monitor. Does this mean the user must reboot in order to attach a second monitor, or in many cases just because it happened to be off at boot time? In my patch, I commented the return out, but I think it's worth opening a discussion (I'm not on Xpert, so please Cc me). The behavior as a result of this change is that if there's a second screen definition and the card is multi-head, and there's at least one monitor attached, the second monitor is pre-initted. - The second problem is that the secondary monitor on the OEM Dell Radeon VE uses DAC2 for output. There was actually a bit of commented out code in RADEONInitCrtc2Registers() already, so I simply added an option named "Crt2Dac2" and tested for it there. The true maintainers of this code may want to add another boolean field to RADEONEntRec and hunt for the option elsewhere, if they think that's cleaner. Thesecond screen definition in my XF86Config-4 now looks like: Section "Device" Identifier "ATI Radeon 1" Driver "radeon" BoardName "Radeon" BusID "PCI:1:0:0" Option "AGPMode" "4" Option "Crt2Dac2" Screen 1 EndSection The third problem, which I didn't deal with, is that the DDC info for the two monitors attached was swapped. In other words, the DDC info listed for screen 0 (the monitor displaying the settings listed in the "Screen 0" Section, also the monitor connected to the first cable) appeared in the section of the log file dedicated to screen 1, and vice versa. This wasn't a big enough problem for me to solve, and since it's hard to solve it without yet another option, I decided to forego it. Anyway, I hope this helps some people. Here it is, based on 4.2.99.1 (CVS as of yesterday): --- xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c.orig Mon Apr 22 13:55:48 2002 +++ xc/programs/Xserver/hw/xfree86/drivers/ati/radeon_driver.c Tue Apr 23 10:53:56 +2002 @@ -132,7 +132,8 @@ #endif OPTION_CRT_SCREEN, OPTION_PANEL_SIZE, - OPTION_FBDEV + OPTION_FBDEV, + OPTION_CRT2_DAC2 } RADEONOpts; const OptionInfoRec RADEONOptions[] = { @@ -153,6 +154,7 @@ { OPTION_CRT_SCREEN, "CrtScreen", OPTV_BOOLEAN, {0}, FALSE}, { OPTION_PANEL_SIZE, "PanelSize", OPTV_ANYSTR, {0}, FALSE }, { OPTION_FBDEV, "UseFBDev", OPTV_BOOLEAN, {0}, FALSE }, + { OPTION_CRT2_DAC2, "Crt2Dac2", OPTV_BOOLEAN, {0}, FALSE }, { -1, NULL, OPTV_NONE, {0}, FALSE } }; @@ -2181,7 +2183,12 @@ pPriv = xf86GetEntityPrivate(pScrn->entityList[0], gRADEONEntityIndex); pRADEONEnt = pPriv->ptr; - if(pRADEONEnt->BypassSecondary) return FALSE; + /* XXX Note to Maintainer: The only reason we would be here + * is if the user entered a second "Screen" definition for + * this card, presumably because there are two screens. + * Shouldn't this automatically override presumed BIOS settings? + * if(pRADEONEnt->BypassSecondary) return FALSE; + */ pRADEONEnt->pSecondaryScrn = pScrn; } else @@ -3846,6 +3853,9 @@ save->disp_output_cntl = ((info->SavedReg.disp_output_cntl & ~(CARD32)RADEON_DISP_DAC_SOURCE_MASK) | RADEON_DISP_DAC_SOURCE_CRTC2); + else if (xf86ReturnOptValBool(info->Options, OPTION_CRT2_DAC2, FALSE)) + save->dac2_cntl = info->SavedReg.dac2_cntl + | RADEON_DAC2_DAC2_CLK_SEL; else save->dac2_cntl = info->SavedReg.dac2_cntl /*| RADEON_DAC2_DAC2_CLK_SEL*/ _______________________________________________ Xpert mailing list [EMAIL PROTECTED] http://XFree86.Org/mailman/listinfo/xpert