aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c34
1 files changed, 22 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 23599c36503f..cbc06596659a 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -2356,15 +2356,18 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
2356 struct drm_i915_private *dev_priv = dev->dev_private; 2356 struct drm_i915_private *dev_priv = dev->dev_private;
2357 enum intel_display_power_domain power_domain; 2357 enum intel_display_power_domain power_domain;
2358 u32 tmp; 2358 u32 tmp;
2359 bool ret;
2359 2360
2360 power_domain = intel_display_port_power_domain(encoder); 2361 power_domain = intel_display_port_power_domain(encoder);
2361 if (!intel_display_power_is_enabled(dev_priv, power_domain)) 2362 if (!intel_display_power_get_if_enabled(dev_priv, power_domain))
2362 return false; 2363 return false;
2363 2364
2365 ret = false;
2366
2364 tmp = I915_READ(intel_dp->output_reg); 2367 tmp = I915_READ(intel_dp->output_reg);
2365 2368
2366 if (!(tmp & DP_PORT_EN)) 2369 if (!(tmp & DP_PORT_EN))
2367 return false; 2370 goto out;
2368 2371
2369 if (IS_GEN7(dev) && port == PORT_A) { 2372 if (IS_GEN7(dev) && port == PORT_A) {
2370 *pipe = PORT_TO_PIPE_CPT(tmp); 2373 *pipe = PORT_TO_PIPE_CPT(tmp);
@@ -2375,7 +2378,9 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
2375 u32 trans_dp = I915_READ(TRANS_DP_CTL(p)); 2378 u32 trans_dp = I915_READ(TRANS_DP_CTL(p));
2376 if (TRANS_DP_PIPE_TO_PORT(trans_dp) == port) { 2379 if (TRANS_DP_PIPE_TO_PORT(trans_dp) == port) {
2377 *pipe = p; 2380 *pipe = p;
2378 return true; 2381 ret = true;
2382
2383 goto out;
2379 } 2384 }
2380 } 2385 }
2381 2386
@@ -2387,7 +2392,12 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder,
2387 *pipe = PORT_TO_PIPE(tmp); 2392 *pipe = PORT_TO_PIPE(tmp);
2388 } 2393 }
2389 2394
2390 return true; 2395 ret = true;
2396
2397out:
2398 intel_display_power_put(dev_priv, power_domain);
2399
2400 return ret;
2391} 2401}
2392 2402
2393static void intel_dp_get_config(struct intel_encoder *encoder, 2403static void intel_dp_get_config(struct intel_encoder *encoder,
@@ -4487,20 +4497,20 @@ static bool g4x_digital_port_connected(struct drm_i915_private *dev_priv,
4487 return I915_READ(PORT_HOTPLUG_STAT) & bit; 4497 return I915_READ(PORT_HOTPLUG_STAT) & bit;
4488} 4498}
4489 4499
4490static bool vlv_digital_port_connected(struct drm_i915_private *dev_priv, 4500static bool gm45_digital_port_connected(struct drm_i915_private *dev_priv,
4491 struct intel_digital_port *port) 4501 struct intel_digital_port *port)
4492{ 4502{
4493 u32 bit; 4503 u32 bit;
4494 4504
4495 switch (port->port) { 4505 switch (port->port) {
4496 case PORT_B: 4506 case PORT_B:
4497 bit = PORTB_HOTPLUG_LIVE_STATUS_VLV; 4507 bit = PORTB_HOTPLUG_LIVE_STATUS_GM45;
4498 break; 4508 break;
4499 case PORT_C: 4509 case PORT_C:
4500 bit = PORTC_HOTPLUG_LIVE_STATUS_VLV; 4510 bit = PORTC_HOTPLUG_LIVE_STATUS_GM45;
4501 break; 4511 break;
4502 case PORT_D: 4512 case PORT_D:
4503 bit = PORTD_HOTPLUG_LIVE_STATUS_VLV; 4513 bit = PORTD_HOTPLUG_LIVE_STATUS_GM45;
4504 break; 4514 break;
4505 default: 4515 default:
4506 MISSING_CASE(port->port); 4516 MISSING_CASE(port->port);
@@ -4548,12 +4558,12 @@ bool intel_digital_port_connected(struct drm_i915_private *dev_priv,
4548{ 4558{
4549 if (HAS_PCH_IBX(dev_priv)) 4559 if (HAS_PCH_IBX(dev_priv))
4550 return ibx_digital_port_connected(dev_priv, port); 4560 return ibx_digital_port_connected(dev_priv, port);
4551 if (HAS_PCH_SPLIT(dev_priv)) 4561 else if (HAS_PCH_SPLIT(dev_priv))
4552 return cpt_digital_port_connected(dev_priv, port); 4562 return cpt_digital_port_connected(dev_priv, port);
4553 else if (IS_BROXTON(dev_priv)) 4563 else if (IS_BROXTON(dev_priv))
4554 return bxt_digital_port_connected(dev_priv, port); 4564 return bxt_digital_port_connected(dev_priv, port);
4555 else if (IS_VALLEYVIEW(dev_priv) || IS_CHERRYVIEW(dev_priv)) 4565 else if (IS_GM45(dev_priv))
4556 return vlv_digital_port_connected(dev_priv, port); 4566 return gm45_digital_port_connected(dev_priv, port);
4557 else 4567 else
4558 return g4x_digital_port_connected(dev_priv, port); 4568 return g4x_digital_port_connected(dev_priv, port);
4559} 4569}