static void dp_get_adjust_train(dp_info* dp) { TRACE("%s\n", __func__); const char* voltageNames[] = { "0.4V", "0.6V", "0.8V", "1.2V" }; const char* preEmphasisNames[] = { "0dB", "3.5dB", "6dB", "9.5dB" }; uint8 voltage = 0; uint8 preEmphasis = 0; int lane; for (lane = 0; lane < dp->laneCount; lane++) { uint8 laneVoltage = dp_get_adjust_request_voltage(dp, lane); uint8 lanePreEmphasis = dp_get_adjust_request_pre_emphasis(dp, lane); TRACE("%s: Requested %s at %s for lane %d\n", __func__, preEmphasisNames[lanePreEmphasis >> DP_TRAIN_PRE_EMPHASIS_SHIFT], voltageNames[laneVoltage >> DP_TRAIN_VCC_SWING_SHIFT], lane); if (laneVoltage > voltage) voltage = laneVoltage; if (lanePreEmphasis > preEmphasis) preEmphasis = lanePreEmphasis; } // Check for maximum voltage and toggle max if reached if (voltage >= DP_TRAIN_VCC_SWING_1200) voltage |= DP_TRAIN_MAX_SWING_EN; // Check for maximum pre-emphasis and toggle max if reached if (preEmphasis >= DP_TRAIN_PRE_EMPHASIS_9_5) preEmphasis |= DP_TRAIN_MAX_EMPHASIS_EN; for (lane = 0; lane < 4; lane++) dp->trainingSet[lane] = voltage | preEmphasis; }
static void dp_get_adjust_train(u8 link_status[DP_LINK_STATUS_SIZE], int lane_count, u8 train_set[4]) { u8 v = 0; u8 p = 0; int lane; for (lane = 0; lane < lane_count; lane++) { u8 this_v = dp_get_adjust_request_voltage(link_status, lane); u8 this_p = dp_get_adjust_request_pre_emphasis(link_status, lane); DRM_DEBUG_KMS("requested signal parameters: lane %d voltage %s pre_emph %s\n", lane, voltage_names[this_v >> DP_TRAIN_VOLTAGE_SWING_SHIFT], pre_emph_names[this_p >> DP_TRAIN_PRE_EMPHASIS_SHIFT]); if (this_v > v) v = this_v; if (this_p > p) p = this_p; } if (v >= DP_VOLTAGE_MAX) v |= DP_TRAIN_MAX_SWING_REACHED; if (p >= DP_PRE_EMPHASIS_MAX) p |= DP_TRAIN_MAX_PRE_EMPHASIS_REACHED; DRM_DEBUG_KMS("using signal parameters: voltage %s pre_emph %s\n", voltage_names[(v & DP_TRAIN_VOLTAGE_SWING_MASK) >> DP_TRAIN_VOLTAGE_SWING_SHIFT], pre_emph_names[(p & DP_TRAIN_PRE_EMPHASIS_MASK) >> DP_TRAIN_PRE_EMPHASIS_SHIFT]); for (lane = 0; lane < 4; lane++) train_set[lane] = v | p; }