aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/gpu/drm/i915/intel_display.c20
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c13
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
3 files changed, 17 insertions, 18 deletions
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 2113f401f0ba..996e0c37293c 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -14554,6 +14554,8 @@ static void intel_setup_outputs(struct drm_device *dev)
14554 if (I915_READ(PCH_DP_D) & DP_DETECTED) 14554 if (I915_READ(PCH_DP_D) & DP_DETECTED)
14555 intel_dp_init(dev, PCH_DP_D, PORT_D); 14555 intel_dp_init(dev, PCH_DP_D, PORT_D);
14556 } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) { 14556 } else if (IS_VALLEYVIEW(dev) || IS_CHERRYVIEW(dev)) {
14557 bool has_edp;
14558
14557 /* 14559 /*
14558 * The DP_DETECTED bit is the latched state of the DDC 14560 * The DP_DETECTED bit is the latched state of the DDC
14559 * SDA pin at boot. However since eDP doesn't require DDC 14561 * SDA pin at boot. However since eDP doesn't require DDC
@@ -14563,19 +14565,17 @@ static void intel_setup_outputs(struct drm_device *dev)
14563 * eDP ports. Consult the VBT as well as DP_DETECTED to 14565 * eDP ports. Consult the VBT as well as DP_DETECTED to
14564 * detect eDP ports. 14566 * detect eDP ports.
14565 */ 14567 */
14566 if (I915_READ(VLV_HDMIB) & SDVO_DETECTED && 14568 has_edp = intel_dp_is_edp(dev, PORT_B);
14567 !intel_dp_is_edp(dev, PORT_B)) 14569 if (I915_READ(VLV_DP_B) & DP_DETECTED || has_edp)
14570 has_edp &= intel_dp_init(dev, VLV_DP_B, PORT_B);
14571 if (I915_READ(VLV_HDMIB) & SDVO_DETECTED && !has_edp)
14568 intel_hdmi_init(dev, VLV_HDMIB, PORT_B); 14572 intel_hdmi_init(dev, VLV_HDMIB, PORT_B);
14569 if (I915_READ(VLV_DP_B) & DP_DETECTED ||
14570 intel_dp_is_edp(dev, PORT_B))
14571 intel_dp_init(dev, VLV_DP_B, PORT_B);
14572 14573
14573 if (I915_READ(VLV_HDMIC) & SDVO_DETECTED && 14574 has_edp = intel_dp_is_edp(dev, PORT_C);
14574 !intel_dp_is_edp(dev, PORT_C)) 14575 if (I915_READ(VLV_DP_C) & DP_DETECTED || has_edp)
14576 has_edp &= intel_dp_init(dev, VLV_DP_C, PORT_C);
14577 if (I915_READ(VLV_HDMIC) & SDVO_DETECTED && !has_edp)
14575 intel_hdmi_init(dev, VLV_HDMIC, PORT_C); 14578 intel_hdmi_init(dev, VLV_HDMIC, PORT_C);
14576 if (I915_READ(VLV_DP_C) & DP_DETECTED ||
14577 intel_dp_is_edp(dev, PORT_C))
14578 intel_dp_init(dev, VLV_DP_C, PORT_C);
14579 14579
14580 if (IS_CHERRYVIEW(dev)) { 14580 if (IS_CHERRYVIEW(dev)) {
14581 /* eDP not supported on port D, so don't check VBT */ 14581 /* eDP not supported on port D, so don't check VBT */
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index f192f58708c2..2991326842f5 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -5923,9 +5923,9 @@ fail:
5923 return false; 5923 return false;
5924} 5924}
5925 5925
5926void 5926bool intel_dp_init(struct drm_device *dev,
5927intel_dp_init(struct drm_device *dev, 5927 i915_reg_t output_reg,
5928 i915_reg_t output_reg, enum port port) 5928 enum port port)
5929{ 5929{
5930 struct drm_i915_private *dev_priv = dev->dev_private; 5930 struct drm_i915_private *dev_priv = dev->dev_private;
5931 struct intel_digital_port *intel_dig_port; 5931 struct intel_digital_port *intel_dig_port;
@@ -5935,7 +5935,7 @@ intel_dp_init(struct drm_device *dev,
5935 5935
5936 intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL); 5936 intel_dig_port = kzalloc(sizeof(*intel_dig_port), GFP_KERNEL);
5937 if (!intel_dig_port) 5937 if (!intel_dig_port)
5938 return; 5938 return false;
5939 5939
5940 intel_connector = intel_connector_alloc(); 5940 intel_connector = intel_connector_alloc();
5941 if (!intel_connector) 5941 if (!intel_connector)
@@ -5992,7 +5992,7 @@ intel_dp_init(struct drm_device *dev,
5992 if (!intel_dp_init_connector(intel_dig_port, intel_connector)) 5992 if (!intel_dp_init_connector(intel_dig_port, intel_connector))
5993 goto err_init_connector; 5993 goto err_init_connector;
5994 5994
5995 return; 5995 return true;
5996 5996
5997err_init_connector: 5997err_init_connector:
5998 drm_encoder_cleanup(encoder); 5998 drm_encoder_cleanup(encoder);
@@ -6000,8 +6000,7 @@ err_encoder_init:
6000 kfree(intel_connector); 6000 kfree(intel_connector);
6001err_connector_alloc: 6001err_connector_alloc:
6002 kfree(intel_dig_port); 6002 kfree(intel_dig_port);
6003 6003 return false;
6004 return;
6005} 6004}
6006 6005
6007void intel_dp_mst_suspend(struct drm_device *dev) 6006void intel_dp_mst_suspend(struct drm_device *dev)
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
index a28b4aac1e02..4a24b0067a3a 100644
--- a/drivers/gpu/drm/i915/intel_drv.h
+++ b/drivers/gpu/drm/i915/intel_drv.h
@@ -1284,7 +1284,7 @@ void intel_csr_ucode_suspend(struct drm_i915_private *);
1284void intel_csr_ucode_resume(struct drm_i915_private *); 1284void intel_csr_ucode_resume(struct drm_i915_private *);
1285 1285
1286/* intel_dp.c */ 1286/* intel_dp.c */
1287void intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port); 1287bool intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port);
1288bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port, 1288bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port,
1289 struct intel_connector *intel_connector); 1289 struct intel_connector *intel_connector);
1290void intel_dp_set_link_params(struct intel_dp *intel_dp, 1290void intel_dp_set_link_params(struct intel_dp *intel_dp,