diff options
author | Alex Deucher <alexander.deucher@amd.com> | 2015-05-18 10:38:25 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2015-05-21 12:43:21 -0400 |
commit | 0f28d1281b6c54cc98746ae61e44e7f540758ed4 (patch) | |
tree | 834a47764596a0b7b1fb840926e88184c3e1c8cd /drivers/gpu | |
parent | 755c814a7d826257d5488cfaa801ec19377c472a (diff) |
drm/radeon: retry dcpd fetch
Retry the dpcd fetch several times. Some eDP panels
fail several times before the fetch is successful.
bug:
https://bugs.freedesktop.org/show_bug.cgi?id=73530
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: stable@vger.kernel.org
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/radeon/atombios_dp.c | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/drivers/gpu/drm/radeon/atombios_dp.c b/drivers/gpu/drm/radeon/atombios_dp.c index 3e3290c203c6..b435c859dcbc 100644 --- a/drivers/gpu/drm/radeon/atombios_dp.c +++ b/drivers/gpu/drm/radeon/atombios_dp.c | |||
@@ -421,19 +421,21 @@ bool radeon_dp_getdpcd(struct radeon_connector *radeon_connector) | |||
421 | { | 421 | { |
422 | struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; | 422 | struct radeon_connector_atom_dig *dig_connector = radeon_connector->con_priv; |
423 | u8 msg[DP_DPCD_SIZE]; | 423 | u8 msg[DP_DPCD_SIZE]; |
424 | int ret; | 424 | int ret, i; |
425 | 425 | ||
426 | ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, | 426 | for (i = 0; i < 7; i++) { |
427 | DP_DPCD_SIZE); | 427 | ret = drm_dp_dpcd_read(&radeon_connector->ddc_bus->aux, DP_DPCD_REV, msg, |
428 | if (ret > 0) { | 428 | DP_DPCD_SIZE); |
429 | memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); | 429 | if (ret == DP_DPCD_SIZE) { |
430 | memcpy(dig_connector->dpcd, msg, DP_DPCD_SIZE); | ||
430 | 431 | ||
431 | DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd), | 432 | DRM_DEBUG_KMS("DPCD: %*ph\n", (int)sizeof(dig_connector->dpcd), |
432 | dig_connector->dpcd); | 433 | dig_connector->dpcd); |
433 | 434 | ||
434 | radeon_dp_probe_oui(radeon_connector); | 435 | radeon_dp_probe_oui(radeon_connector); |
435 | 436 | ||
436 | return true; | 437 | return true; |
438 | } | ||
437 | } | 439 | } |
438 | dig_connector->dpcd[0] = 0; | 440 | dig_connector->dpcd[0] = 0; |
439 | return false; | 441 | return false; |