diff options
author | Alex Deucher <alexdeucher@gmail.com> | 2011-05-20 04:34:23 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2011-05-20 06:02:27 -0400 |
commit | f8d0edde15702f1e3114d4afc80cb9cced2c754b (patch) | |
tree | 7c3ffcf633c42f768e3050c9df1e7702fc92e6f3 /drivers/gpu | |
parent | d7fa8bb385d71c0c0c563a063a0f574adc532585 (diff) |
drm/radeon/kms: improve DP detect logic
Signed-off-by: Alex Deucher <alexdeucher@gmail.com>
Signed-off-by: Dave Airlie <airlied@redhat.com>
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/radeon_connectors.c | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c index 9f3c6509d9d0..ac3165aeff36 100644 --- a/drivers/gpu/drm/radeon/radeon_connectors.c +++ b/drivers/gpu/drm/radeon/radeon_connectors.c | |||
@@ -1142,6 +1142,8 @@ bool radeon_connector_is_dp12_capable(struct drm_connector *connector) | |||
1142 | static enum drm_connector_status | 1142 | static enum drm_connector_status |
1143 | radeon_dp_detect(struct drm_connector *connector, bool force) | 1143 | radeon_dp_detect(struct drm_connector *connector, bool force) |
1144 | { | 1144 | { |
1145 | struct drm_device *dev = connector->dev; | ||
1146 | struct radeon_device *rdev = dev->dev_private; | ||
1145 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); | 1147 | struct radeon_connector *radeon_connector = to_radeon_connector(connector); |
1146 | enum drm_connector_status ret = connector_status_disconnected; | 1148 | enum drm_connector_status ret = connector_status_disconnected; |
1147 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; | 1149 | struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv; |
@@ -1164,12 +1166,18 @@ radeon_dp_detect(struct drm_connector *connector, bool force) | |||
1164 | ATOM_TRANSMITTER_ACTION_POWER_OFF); | 1166 | ATOM_TRANSMITTER_ACTION_POWER_OFF); |
1165 | } else { | 1167 | } else { |
1166 | radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); | 1168 | radeon_dig_connector->dp_sink_type = radeon_dp_getsinktype(radeon_connector); |
1167 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { | 1169 | if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd)) { |
1168 | if (radeon_dp_getdpcd(radeon_connector)) | 1170 | ret = connector_status_connected; |
1169 | ret = connector_status_connected; | 1171 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) |
1172 | radeon_dp_getdpcd(radeon_connector); | ||
1170 | } else { | 1173 | } else { |
1171 | if (radeon_ddc_probe(radeon_connector)) | 1174 | if (radeon_dig_connector->dp_sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) { |
1172 | ret = connector_status_connected; | 1175 | if (radeon_dp_getdpcd(radeon_connector)) |
1176 | ret = connector_status_connected; | ||
1177 | } else { | ||
1178 | if (radeon_ddc_probe(radeon_connector)) | ||
1179 | ret = connector_status_connected; | ||
1180 | } | ||
1173 | } | 1181 | } |
1174 | } | 1182 | } |
1175 | 1183 | ||