drm/i915: Replace some hand rolled max()s
[linux-2.6-microblaze.git] / drivers / gpu / drm / i915 / display / intel_dp_link_training.c
index a7defb3..b9e4ee2 100644 (file)
@@ -34,9 +34,23 @@ intel_dp_dump_link_status(const u8 link_status[DP_LINK_STATUS_SIZE])
                      link_status[3], link_status[4], link_status[5]);
 }
 
-static void
-intel_get_adjust_train(struct intel_dp *intel_dp,
-                      const u8 link_status[DP_LINK_STATUS_SIZE])
+static u8 dp_voltage_max(u8 preemph)
+{
+       switch (preemph & DP_TRAIN_PRE_EMPHASIS_MASK) {
+       case DP_TRAIN_PRE_EMPH_LEVEL_0:
+               return DP_TRAIN_VOLTAGE_SWING_LEVEL_3;
+       case DP_TRAIN_PRE_EMPH_LEVEL_1:
+               return DP_TRAIN_VOLTAGE_SWING_LEVEL_2;
+       case DP_TRAIN_PRE_EMPH_LEVEL_2:
+               return DP_TRAIN_VOLTAGE_SWING_LEVEL_1;
+       case DP_TRAIN_PRE_EMPH_LEVEL_3:
+       default:
+               return DP_TRAIN_VOLTAGE_SWING_LEVEL_0;
+       }
+}
+
+void intel_dp_get_adjust_train(struct intel_dp *intel_dp,
+                              const u8 link_status[DP_LINK_STATUS_SIZE])
 {
        u8 v = 0;
        u8 p = 0;
@@ -45,23 +59,19 @@ intel_get_adjust_train(struct intel_dp *intel_dp,
        u8 preemph_max;
 
        for (lane = 0; lane < intel_dp->lane_count; lane++) {
-               u8 this_v = drm_dp_get_adjust_request_voltage(link_status, lane);
-               u8 this_p = drm_dp_get_adjust_request_pre_emphasis(link_status, lane);
-
-               if (this_v > v)
-                       v = this_v;
-               if (this_p > p)
-                       p = this_p;
+               v = max(v, drm_dp_get_adjust_request_voltage(link_status, lane));
+               p = max(p, drm_dp_get_adjust_request_pre_emphasis(link_status, lane));
        }
 
-       voltage_max = intel_dp_voltage_max(intel_dp);
-       if (v >= voltage_max)
-               v = voltage_max | DP_TRAIN_MAX_SWING_REACHED;
-
-       preemph_max = intel_dp_pre_emphasis_max(intel_dp, v);
+       preemph_max = intel_dp->preemph_max(intel_dp);
        if (p >= preemph_max)
                p = preemph_max | DP_TRAIN_MAX_PRE_EMPHASIS_REACHED;
 
+       voltage_max = min(intel_dp->voltage_max(intel_dp),
+                         dp_voltage_max(p));
+       if (v >= voltage_max)
+               v = voltage_max | DP_TRAIN_MAX_SWING_REACHED;
+
        for (lane = 0; lane < 4; lane++)
                intel_dp->train_set[lane] = v | p;
 }
@@ -219,7 +229,7 @@ intel_dp_link_training_clock_recovery(struct intel_dp *intel_dp)
                voltage = intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;
 
                /* Update training set as requested by target */
-               intel_get_adjust_train(intel_dp, link_status);
+               intel_dp_get_adjust_train(intel_dp, link_status);
                if (!intel_dp_update_link_train(intel_dp)) {
                        drm_err(&i915->drm,
                                "failed to update link training\n");
@@ -338,7 +348,7 @@ intel_dp_link_training_channel_equalization(struct intel_dp *intel_dp)
                }
 
                /* Update training set as requested by target */
-               intel_get_adjust_train(intel_dp, link_status);
+               intel_dp_get_adjust_train(intel_dp, link_status);
                if (!intel_dp_update_link_train(intel_dp)) {
                        drm_err(&i915->drm,
                                "failed to update link training\n");