]> rtime.felk.cvut.cz Git - linux-imx.git/blobdiff - drivers/gpu/drm/i915/intel_dp.c
drm/i915: kill intel_dp_link_clock()
[linux-imx.git] / drivers / gpu / drm / i915 / intel_dp.c
index f9f2f7df6ee3f634f1adecf344c71e329c97ad71..b51043e651b5dc3b3b5b8ca222e0e67b99f1de95 100644 (file)
@@ -148,15 +148,6 @@ intel_dp_max_link_bw(struct intel_dp *intel_dp)
        return max_link_bw;
 }
 
-static int
-intel_dp_link_clock(uint8_t link_bw)
-{
-       if (link_bw == DP_LINK_BW_2_7)
-               return 270000;
-       else
-               return 162000;
-}
-
 /*
  * The units on the numbers in the next two are... bizarre.  Examples will
  * make it clearer; this one parallels an example in the eDP spec.
@@ -191,7 +182,8 @@ intel_dp_adjust_dithering(struct intel_dp *intel_dp,
                          struct drm_display_mode *mode,
                          bool adjust_mode)
 {
-       int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
+       int max_link_clock =
+               drm_dp_bw_code_to_link_rate(intel_dp_max_link_bw(intel_dp));
        int max_lanes = drm_dp_max_lane_count(intel_dp->dpcd);
        int max_rate, mode_rate;
 
@@ -379,7 +371,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
         * clock divider.
         */
        if (is_cpu_edp(intel_dp)) {
-               if (IS_HASWELL(dev))
+               if (HAS_DDI(dev))
                        aux_clock_divider = intel_ddi_get_cdclk_freq(dev_priv) >> 1;
                else if (IS_VALLEYVIEW(dev))
                        aux_clock_divider = 100;
@@ -685,7 +677,7 @@ intel_dp_i2c_init(struct intel_dp *intel_dp,
        return ret;
 }
 
-static bool
+bool
 intel_dp_mode_fixup(struct drm_encoder *encoder,
                    const struct drm_display_mode *mode,
                    struct drm_display_mode *adjusted_mode)
@@ -722,12 +714,15 @@ intel_dp_mode_fixup(struct drm_encoder *encoder,
 
        for (clock = 0; clock <= max_clock; clock++) {
                for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
-                       int link_avail = intel_dp_max_data_rate(intel_dp_link_clock(bws[clock]), lane_count);
+                       int link_bw_clock =
+                               drm_dp_bw_code_to_link_rate(bws[clock]);
+                       int link_avail = intel_dp_max_data_rate(link_bw_clock,
+                                                               lane_count);
 
                        if (mode_rate <= link_avail) {
                                intel_dp->link_bw = bws[clock];
                                intel_dp->lane_count = lane_count;
-                               adjusted_mode->clock = intel_dp_link_clock(intel_dp->link_bw);
+                               adjusted_mode->clock = link_bw_clock;
                                DRM_DEBUG_KMS("DP link bw %02x lane "
                                                "count %d clock %d bpp %d\n",
                                       intel_dp->link_bw, intel_dp->lane_count,
@@ -1791,7 +1786,7 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
        int voltage_tries, loop_tries;
        uint32_t DP = intel_dp->DP;
 
-       if (IS_HASWELL(dev))
+       if (HAS_DDI(dev))
                intel_ddi_prepare_link_retrain(encoder);
 
        /* Write the link configuration data */
@@ -1851,7 +1846,8 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
                        if ((intel_dp->train_set[i] & DP_TRAIN_MAX_SWING_REACHED) == 0)
                                break;
                if (i == intel_dp->lane_count && voltage_tries == 5) {
-                       if (++loop_tries == 5) {
+                       ++loop_tries;
+                       if (loop_tries == 5) {
                                DRM_DEBUG_KMS("too many full retries, give up\n");
                                break;
                        }
@@ -1861,11 +1857,15 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
                }
 
                /* Check to see if we've tried the same voltage 5 times */
-               if ((intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) != voltage) {
-                       voltage = intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;
-                       voltage_tries = 0;
-               } else
+               if ((intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK) == voltage) {
                        ++voltage_tries;
+                       if (voltage_tries == 5) {
+                               DRM_DEBUG_KMS("too many voltage retries, give up\n");
+                               break;
+                       }
+               } else
+                       voltage_tries = 0;
+               voltage = intel_dp->train_set[0] & DP_TRAIN_VOLTAGE_SWING_MASK;
 
                /* Compute new intel_dp->train_set as requested by target */
                intel_get_adjust_train(intel_dp, link_status);
@@ -1976,7 +1976,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
         *   intel_ddi_prepare_link_retrain will take care of redoing the link
         *   train.
         */
-       if (IS_HASWELL(dev))
+       if (HAS_DDI(dev))
                return;
 
        if (WARN_ON((I915_READ(intel_dp->output_reg) & DP_PORT_EN) == 0))
@@ -2110,7 +2110,7 @@ intel_dp_handle_test_request(struct intel_dp *intel_dp)
  *  4. Check link status on receipt of hot-plug interrupt
  */
 
-static void
+void
 intel_dp_check_link_status(struct intel_dp *intel_dp)
 {
        struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base;
@@ -2388,7 +2388,7 @@ intel_dp_set_property(struct drm_connector *connector,
        struct intel_dp *intel_dp = enc_to_intel_dp(&intel_encoder->base);
        int ret;
 
-       ret = drm_connector_property_set_value(connector, property, val);
+       ret = drm_object_property_set_value(&connector->base, property, val);
        if (ret)
                return ret;
 
@@ -2469,7 +2469,7 @@ intel_dp_destroy(struct drm_connector *connector)
        kfree(connector);
 }
 
-static void intel_dp_encoder_destroy(struct drm_encoder *encoder)
+void intel_dp_encoder_destroy(struct drm_encoder *encoder)
 {
        struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);
        struct intel_dp *intel_dp = &intel_dig_port->dp;
@@ -2489,12 +2489,6 @@ static const struct drm_encoder_helper_funcs intel_dp_helper_funcs = {
        .disable = intel_encoder_noop,
 };
 
-static const struct drm_encoder_helper_funcs intel_dp_helper_funcs_hsw = {
-       .mode_fixup = intel_dp_mode_fixup,
-       .mode_set = intel_ddi_mode_set,
-       .disable = intel_encoder_noop,
-};
-
 static const struct drm_connector_funcs intel_dp_connector_funcs = {
        .dpms = intel_connector_dpms,
        .detect = intel_dp_detect,
@@ -2690,7 +2684,7 @@ intel_dp_init_panel_power_sequencer(struct drm_device *dev,
                      I915_READ(PCH_PP_DIVISOR));
 }
 
-static void
+void
 intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
                        struct intel_connector *intel_connector)
 {
@@ -2723,8 +2717,11 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
                type = DRM_MODE_CONNECTOR_eDP;
                intel_encoder->type = INTEL_OUTPUT_EDP;
        } else {
+               /* The intel_encoder->type value may be INTEL_OUTPUT_UNKNOWN for
+                * DDI or INTEL_OUTPUT_DISPLAYPORT for the older gens, so don't
+                * rewrite it.
+                */
                type = DRM_MODE_CONNECTOR_DisplayPort;
-               intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
        }
 
        drm_connector_init(dev, connector, &intel_dp_connector_funcs, type);
@@ -2740,7 +2737,7 @@ intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
        intel_connector_attach_encoder(intel_connector, intel_encoder);
        drm_sysfs_connector_add(connector);
 
-       if (IS_HASWELL(dev))
+       if (HAS_DDI(dev))
                intel_connector->get_hw_state = intel_ddi_connector_get_hw_state;
        else
                intel_connector->get_hw_state = intel_connector_get_hw_state;
@@ -2869,30 +2866,18 @@ intel_dp_init(struct drm_device *dev, int output_reg, enum port port)
 
        drm_encoder_init(dev, &intel_encoder->base, &intel_dp_enc_funcs,
                         DRM_MODE_ENCODER_TMDS);
+       drm_encoder_helper_add(&intel_encoder->base, &intel_dp_helper_funcs);
 
-       if (IS_HASWELL(dev)) {
-               drm_encoder_helper_add(&intel_encoder->base,
-                                      &intel_dp_helper_funcs_hsw);
-
-               intel_encoder->enable = intel_enable_ddi;
-               intel_encoder->pre_enable = intel_ddi_pre_enable;
-               intel_encoder->disable = intel_disable_ddi;
-               intel_encoder->post_disable = intel_ddi_post_disable;
-               intel_encoder->get_hw_state = intel_ddi_get_hw_state;
-       } else {
-               drm_encoder_helper_add(&intel_encoder->base,
-                                      &intel_dp_helper_funcs);
-
-               intel_encoder->enable = intel_enable_dp;
-               intel_encoder->pre_enable = intel_pre_enable_dp;
-               intel_encoder->disable = intel_disable_dp;
-               intel_encoder->post_disable = intel_post_disable_dp;
-               intel_encoder->get_hw_state = intel_dp_get_hw_state;
-       }
+       intel_encoder->enable = intel_enable_dp;
+       intel_encoder->pre_enable = intel_pre_enable_dp;
+       intel_encoder->disable = intel_disable_dp;
+       intel_encoder->post_disable = intel_post_disable_dp;
+       intel_encoder->get_hw_state = intel_dp_get_hw_state;
 
        intel_dig_port->port = port;
        intel_dig_port->dp.output_reg = output_reg;
 
+       intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT;
        intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2);
        intel_encoder->cloneable = false;
        intel_encoder->hot_plug = intel_dp_hot_plug;