xf86-video-ati: Branch 'master'
Alex Deucher
agd5f at kemper.freedesktop.org
Tue Nov 17 11:28:14 PST 2009
src/radeon_output.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
New commits:
commit 437113124bbd6fb166825169eabec4dfde900dd9
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 42d37fa..24e07db 100644
--- a/src/radeon_output.c
+++ b/src/radeon_output.c
@@ -322,10 +322,40 @@ radeon_ddc_connected(xf86OutputPtr output)
case CONNECTOR_DVI_D:
case CONNECTOR_HDMI_TYPE_A:
if (radeon_output->shared_ddc) {
+ xf86CrtcConfigPtr config = XF86_CRTC_CONFIG_PTR (output->scrn);
+ int i;
+
if (monitor_is_digital(MonInfo))
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;
@@ -422,6 +452,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