xf86-video-ati: Branch '6.12-branch'
Alex Deucher
agd5f at kemper.freedesktop.org
Tue Nov 17 11:35:34 PST 2009
src/radeon_output.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
New commits:
commit 51266161f70baf4ddbf79ba6225ee2ae107a9f36
Author: Alex Deucher <alexdeucher at gmail.com>
Date: Tue Nov 17 14:16:22 2009 -0500
radeon: deal with connectors sourced to the same encoder
Some systems have multiple connectors connected to the
same encoder; e.g., DVI and HDMI connected to the same
encoder with the same ddc line. Since we expose
connectors as xrandr outputs, randr treats them separately
which results in it trying to source the same encoder to
different crtcs. If we have an HDMI and DVI-D port on the
same encoder, pick the one to be considered connected
based on the edid (HDMI if edid indicates HDMI, DVI
otherwise). Also, don't turn off (dpms) encoders that are
shared.
Fixes fdo bug 21767.
Signed-off-by: Alex Deucher <alexdeucher at gmail.com>
diff --git a/src/radeon_output.c b/src/radeon_output.c
index edf59cd..6b6ba70 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -236,10 +236,40 @@ radeon_ddc_connected(xf86OutputPtr output)
case CONNECTOR_HDMI_TYPE_A:
case CONNECTOR_HDMI_TYPE_B:
if (radeon_output->shared_ddc) {
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn);
+ int i;
+
if (MonInfo->rawData[0x14] & 0x80) /* if it's digital and DVI/HDMI/etc. */
MonType = MT_DFP;
else
MonType = MT_NONE;
+
+ for (i = 0; i < config->num_output; i++) {
+ if (output != config->output[i]) {
+ RADEONOutputPrivatePtr other_radeon_output =
+ config->output[i]->driver_private;
+ if (radeon_output->devices & other_radeon_output->devices) {
+#ifndef EDID_COMPLETE_RAWDATA
+ if (radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_A) {
+ MonType = MT_NONE;
+ break;
+ }
+#else
+ if (xf86MonitorIsHDMI(MonInfo)) {
+ if (radeon_output->ConnectorType == CONNECTOR_DVI_D) {
+ MonType = MT_NONE;
+ break;
+ }
+ } else {
+ if (radeon_output->ConnectorType == CONNECTOR_HDMI_TYPE_A) {
+ MonType = MT_NONE;
+ break;
+ }
+ }
+#endif
+ }
+ }
+ }
} else
MonType = MT_DFP;
break;
@@ -334,6 +364,22 @@ radeon_dpms(xf86OutputPtr output, int mode)
if ((mode == DPMSModeOn) && radeon_output->enabled)
return;
+ if ((mode != DPMSModeOn) && radeon_output->shared_ddc) {
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn);
+ int i;
+
+ for (i = 0; i < config->num_output; i++) {
+ if (output != config->output[i]) {
+ RADEONOutputPrivatePtr other_radeon_output =
+ config->output[i]->driver_private;
+ if (radeon_output->devices & other_radeon_output->devices) {
+ if (output->status == XF86OutputStatusDisconnected)
+ return;
+ }
+ }
+ }
+ }
+
if (IS_AVIVO_VARIANT || info->r4xx_atom) {
atombios_output_dpms(output, mode);
} else {
More information about the xorg-commit
mailing list