|
@@ -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);
|
|
|
|