]> Pileus Git - ~andy/linux/blobdiff - drivers/gpu/drm/i915/intel_crt.c
Merge tag 'v3.10-rc2' into drm-intel-next-queued
[~andy/linux] / drivers / gpu / drm / i915 / intel_crt.c
index 1ce45a0a2d3e35bed35c03386f4f63a6b9ef0f97..66a0c6f0bb818400d216a4e32136ada0b219b19c 100644 (file)
@@ -199,10 +199,18 @@ static int intel_crt_mode_valid(struct drm_connector *connector,
        return MODE_OK;
 }
 
-static bool intel_crt_mode_fixup(struct drm_encoder *encoder,
-                                const struct drm_display_mode *mode,
-                                struct drm_display_mode *adjusted_mode)
+static bool intel_crt_compute_config(struct intel_encoder *encoder,
+                                    struct intel_crtc_config *pipe_config)
 {
+       struct drm_device *dev = encoder->base.dev;
+
+       if (HAS_PCH_SPLIT(dev))
+               pipe_config->has_pch_encoder = true;
+
+       /* LPT FDI RX only supports 8bpc. */
+       if (HAS_PCH_LPT(dev))
+               pipe_config->pipe_bpp = 24;
+
        return true;
 }
 
@@ -427,7 +435,7 @@ static bool intel_crt_detect_ddc(struct drm_connector *connector)
 
        BUG_ON(crt->base.type != INTEL_OUTPUT_ANALOG);
 
-       i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+       i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->vbt.crt_ddc_pin);
        edid = intel_crt_get_edid(connector, i2c);
 
        if (edid) {
@@ -633,7 +641,7 @@ static int intel_crt_get_modes(struct drm_connector *connector)
        int ret;
        struct i2c_adapter *i2c;
 
-       i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->crt_ddc_pin);
+       i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->vbt.crt_ddc_pin);
        ret = intel_crt_ddc_get_modes(connector, i2c);
        if (ret || !IS_G4X(dev))
                return ret;
@@ -676,7 +684,6 @@ static void intel_crt_reset(struct drm_connector *connector)
  */
 
 static const struct drm_encoder_helper_funcs crt_encoder_funcs = {
-       .mode_fixup = intel_crt_mode_fixup,
        .mode_set = intel_crt_mode_set,
 };
 
@@ -768,8 +775,11 @@ void intel_crt_init(struct drm_device *dev)
        else
                crt->adpa_reg = ADPA;
 
+       crt->base.compute_config = intel_crt_compute_config;
        crt->base.disable = intel_disable_crt;
        crt->base.enable = intel_enable_crt;
+       if (I915_HAS_HOTPLUG(dev))
+               crt->base.hpd_pin = HPD_CRT;
        if (HAS_DDI(dev))
                crt->base.get_hw_state = intel_ddi_get_hw_state;
        else
@@ -781,18 +791,14 @@ void intel_crt_init(struct drm_device *dev)
 
        drm_sysfs_connector_add(connector);
 
-       if (I915_HAS_HOTPLUG(dev))
-               connector->polled = DRM_CONNECTOR_POLL_HPD;
-       else
-               connector->polled = DRM_CONNECTOR_POLL_CONNECT;
+       if (!I915_HAS_HOTPLUG(dev))
+               intel_connector->polled = DRM_CONNECTOR_POLL_CONNECT;
 
        /*
         * Configure the automatic hotplug detection stuff
         */
        crt->force_hotplug_required = 0;
 
-       dev_priv->hotplug_supported_mask |= CRT_HOTPLUG_INT_STATUS;
-
        /*
         * TODO: find a proper way to discover whether we need to set the the
         * polarity and link reversal bits or not, instead of relying on the