diff options
Diffstat (limited to 'drivers/gpu/drm/drm_dp_helper.c')
| -rw-r--r-- | drivers/gpu/drm/drm_dp_helper.c | 22 | 
1 files changed, 18 insertions, 4 deletions
diff --git a/drivers/gpu/drm/drm_dp_helper.c b/drivers/gpu/drm/drm_dp_helper.c index 70ae1f232331..a7ba602a43a8 100644 --- a/drivers/gpu/drm/drm_dp_helper.c +++ b/drivers/gpu/drm/drm_dp_helper.c @@ -119,18 +119,32 @@ u8 drm_dp_get_adjust_request_pre_emphasis(const u8 link_status[DP_LINK_STATUS_SI  EXPORT_SYMBOL(drm_dp_get_adjust_request_pre_emphasis);  void drm_dp_link_train_clock_recovery_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) { -	if (dpcd[DP_TRAINING_AUX_RD_INTERVAL] == 0) +	int rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & +			  DP_TRAINING_AUX_RD_MASK; + +	if (rd_interval > 4) +		DRM_DEBUG_KMS("AUX interval %d, out of range (max 4)\n", +			      rd_interval); + +	if (rd_interval == 0 || dpcd[DP_DPCD_REV] >= DP_DPCD_REV_14)  		udelay(100);  	else -		mdelay(dpcd[DP_TRAINING_AUX_RD_INTERVAL] * 4); +		mdelay(rd_interval * 4);  }  EXPORT_SYMBOL(drm_dp_link_train_clock_recovery_delay);  void drm_dp_link_train_channel_eq_delay(const u8 dpcd[DP_RECEIVER_CAP_SIZE]) { -	if (dpcd[DP_TRAINING_AUX_RD_INTERVAL] == 0) +	int rd_interval = dpcd[DP_TRAINING_AUX_RD_INTERVAL] & +			  DP_TRAINING_AUX_RD_MASK; + +	if (rd_interval > 4) +		DRM_DEBUG_KMS("AUX interval %d, out of range (max 4)\n", +			      rd_interval); + +	if (rd_interval == 0)  		udelay(400);  	else -		mdelay(dpcd[DP_TRAINING_AUX_RD_INTERVAL] * 4); +		mdelay(rd_interval * 4);  }  EXPORT_SYMBOL(drm_dp_link_train_channel_eq_delay);  |