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