diff options
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 13 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 |
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 | ||
5926 | void | 5926 | bool intel_dp_init(struct drm_device *dev, |
5927 | intel_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 | ||
5997 | err_init_connector: | 5997 | err_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); |
6001 | err_connector_alloc: | 6001 | err_connector_alloc: |
6002 | kfree(intel_dig_port); | 6002 | kfree(intel_dig_port); |
6003 | 6003 | return false; | |
6004 | return; | ||
6005 | } | 6004 | } |
6006 | 6005 | ||
6007 | void intel_dp_mst_suspend(struct drm_device *dev) | 6006 | void 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 *); | |||
1284 | void intel_csr_ucode_resume(struct drm_i915_private *); | 1284 | void intel_csr_ucode_resume(struct drm_i915_private *); |
1285 | 1285 | ||
1286 | /* intel_dp.c */ | 1286 | /* intel_dp.c */ |
1287 | void intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port); | 1287 | bool intel_dp_init(struct drm_device *dev, i915_reg_t output_reg, enum port port); |
1288 | bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port, | 1288 | bool intel_dp_init_connector(struct intel_digital_port *intel_dig_port, |
1289 | struct intel_connector *intel_connector); | 1289 | struct intel_connector *intel_connector); |
1290 | void intel_dp_set_link_params(struct intel_dp *intel_dp, | 1290 | void intel_dp_set_link_params(struct intel_dp *intel_dp, |