Merge tag 'v3.5-rc4' into drm-intel-next-queued
[cascardo/linux.git] / drivers / gpu / drm / i915 / intel_dp.c
index c044932..76a7080 100644 (file)
@@ -155,6 +155,18 @@ intel_edp_link_config(struct intel_encoder *intel_encoder,
                *link_bw = 270000;
 }
 
+int
+intel_edp_target_clock(struct intel_encoder *intel_encoder,
+                      struct drm_display_mode *mode)
+{
+       struct intel_dp *intel_dp = container_of(intel_encoder, struct intel_dp, base);
+
+       if (intel_dp->panel_fixed_mode)
+               return intel_dp->panel_fixed_mode->clock;
+       else
+               return mode->clock;
+}
+
 static int
 intel_dp_max_lane_count(struct intel_dp *intel_dp)
 {
@@ -225,7 +237,7 @@ intel_dp_max_data_rate(int max_link_clock, int max_lanes)
 static bool
 intel_dp_adjust_dithering(struct intel_dp *intel_dp,
                          struct drm_display_mode *mode,
-                         struct drm_display_mode *adjusted_mode)
+                         bool adjust_mode)
 {
        int max_link_clock = intel_dp_link_clock(intel_dp_max_link_bw(intel_dp));
        int max_lanes = intel_dp_max_lane_count(intel_dp);
@@ -239,8 +251,8 @@ intel_dp_adjust_dithering(struct intel_dp *intel_dp,
                if (mode_rate > max_rate)
                        return false;
 
-               if (adjusted_mode)
-                       adjusted_mode->private_flags
+               if (adjust_mode)
+                       mode->private_flags
                                |= INTEL_MODE_DP_FORCE_6BPC;
 
                return true;
@@ -263,7 +275,7 @@ intel_dp_mode_valid(struct drm_connector *connector,
                        return MODE_PANEL;
        }
 
-       if (!intel_dp_adjust_dithering(intel_dp, mode, NULL))
+       if (!intel_dp_adjust_dithering(intel_dp, mode, false))
                return MODE_CLOCK_HIGH;
 
        if (mode->clock < 10000)
@@ -706,25 +718,20 @@ intel_dp_mode_fixup(struct drm_encoder *encoder, struct drm_display_mode *mode,
                intel_fixed_panel_mode(intel_dp->panel_fixed_mode, adjusted_mode);
                intel_pch_panel_fitting(dev, DRM_MODE_SCALE_FULLSCREEN,
                                        mode, adjusted_mode);
-               /*
-                * the mode->clock is used to calculate the Data&Link M/N
-                * of the pipe. For the eDP the fixed clock should be used.
-                */
-               mode->clock = intel_dp->panel_fixed_mode->clock;
        }
 
-       if (mode->flags & DRM_MODE_FLAG_DBLCLK)
+       if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK)
                return false;
 
        DRM_DEBUG_KMS("DP link computation with max lane count %i "
                      "max bw %02x pixel clock %iKHz\n",
-                     max_lane_count, bws[max_clock], mode->clock);
+                     max_lane_count, bws[max_clock], adjusted_mode->clock);
 
-       if (!intel_dp_adjust_dithering(intel_dp, mode, adjusted_mode))
+       if (!intel_dp_adjust_dithering(intel_dp, adjusted_mode, true))
                return false;
 
        bpp = adjusted_mode->private_flags & INTEL_MODE_DP_FORCE_6BPC ? 18 : 24;
-       mode_rate = intel_dp_link_required(mode->clock, bpp);
+       mode_rate = intel_dp_link_required(adjusted_mode->clock, bpp);
 
        for (lane_count = 1; lane_count <= max_lane_count; lane_count <<= 1) {
                for (clock = 0; clock <= max_clock; clock++) {
@@ -1922,7 +1929,7 @@ intel_dp_link_down(struct intel_dp *intel_dp)
                        DP |= DP_LINK_TRAIN_OFF;
        }
 
-       if (!HAS_PCH_CPT(dev) &&
+       if (HAS_PCH_IBX(dev) &&
            I915_READ(intel_dp->output_reg) & DP_PIPEB_SELECT) {
                struct drm_crtc *crtc = intel_dp->base.base.crtc;
 
@@ -2099,25 +2106,23 @@ g4x_dp_detect(struct intel_dp *intel_dp)
 {
        struct drm_device *dev = intel_dp->base.base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       uint32_t temp, bit;
+       uint32_t bit;
 
        switch (intel_dp->output_reg) {
        case DP_B:
-               bit = DPB_HOTPLUG_INT_STATUS;
+               bit = DPB_HOTPLUG_LIVE_STATUS;
                break;
        case DP_C:
-               bit = DPC_HOTPLUG_INT_STATUS;
+               bit = DPC_HOTPLUG_LIVE_STATUS;
                break;
        case DP_D:
-               bit = DPD_HOTPLUG_INT_STATUS;
+               bit = DPD_HOTPLUG_LIVE_STATUS;
                break;
        default:
                return connector_status_unknown;
        }
 
-       temp = I915_READ(PORT_HOTPLUG_STAT);
-
-       if ((temp & bit) == 0)
+       if ((I915_READ(PORT_HOTPLUG_STAT) & bit) == 0)
                return connector_status_disconnected;
 
        return intel_dp_detect_dpcd(intel_dp);
@@ -2520,19 +2525,19 @@ intel_dp_init(struct drm_device *dev, int output_reg)
                case DP_B:
                case PCH_DP_B:
                        dev_priv->hotplug_supported_mask |=
-                               HDMIB_HOTPLUG_INT_STATUS;
+                               DPB_HOTPLUG_INT_STATUS;
                        name = "DPDDC-B";
                        break;
                case DP_C:
                case PCH_DP_C:
                        dev_priv->hotplug_supported_mask |=
-                               HDMIC_HOTPLUG_INT_STATUS;
+                               DPC_HOTPLUG_INT_STATUS;
                        name = "DPDDC-C";
                        break;
                case DP_D:
                case PCH_DP_D:
                        dev_priv->hotplug_supported_mask |=
-                               HDMID_HOTPLUG_INT_STATUS;
+                               DPD_HOTPLUG_INT_STATUS;
                        name = "DPDDC-D";
                        break;
        }