| From 08d075116db3592db218bfe0f554cd93c9e12505 Mon Sep 17 00:00:00 2001 |
| From: Alex Deucher <alexdeucher@gmail.com> |
| Date: Thu, 15 Apr 2010 13:31:12 -0400 |
| Subject: drm/radeon/kms: fix tv dac conflict resolver |
| |
| From: Alex Deucher <alexdeucher@gmail.com> |
| |
| commit 08d075116db3592db218bfe0f554cd93c9e12505 upstream. |
| |
| On systems with the tv dac shared between DVI and TV, |
| we can only use the dac for one of the connectors. |
| However, when using a digital monitor on the DVI port, |
| you can use the dac for the TV connector just fine. |
| Check the use_digital status when resolving the conflict. |
| |
| Fixes fdo bug 27649, possibly others. |
| |
| Signed-off-by: Alex Deucher <alexdeucher@gmail.com> |
| Signed-off-by: Dave Airlie <airlied@redhat.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de> |
| |
| --- |
| drivers/gpu/drm/radeon/radeon_connectors.c | 5 +++++ |
| 1 file changed, 5 insertions(+) |
| |
| --- a/drivers/gpu/drm/radeon/radeon_connectors.c |
| +++ b/drivers/gpu/drm/radeon/radeon_connectors.c |
| @@ -140,12 +140,14 @@ radeon_connector_analog_encoder_conflict |
| { |
| struct drm_device *dev = connector->dev; |
| struct drm_connector *conflict; |
| + struct radeon_connector *radeon_conflict; |
| int i; |
| |
| list_for_each_entry(conflict, &dev->mode_config.connector_list, head) { |
| if (conflict == connector) |
| continue; |
| |
| + radeon_conflict = to_radeon_connector(conflict); |
| for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { |
| if (conflict->encoder_ids[i] == 0) |
| break; |
| @@ -155,6 +157,9 @@ radeon_connector_analog_encoder_conflict |
| if (conflict->status != connector_status_connected) |
| continue; |
| |
| + if (radeon_conflict->use_digital) |
| + continue; |
| + |
| if (priority == true) { |
| DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict)); |
| DRM_INFO("in favor of %s\n", drm_get_connector_name(connector)); |