diff options
author | Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> | 2017-02-22 01:34:27 -0500 |
---|---|---|
committer | Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com> | 2017-02-27 02:07:51 -0500 |
commit | 79f255a0c99cf5d871161959d91bd7ba711f949f (patch) | |
tree | e41d11346339f8517534ffd2ca39c4685012d0c1 | |
parent | 5432fcaff3cee045ddbd94f29802ee3ac4f50283 (diff) |
drm/i915: Store encoder power domain in struct intel_encoder
The encoder power domain is obviously tied to the encoder, so store it
in struct intel_encoder. This avoids some indirection.
v2: Rebase
Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Reviewed-by: Imre Deak <imre.deak@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/20170222063431.10060-3-ander.conselvan.de.oliveira@intel.com
-rw-r--r-- | drivers/gpu/drm/i915/intel_crt.c | 21 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 31 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp_mst.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dsi.c | 9 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dvo.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_hdmi.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_lvds.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_tv.c | 1 |
12 files changed, 41 insertions, 67 deletions
diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c index 2bf5aca6e37c..8c82607294c6 100644 --- a/drivers/gpu/drm/i915/intel_crt.c +++ b/drivers/gpu/drm/i915/intel_crt.c | |||
@@ -69,12 +69,11 @@ static bool intel_crt_get_hw_state(struct intel_encoder *encoder, | |||
69 | struct drm_device *dev = encoder->base.dev; | 69 | struct drm_device *dev = encoder->base.dev; |
70 | struct drm_i915_private *dev_priv = to_i915(dev); | 70 | struct drm_i915_private *dev_priv = to_i915(dev); |
71 | struct intel_crt *crt = intel_encoder_to_crt(encoder); | 71 | struct intel_crt *crt = intel_encoder_to_crt(encoder); |
72 | enum intel_display_power_domain power_domain; | ||
73 | u32 tmp; | 72 | u32 tmp; |
74 | bool ret; | 73 | bool ret; |
75 | 74 | ||
76 | power_domain = intel_display_port_power_domain(encoder); | 75 | if (!intel_display_power_get_if_enabled(dev_priv, |
77 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 76 | encoder->power_domain)) |
78 | return false; | 77 | return false; |
79 | 78 | ||
80 | ret = false; | 79 | ret = false; |
@@ -91,7 +90,7 @@ static bool intel_crt_get_hw_state(struct intel_encoder *encoder, | |||
91 | 90 | ||
92 | ret = true; | 91 | ret = true; |
93 | out: | 92 | out: |
94 | intel_display_power_put(dev_priv, power_domain); | 93 | intel_display_power_put(dev_priv, encoder->power_domain); |
95 | 94 | ||
96 | return ret; | 95 | return ret; |
97 | } | 96 | } |
@@ -676,7 +675,6 @@ intel_crt_detect(struct drm_connector *connector, bool force) | |||
676 | struct drm_i915_private *dev_priv = to_i915(connector->dev); | 675 | struct drm_i915_private *dev_priv = to_i915(connector->dev); |
677 | struct intel_crt *crt = intel_attached_crt(connector); | 676 | struct intel_crt *crt = intel_attached_crt(connector); |
678 | struct intel_encoder *intel_encoder = &crt->base; | 677 | struct intel_encoder *intel_encoder = &crt->base; |
679 | enum intel_display_power_domain power_domain; | ||
680 | enum drm_connector_status status; | 678 | enum drm_connector_status status; |
681 | struct intel_load_detect_pipe tmp; | 679 | struct intel_load_detect_pipe tmp; |
682 | struct drm_modeset_acquire_ctx ctx; | 680 | struct drm_modeset_acquire_ctx ctx; |
@@ -689,8 +687,7 @@ intel_crt_detect(struct drm_connector *connector, bool force) | |||
689 | if (dmi_check_system(intel_spurious_crt_detect)) | 687 | if (dmi_check_system(intel_spurious_crt_detect)) |
690 | return connector_status_disconnected; | 688 | return connector_status_disconnected; |
691 | 689 | ||
692 | power_domain = intel_display_port_power_domain(intel_encoder); | 690 | intel_display_power_get(dev_priv, intel_encoder->power_domain); |
693 | intel_display_power_get(dev_priv, power_domain); | ||
694 | 691 | ||
695 | if (I915_HAS_HOTPLUG(dev_priv)) { | 692 | if (I915_HAS_HOTPLUG(dev_priv)) { |
696 | /* We can not rely on the HPD pin always being correctly wired | 693 | /* We can not rely on the HPD pin always being correctly wired |
@@ -745,7 +742,7 @@ intel_crt_detect(struct drm_connector *connector, bool force) | |||
745 | drm_modeset_acquire_fini(&ctx); | 742 | drm_modeset_acquire_fini(&ctx); |
746 | 743 | ||
747 | out: | 744 | out: |
748 | intel_display_power_put(dev_priv, power_domain); | 745 | intel_display_power_put(dev_priv, intel_encoder->power_domain); |
749 | return status; | 746 | return status; |
750 | } | 747 | } |
751 | 748 | ||
@@ -761,12 +758,10 @@ static int intel_crt_get_modes(struct drm_connector *connector) | |||
761 | struct drm_i915_private *dev_priv = to_i915(dev); | 758 | struct drm_i915_private *dev_priv = to_i915(dev); |
762 | struct intel_crt *crt = intel_attached_crt(connector); | 759 | struct intel_crt *crt = intel_attached_crt(connector); |
763 | struct intel_encoder *intel_encoder = &crt->base; | 760 | struct intel_encoder *intel_encoder = &crt->base; |
764 | enum intel_display_power_domain power_domain; | ||
765 | int ret; | 761 | int ret; |
766 | struct i2c_adapter *i2c; | 762 | struct i2c_adapter *i2c; |
767 | 763 | ||
768 | power_domain = intel_display_port_power_domain(intel_encoder); | 764 | intel_display_power_get(dev_priv, intel_encoder->power_domain); |
769 | intel_display_power_get(dev_priv, power_domain); | ||
770 | 765 | ||
771 | i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->vbt.crt_ddc_pin); | 766 | i2c = intel_gmbus_get_adapter(dev_priv, dev_priv->vbt.crt_ddc_pin); |
772 | ret = intel_crt_ddc_get_modes(connector, i2c); | 767 | ret = intel_crt_ddc_get_modes(connector, i2c); |
@@ -778,7 +773,7 @@ static int intel_crt_get_modes(struct drm_connector *connector) | |||
778 | ret = intel_crt_ddc_get_modes(connector, i2c); | 773 | ret = intel_crt_ddc_get_modes(connector, i2c); |
779 | 774 | ||
780 | out: | 775 | out: |
781 | intel_display_power_put(dev_priv, power_domain); | 776 | intel_display_power_put(dev_priv, intel_encoder->power_domain); |
782 | 777 | ||
783 | return ret; | 778 | return ret; |
784 | } | 779 | } |
@@ -904,6 +899,8 @@ void intel_crt_init(struct drm_i915_private *dev_priv) | |||
904 | 899 | ||
905 | crt->adpa_reg = adpa_reg; | 900 | crt->adpa_reg = adpa_reg; |
906 | 901 | ||
902 | crt->base.power_domain = POWER_DOMAIN_PORT_CRT; | ||
903 | |||
907 | crt->base.compute_config = intel_crt_compute_config; | 904 | crt->base.compute_config = intel_crt_compute_config; |
908 | if (HAS_PCH_SPLIT(dev_priv)) { | 905 | if (HAS_PCH_SPLIT(dev_priv)) { |
909 | crt->base.disable = pch_disable_crt; | 906 | crt->base.disable = pch_disable_crt; |
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index e2947b7f5079..2cd1cc30b11b 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
@@ -1349,12 +1349,11 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector) | |||
1349 | enum port port = intel_ddi_get_encoder_port(intel_encoder); | 1349 | enum port port = intel_ddi_get_encoder_port(intel_encoder); |
1350 | enum pipe pipe = 0; | 1350 | enum pipe pipe = 0; |
1351 | enum transcoder cpu_transcoder; | 1351 | enum transcoder cpu_transcoder; |
1352 | enum intel_display_power_domain power_domain; | ||
1353 | uint32_t tmp; | 1352 | uint32_t tmp; |
1354 | bool ret; | 1353 | bool ret; |
1355 | 1354 | ||
1356 | power_domain = intel_display_port_power_domain(intel_encoder); | 1355 | if (!intel_display_power_get_if_enabled(dev_priv, |
1357 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 1356 | intel_encoder->power_domain)) |
1358 | return false; | 1357 | return false; |
1359 | 1358 | ||
1360 | if (!intel_encoder->get_hw_state(intel_encoder, &pipe)) { | 1359 | if (!intel_encoder->get_hw_state(intel_encoder, &pipe)) { |
@@ -1396,7 +1395,7 @@ bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector) | |||
1396 | } | 1395 | } |
1397 | 1396 | ||
1398 | out: | 1397 | out: |
1399 | intel_display_power_put(dev_priv, power_domain); | 1398 | intel_display_power_put(dev_priv, intel_encoder->power_domain); |
1400 | 1399 | ||
1401 | return ret; | 1400 | return ret; |
1402 | } | 1401 | } |
@@ -1407,13 +1406,12 @@ bool intel_ddi_get_hw_state(struct intel_encoder *encoder, | |||
1407 | struct drm_device *dev = encoder->base.dev; | 1406 | struct drm_device *dev = encoder->base.dev; |
1408 | struct drm_i915_private *dev_priv = to_i915(dev); | 1407 | struct drm_i915_private *dev_priv = to_i915(dev); |
1409 | enum port port = intel_ddi_get_encoder_port(encoder); | 1408 | enum port port = intel_ddi_get_encoder_port(encoder); |
1410 | enum intel_display_power_domain power_domain; | ||
1411 | u32 tmp; | 1409 | u32 tmp; |
1412 | int i; | 1410 | int i; |
1413 | bool ret; | 1411 | bool ret; |
1414 | 1412 | ||
1415 | power_domain = intel_display_port_power_domain(encoder); | 1413 | if (!intel_display_power_get_if_enabled(dev_priv, |
1416 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 1414 | encoder->power_domain)) |
1417 | return false; | 1415 | return false; |
1418 | 1416 | ||
1419 | ret = false; | 1417 | ret = false; |
@@ -1470,7 +1468,7 @@ out: | |||
1470 | "(PHY_CTL %08x)\n", port_name(port), tmp); | 1468 | "(PHY_CTL %08x)\n", port_name(port), tmp); |
1471 | } | 1469 | } |
1472 | 1470 | ||
1473 | intel_display_power_put(dev_priv, power_domain); | 1471 | intel_display_power_put(dev_priv, encoder->power_domain); |
1474 | 1472 | ||
1475 | return ret; | 1473 | return ret; |
1476 | } | 1474 | } |
@@ -2237,6 +2235,7 @@ void intel_ddi_init(struct drm_i915_private *dev_priv, enum port port) | |||
2237 | intel_dig_port->max_lanes = max_lanes; | 2235 | intel_dig_port->max_lanes = max_lanes; |
2238 | 2236 | ||
2239 | intel_encoder->type = INTEL_OUTPUT_UNKNOWN; | 2237 | intel_encoder->type = INTEL_OUTPUT_UNKNOWN; |
2238 | intel_encoder->power_domain = intel_port_to_power_domain(port); | ||
2240 | intel_encoder->port = port; | 2239 | intel_encoder->port = port; |
2241 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); | 2240 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1) | (1 << 2); |
2242 | intel_encoder->cloneable = 0; | 2241 | intel_encoder->cloneable = 0; |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index e9fb2edb9dd7..bad4a692d36f 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -5568,7 +5568,7 @@ static void i9xx_pfit_enable(struct intel_crtc *crtc) | |||
5568 | I915_WRITE(BCLRPAT(crtc->pipe), 0); | 5568 | I915_WRITE(BCLRPAT(crtc->pipe), 0); |
5569 | } | 5569 | } |
5570 | 5570 | ||
5571 | static enum intel_display_power_domain port_to_power_domain(enum port port) | 5571 | enum intel_display_power_domain intel_port_to_power_domain(enum port port) |
5572 | { | 5572 | { |
5573 | switch (port) { | 5573 | switch (port) { |
5574 | case PORT_A: | 5574 | case PORT_A: |
@@ -5587,33 +5587,6 @@ static enum intel_display_power_domain port_to_power_domain(enum port port) | |||
5587 | } | 5587 | } |
5588 | } | 5588 | } |
5589 | 5589 | ||
5590 | enum intel_display_power_domain | ||
5591 | intel_display_port_power_domain(struct intel_encoder *intel_encoder) | ||
5592 | { | ||
5593 | struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev); | ||
5594 | struct intel_digital_port *intel_dig_port; | ||
5595 | |||
5596 | switch (intel_encoder->type) { | ||
5597 | case INTEL_OUTPUT_UNKNOWN: | ||
5598 | /* Only DDI platforms should ever use this output type */ | ||
5599 | WARN_ON_ONCE(!HAS_DDI(dev_priv)); | ||
5600 | case INTEL_OUTPUT_DP: | ||
5601 | case INTEL_OUTPUT_HDMI: | ||
5602 | case INTEL_OUTPUT_EDP: | ||
5603 | intel_dig_port = enc_to_dig_port(&intel_encoder->base); | ||
5604 | return port_to_power_domain(intel_dig_port->port); | ||
5605 | case INTEL_OUTPUT_DP_MST: | ||
5606 | intel_dig_port = enc_to_mst(&intel_encoder->base)->primary; | ||
5607 | return port_to_power_domain(intel_dig_port->port); | ||
5608 | case INTEL_OUTPUT_ANALOG: | ||
5609 | return POWER_DOMAIN_PORT_CRT; | ||
5610 | case INTEL_OUTPUT_DSI: | ||
5611 | return POWER_DOMAIN_PORT_DSI; | ||
5612 | default: | ||
5613 | return POWER_DOMAIN_PORT_OTHER; | ||
5614 | } | ||
5615 | } | ||
5616 | |||
5617 | static u64 get_crtc_power_domains(struct drm_crtc *crtc, | 5590 | static u64 get_crtc_power_domains(struct drm_crtc *crtc, |
5618 | struct intel_crtc_state *crtc_state) | 5591 | struct intel_crtc_state *crtc_state) |
5619 | { | 5592 | { |
@@ -5637,7 +5610,7 @@ static u64 get_crtc_power_domains(struct drm_crtc *crtc, | |||
5637 | drm_for_each_encoder_mask(encoder, dev, crtc_state->base.encoder_mask) { | 5610 | drm_for_each_encoder_mask(encoder, dev, crtc_state->base.encoder_mask) { |
5638 | struct intel_encoder *intel_encoder = to_intel_encoder(encoder); | 5611 | struct intel_encoder *intel_encoder = to_intel_encoder(encoder); |
5639 | 5612 | ||
5640 | mask |= BIT_ULL(intel_display_port_power_domain(intel_encoder)); | 5613 | mask |= BIT_ULL(intel_encoder->power_domain); |
5641 | } | 5614 | } |
5642 | 5615 | ||
5643 | if (HAS_DDI(dev_priv) && crtc_state->has_audio) | 5616 | if (HAS_DDI(dev_priv) && crtc_state->has_audio) |
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index aa0c79087bbf..fd96a6cf7326 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -2496,12 +2496,11 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder, | |||
2496 | enum port port = dp_to_dig_port(intel_dp)->port; | 2496 | enum port port = dp_to_dig_port(intel_dp)->port; |
2497 | struct drm_device *dev = encoder->base.dev; | 2497 | struct drm_device *dev = encoder->base.dev; |
2498 | struct drm_i915_private *dev_priv = to_i915(dev); | 2498 | struct drm_i915_private *dev_priv = to_i915(dev); |
2499 | enum intel_display_power_domain power_domain; | ||
2500 | u32 tmp; | 2499 | u32 tmp; |
2501 | bool ret; | 2500 | bool ret; |
2502 | 2501 | ||
2503 | power_domain = intel_display_port_power_domain(encoder); | 2502 | if (!intel_display_power_get_if_enabled(dev_priv, |
2504 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 2503 | encoder->power_domain)) |
2505 | return false; | 2504 | return false; |
2506 | 2505 | ||
2507 | ret = false; | 2506 | ret = false; |
@@ -2537,7 +2536,7 @@ static bool intel_dp_get_hw_state(struct intel_encoder *encoder, | |||
2537 | ret = true; | 2536 | ret = true; |
2538 | 2537 | ||
2539 | out: | 2538 | out: |
2540 | intel_display_power_put(dev_priv, power_domain); | 2539 | intel_display_power_put(dev_priv, encoder->power_domain); |
2541 | 2540 | ||
2542 | return ret; | 2541 | return ret; |
2543 | } | 2542 | } |
@@ -6097,6 +6096,7 @@ bool intel_dp_init(struct drm_i915_private *dev_priv, | |||
6097 | intel_dig_port->max_lanes = 4; | 6096 | intel_dig_port->max_lanes = 4; |
6098 | 6097 | ||
6099 | intel_encoder->type = INTEL_OUTPUT_DP; | 6098 | intel_encoder->type = INTEL_OUTPUT_DP; |
6099 | intel_encoder->power_domain = intel_port_to_power_domain(port); | ||
6100 | if (IS_CHERRYVIEW(dev_priv)) { | 6100 | if (IS_CHERRYVIEW(dev_priv)) { |
6101 | if (port == PORT_D) | 6101 | if (port == PORT_D) |
6102 | intel_encoder->crtc_mask = 1 << 2; | 6102 | intel_encoder->crtc_mask = 1 << 2; |
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index 6a85d388f936..d94fd4b80963 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c | |||
@@ -548,6 +548,7 @@ intel_dp_create_fake_mst_encoder(struct intel_digital_port *intel_dig_port, enum | |||
548 | DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe)); | 548 | DRM_MODE_ENCODER_DPMST, "DP-MST %c", pipe_name(pipe)); |
549 | 549 | ||
550 | intel_encoder->type = INTEL_OUTPUT_DP_MST; | 550 | intel_encoder->type = INTEL_OUTPUT_DP_MST; |
551 | intel_encoder->power_domain = intel_dig_port->base.power_domain; | ||
551 | intel_encoder->port = intel_dig_port->port; | 552 | intel_encoder->port = intel_dig_port->port; |
552 | intel_encoder->crtc_mask = 0x7; | 553 | intel_encoder->crtc_mask = 0x7; |
553 | intel_encoder->cloneable = 0; | 554 | intel_encoder->cloneable = 0; |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index f2c717a42f30..82f8f828539b 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -249,6 +249,7 @@ struct intel_encoder { | |||
249 | void (*suspend)(struct intel_encoder *); | 249 | void (*suspend)(struct intel_encoder *); |
250 | int crtc_mask; | 250 | int crtc_mask; |
251 | enum hpd_pin hpd_pin; | 251 | enum hpd_pin hpd_pin; |
252 | enum intel_display_power_domain power_domain; | ||
252 | /* for communication with audio component; protected by av_mutex */ | 253 | /* for communication with audio component; protected by av_mutex */ |
253 | const struct drm_connector *audio_connector; | 254 | const struct drm_connector *audio_connector; |
254 | }; | 255 | }; |
@@ -1420,8 +1421,7 @@ int chv_calc_dpll_params(int refclk, struct dpll *pll_clock); | |||
1420 | bool intel_crtc_active(struct intel_crtc *crtc); | 1421 | bool intel_crtc_active(struct intel_crtc *crtc); |
1421 | void hsw_enable_ips(struct intel_crtc *crtc); | 1422 | void hsw_enable_ips(struct intel_crtc *crtc); |
1422 | void hsw_disable_ips(struct intel_crtc *crtc); | 1423 | void hsw_disable_ips(struct intel_crtc *crtc); |
1423 | enum intel_display_power_domain | 1424 | enum intel_display_power_domain intel_port_to_power_domain(enum port port); |
1424 | intel_display_port_power_domain(struct intel_encoder *intel_encoder); | ||
1425 | void intel_mode_from_pipe_config(struct drm_display_mode *mode, | 1425 | void intel_mode_from_pipe_config(struct drm_display_mode *mode, |
1426 | struct intel_crtc_state *pipe_config); | 1426 | struct intel_crtc_state *pipe_config); |
1427 | 1427 | ||
diff --git a/drivers/gpu/drm/i915/intel_dsi.c b/drivers/gpu/drm/i915/intel_dsi.c index c26fe4fc0819..d7ffb9ac3c8a 100644 --- a/drivers/gpu/drm/i915/intel_dsi.c +++ b/drivers/gpu/drm/i915/intel_dsi.c | |||
@@ -775,14 +775,13 @@ static bool intel_dsi_get_hw_state(struct intel_encoder *encoder, | |||
775 | { | 775 | { |
776 | struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); | 776 | struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); |
777 | struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base); | 777 | struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base); |
778 | enum intel_display_power_domain power_domain; | ||
779 | enum port port; | 778 | enum port port; |
780 | bool active = false; | 779 | bool active = false; |
781 | 780 | ||
782 | DRM_DEBUG_KMS("\n"); | 781 | DRM_DEBUG_KMS("\n"); |
783 | 782 | ||
784 | power_domain = intel_display_port_power_domain(encoder); | 783 | if (!intel_display_power_get_if_enabled(dev_priv, |
785 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 784 | encoder->power_domain)) |
786 | return false; | 785 | return false; |
787 | 786 | ||
788 | /* | 787 | /* |
@@ -838,7 +837,7 @@ static bool intel_dsi_get_hw_state(struct intel_encoder *encoder, | |||
838 | } | 837 | } |
839 | 838 | ||
840 | out_put_power: | 839 | out_put_power: |
841 | intel_display_power_put(dev_priv, power_domain); | 840 | intel_display_power_put(dev_priv, encoder->power_domain); |
842 | 841 | ||
843 | return active; | 842 | return active; |
844 | } | 843 | } |
@@ -1516,6 +1515,7 @@ void intel_dsi_init(struct drm_i915_private *dev_priv) | |||
1516 | intel_connector->get_hw_state = intel_connector_get_hw_state; | 1515 | intel_connector->get_hw_state = intel_connector_get_hw_state; |
1517 | 1516 | ||
1518 | intel_encoder->port = port; | 1517 | intel_encoder->port = port; |
1518 | |||
1519 | /* | 1519 | /* |
1520 | * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI | 1520 | * On BYT/CHV, pipe A maps to MIPI DSI port A, pipe B maps to MIPI DSI |
1521 | * port C. BXT isn't limited like this. | 1521 | * port C. BXT isn't limited like this. |
@@ -1603,6 +1603,7 @@ void intel_dsi_init(struct drm_i915_private *dev_priv) | |||
1603 | } | 1603 | } |
1604 | 1604 | ||
1605 | intel_encoder->type = INTEL_OUTPUT_DSI; | 1605 | intel_encoder->type = INTEL_OUTPUT_DSI; |
1606 | intel_encoder->power_domain = POWER_DOMAIN_PORT_DSI; | ||
1606 | intel_encoder->cloneable = 0; | 1607 | intel_encoder->cloneable = 0; |
1607 | drm_connector_init(dev, connector, &intel_dsi_connector_funcs, | 1608 | drm_connector_init(dev, connector, &intel_dsi_connector_funcs, |
1608 | DRM_MODE_CONNECTOR_DSI); | 1609 | DRM_MODE_CONNECTOR_DSI); |
diff --git a/drivers/gpu/drm/i915/intel_dvo.c b/drivers/gpu/drm/i915/intel_dvo.c index 50da89dcb92b..6025839ed3b7 100644 --- a/drivers/gpu/drm/i915/intel_dvo.c +++ b/drivers/gpu/drm/i915/intel_dvo.c | |||
@@ -515,6 +515,7 @@ void intel_dvo_init(struct drm_i915_private *dev_priv) | |||
515 | "DVO %c", port_name(port)); | 515 | "DVO %c", port_name(port)); |
516 | 516 | ||
517 | intel_encoder->type = INTEL_OUTPUT_DVO; | 517 | intel_encoder->type = INTEL_OUTPUT_DVO; |
518 | intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER; | ||
518 | intel_encoder->port = port; | 519 | intel_encoder->port = port; |
519 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1); | 520 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1); |
520 | 521 | ||
diff --git a/drivers/gpu/drm/i915/intel_hdmi.c b/drivers/gpu/drm/i915/intel_hdmi.c index 6c83442e2152..048f76d329bb 100644 --- a/drivers/gpu/drm/i915/intel_hdmi.c +++ b/drivers/gpu/drm/i915/intel_hdmi.c | |||
@@ -901,12 +901,11 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, | |||
901 | struct drm_device *dev = encoder->base.dev; | 901 | struct drm_device *dev = encoder->base.dev; |
902 | struct drm_i915_private *dev_priv = to_i915(dev); | 902 | struct drm_i915_private *dev_priv = to_i915(dev); |
903 | struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); | 903 | struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); |
904 | enum intel_display_power_domain power_domain; | ||
905 | u32 tmp; | 904 | u32 tmp; |
906 | bool ret; | 905 | bool ret; |
907 | 906 | ||
908 | power_domain = intel_display_port_power_domain(encoder); | 907 | if (!intel_display_power_get_if_enabled(dev_priv, |
909 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 908 | encoder->power_domain)) |
910 | return false; | 909 | return false; |
911 | 910 | ||
912 | ret = false; | 911 | ret = false; |
@@ -926,7 +925,7 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder, | |||
926 | ret = true; | 925 | ret = true; |
927 | 926 | ||
928 | out: | 927 | out: |
929 | intel_display_power_put(dev_priv, power_domain); | 928 | intel_display_power_put(dev_priv, encoder->power_domain); |
930 | 929 | ||
931 | return ret; | 930 | return ret; |
932 | } | 931 | } |
@@ -1980,6 +1979,7 @@ void intel_hdmi_init(struct drm_i915_private *dev_priv, | |||
1980 | } | 1979 | } |
1981 | 1980 | ||
1982 | intel_encoder->type = INTEL_OUTPUT_HDMI; | 1981 | intel_encoder->type = INTEL_OUTPUT_HDMI; |
1982 | intel_encoder->power_domain = intel_port_to_power_domain(port); | ||
1983 | intel_encoder->port = port; | 1983 | intel_encoder->port = port; |
1984 | if (IS_CHERRYVIEW(dev_priv)) { | 1984 | if (IS_CHERRYVIEW(dev_priv)) { |
1985 | if (port == PORT_D) | 1985 | if (port == PORT_D) |
diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c index 9ca4dc4d2378..8b942ef2b3ec 100644 --- a/drivers/gpu/drm/i915/intel_lvds.c +++ b/drivers/gpu/drm/i915/intel_lvds.c | |||
@@ -91,12 +91,11 @@ static bool intel_lvds_get_hw_state(struct intel_encoder *encoder, | |||
91 | struct drm_device *dev = encoder->base.dev; | 91 | struct drm_device *dev = encoder->base.dev; |
92 | struct drm_i915_private *dev_priv = to_i915(dev); | 92 | struct drm_i915_private *dev_priv = to_i915(dev); |
93 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); | 93 | struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base); |
94 | enum intel_display_power_domain power_domain; | ||
95 | u32 tmp; | 94 | u32 tmp; |
96 | bool ret; | 95 | bool ret; |
97 | 96 | ||
98 | power_domain = intel_display_port_power_domain(encoder); | 97 | if (!intel_display_power_get_if_enabled(dev_priv, |
99 | if (!intel_display_power_get_if_enabled(dev_priv, power_domain)) | 98 | encoder->power_domain)) |
100 | return false; | 99 | return false; |
101 | 100 | ||
102 | ret = false; | 101 | ret = false; |
@@ -114,7 +113,7 @@ static bool intel_lvds_get_hw_state(struct intel_encoder *encoder, | |||
114 | ret = true; | 113 | ret = true; |
115 | 114 | ||
116 | out: | 115 | out: |
117 | intel_display_power_put(dev_priv, power_domain); | 116 | intel_display_power_put(dev_priv, encoder->power_domain); |
118 | 117 | ||
119 | return ret; | 118 | return ret; |
120 | } | 119 | } |
@@ -1066,6 +1065,7 @@ void intel_lvds_init(struct drm_i915_private *dev_priv) | |||
1066 | intel_connector_attach_encoder(intel_connector, intel_encoder); | 1065 | intel_connector_attach_encoder(intel_connector, intel_encoder); |
1067 | 1066 | ||
1068 | intel_encoder->type = INTEL_OUTPUT_LVDS; | 1067 | intel_encoder->type = INTEL_OUTPUT_LVDS; |
1068 | intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER; | ||
1069 | intel_encoder->port = PORT_NONE; | 1069 | intel_encoder->port = PORT_NONE; |
1070 | intel_encoder->cloneable = 0; | 1070 | intel_encoder->cloneable = 0; |
1071 | if (HAS_PCH_SPLIT(dev_priv)) | 1071 | if (HAS_PCH_SPLIT(dev_priv)) |
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c index 2ad13903a054..816a6f5a3fd9 100644 --- a/drivers/gpu/drm/i915/intel_sdvo.c +++ b/drivers/gpu/drm/i915/intel_sdvo.c | |||
@@ -2981,6 +2981,7 @@ bool intel_sdvo_init(struct drm_i915_private *dev_priv, | |||
2981 | /* encoder type will be decided later */ | 2981 | /* encoder type will be decided later */ |
2982 | intel_encoder = &intel_sdvo->base; | 2982 | intel_encoder = &intel_sdvo->base; |
2983 | intel_encoder->type = INTEL_OUTPUT_SDVO; | 2983 | intel_encoder->type = INTEL_OUTPUT_SDVO; |
2984 | intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER; | ||
2984 | intel_encoder->port = port; | 2985 | intel_encoder->port = port; |
2985 | drm_encoder_init(&dev_priv->drm, &intel_encoder->base, | 2986 | drm_encoder_init(&dev_priv->drm, &intel_encoder->base, |
2986 | &intel_sdvo_enc_funcs, 0, | 2987 | &intel_sdvo_enc_funcs, 0, |
diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c index eb692e4ffe01..6ed1a3ce47b7 100644 --- a/drivers/gpu/drm/i915/intel_tv.c +++ b/drivers/gpu/drm/i915/intel_tv.c | |||
@@ -1621,6 +1621,7 @@ intel_tv_init(struct drm_i915_private *dev_priv) | |||
1621 | intel_connector_attach_encoder(intel_connector, intel_encoder); | 1621 | intel_connector_attach_encoder(intel_connector, intel_encoder); |
1622 | 1622 | ||
1623 | intel_encoder->type = INTEL_OUTPUT_TVOUT; | 1623 | intel_encoder->type = INTEL_OUTPUT_TVOUT; |
1624 | intel_encoder->power_domain = POWER_DOMAIN_PORT_OTHER; | ||
1624 | intel_encoder->port = PORT_NONE; | 1625 | intel_encoder->port = PORT_NONE; |
1625 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1); | 1626 | intel_encoder->crtc_mask = (1 << 0) | (1 << 1); |
1626 | intel_encoder->cloneable = 0; | 1627 | intel_encoder->cloneable = 0; |