|
@@ -421,19 +421,21 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector)
|
|
|
{
|
|
|
struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv;
|
|
|
u8 msg[DP_DPCD_SIZE];
|
|
|
- int ret;
|
|
|
+ int ret, i;
|
|
|
|
|
|
- ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg,
|
|
|
- DP_DPCD_SIZE);
|
|
|
- if (ret > 0) {
|
|
|
- memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE);
|
|
|
+ for (i = 0; i < 7; i++) {
|
|
|
+ ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg,
|
|
|
+ DP_DPCD_SIZE);
|
|
|
+ if (ret == DP_DPCD_SIZE) {
|
|
|
+ memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE);
|
|
|
|
|
|
- DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd),
|
|
|
- dig_connector->dpcd);
|
|
|
+ DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd),
|
|
|
+ dig_connector->dpcd);
|
|
|
|
|
|
- radeon_dp_probe_oui(radeon_connector);
|
|
|
+ radeon_dp_probe_oui(radeon_connector);
|
|
|
|
|
|
- return true;
|
|
|
+ return true;
|
|
|
+ }
|
|
|
}
|
|
|
dig_connector->dpcd[0] = 0;
|
|
|
return false;
|