diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp.c | 51 |
1 files changed, 16 insertions, 35 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c index 09bdd94ca3ba..78b8ec84d576 100644 --- a/drivers/gpu/drm/i915/intel_dp.c +++ b/drivers/gpu/drm/i915/intel_dp.c | |||
@@ -277,7 +277,7 @@ static void pps_lock(struct intel_dp *intel_dp) | |||
277 | * See vlv_power_sequencer_reset() why we need | 277 | * See vlv_power_sequencer_reset() why we need |
278 | * a power domain reference here. | 278 | * a power domain reference here. |
279 | */ | 279 | */ |
280 | power_domain = intel_display_port_power_domain(encoder); | 280 | power_domain = intel_display_port_aux_power_domain(encoder); |
281 | intel_display_power_get(dev_priv, power_domain); | 281 | intel_display_power_get(dev_priv, power_domain); |
282 | 282 | ||
283 | mutex_lock(&dev_priv->pps_mutex); | 283 | mutex_lock(&dev_priv->pps_mutex); |
@@ -293,7 +293,7 @@ static void pps_unlock(struct intel_dp *intel_dp) | |||
293 | 293 | ||
294 | mutex_unlock(&dev_priv->pps_mutex); | 294 | mutex_unlock(&dev_priv->pps_mutex); |
295 | 295 | ||
296 | power_domain = intel_display_port_power_domain(encoder); | 296 | power_domain = intel_display_port_aux_power_domain(encoder); |
297 | intel_display_power_put(dev_priv, power_domain); | 297 | intel_display_power_put(dev_priv, power_domain); |
298 | } | 298 | } |
299 | 299 | ||
@@ -816,8 +816,6 @@ intel_dp_aux_ch(struct intel_dp *intel_dp, | |||
816 | 816 | ||
817 | intel_dp_check_edp(intel_dp); | 817 | intel_dp_check_edp(intel_dp); |
818 | 818 | ||
819 | intel_aux_display_runtime_get(dev_priv); | ||
820 | |||
821 | /* Try to wait for any previous AUX channel activity */ | 819 | /* Try to wait for any previous AUX channel activity */ |
822 | for (try = 0; try < 3; try++) { | 820 | for (try = 0; try < 3; try++) { |
823 | status = I915_READ_NOTRACE(ch_ctl); | 821 | status = I915_READ_NOTRACE(ch_ctl); |
@@ -926,7 +924,6 @@ done: | |||
926 | ret = recv_bytes; | 924 | ret = recv_bytes; |
927 | out: | 925 | out: |
928 | pm_qos_update_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE); | 926 | pm_qos_update_request(&dev_priv->pm_qos, PM_QOS_DEFAULT_VALUE); |
929 | intel_aux_display_runtime_put(dev_priv); | ||
930 | 927 | ||
931 | if (vdd) | 928 | if (vdd) |
932 | edp_panel_vdd_off(intel_dp, false); | 929 | edp_panel_vdd_off(intel_dp, false); |
@@ -1784,7 +1781,7 @@ static bool edp_panel_vdd_on(struct intel_dp *intel_dp) | |||
1784 | if (edp_have_panel_vdd(intel_dp)) | 1781 | if (edp_have_panel_vdd(intel_dp)) |
1785 | return need_to_disable; | 1782 | return need_to_disable; |
1786 | 1783 | ||
1787 | power_domain = intel_display_port_power_domain(intel_encoder); | 1784 | power_domain = intel_display_port_aux_power_domain(intel_encoder); |
1788 | intel_display_power_get(dev_priv, power_domain); | 1785 | intel_display_power_get(dev_priv, power_domain); |
1789 | 1786 | ||
1790 | DRM_DEBUG_KMS("Turning eDP port %c VDD on\n", | 1787 | DRM_DEBUG_KMS("Turning eDP port %c VDD on\n", |
@@ -1874,7 +1871,7 @@ static void edp_panel_vdd_off_sync(struct intel_dp *intel_dp) | |||
1874 | if ((pp & POWER_TARGET_ON) == 0) | 1871 | if ((pp & POWER_TARGET_ON) == 0) |
1875 | intel_dp->last_power_cycle = jiffies; | 1872 | intel_dp->last_power_cycle = jiffies; |
1876 | 1873 | ||
1877 | power_domain = intel_display_port_power_domain(intel_encoder); | 1874 | power_domain = intel_display_port_aux_power_domain(intel_encoder); |
1878 | intel_display_power_put(dev_priv, power_domain); | 1875 | intel_display_power_put(dev_priv, power_domain); |
1879 | } | 1876 | } |
1880 | 1877 | ||
@@ -2025,7 +2022,7 @@ static void edp_panel_off(struct intel_dp *intel_dp) | |||
2025 | wait_panel_off(intel_dp); | 2022 | wait_panel_off(intel_dp); |
2026 | 2023 | ||
2027 | /* We got a reference when we enabled the VDD. */ | 2024 | /* We got a reference when we enabled the VDD. */ |
2028 | power_domain = intel_display_port_power_domain(intel_encoder); | 2025 | power_domain = intel_display_port_aux_power_domain(intel_encoder); |
2029 | intel_display_power_put(dev_priv, power_domain); | 2026 | intel_display_power_put(dev_priv, power_domain); |
2030 | } | 2027 | } |
2031 | 2028 | ||
@@ -4765,26 +4762,6 @@ intel_dp_unset_edid(struct intel_dp *intel_dp) | |||
4765 | intel_dp->has_audio = false; | 4762 | intel_dp->has_audio = false; |
4766 | } | 4763 | } |
4767 | 4764 | ||
4768 | static enum intel_display_power_domain | ||
4769 | intel_dp_power_get(struct intel_dp *dp) | ||
4770 | { | ||
4771 | struct intel_encoder *encoder = &dp_to_dig_port(dp)->base; | ||
4772 | enum intel_display_power_domain power_domain; | ||
4773 | |||
4774 | power_domain = intel_display_port_power_domain(encoder); | ||
4775 | intel_display_power_get(to_i915(encoder->base.dev), power_domain); | ||
4776 | |||
4777 | return power_domain; | ||
4778 | } | ||
4779 | |||
4780 | static void | ||
4781 | intel_dp_power_put(struct intel_dp *dp, | ||
4782 | enum intel_display_power_domain power_domain) | ||
4783 | { | ||
4784 | struct intel_encoder *encoder = &dp_to_dig_port(dp)->base; | ||
4785 | intel_display_power_put(to_i915(encoder->base.dev), power_domain); | ||
4786 | } | ||
4787 | |||
4788 | static enum drm_connector_status | 4765 | static enum drm_connector_status |
4789 | intel_dp_detect(struct drm_connector *connector, bool force) | 4766 | intel_dp_detect(struct drm_connector *connector, bool force) |
4790 | { | 4767 | { |
@@ -4808,7 +4785,8 @@ intel_dp_detect(struct drm_connector *connector, bool force) | |||
4808 | return connector_status_disconnected; | 4785 | return connector_status_disconnected; |
4809 | } | 4786 | } |
4810 | 4787 | ||
4811 | power_domain = intel_dp_power_get(intel_dp); | 4788 | power_domain = intel_display_port_aux_power_domain(intel_encoder); |
4789 | intel_display_power_get(to_i915(dev), power_domain); | ||
4812 | 4790 | ||
4813 | /* Can't disconnect eDP, but you can close the lid... */ | 4791 | /* Can't disconnect eDP, but you can close the lid... */ |
4814 | if (is_edp(intel_dp)) | 4792 | if (is_edp(intel_dp)) |
@@ -4853,7 +4831,7 @@ intel_dp_detect(struct drm_connector *connector, bool force) | |||
4853 | } | 4831 | } |
4854 | 4832 | ||
4855 | out: | 4833 | out: |
4856 | intel_dp_power_put(intel_dp, power_domain); | 4834 | intel_display_power_put(to_i915(dev), power_domain); |
4857 | return status; | 4835 | return status; |
4858 | } | 4836 | } |
4859 | 4837 | ||
@@ -4862,6 +4840,7 @@ intel_dp_force(struct drm_connector *connector) | |||
4862 | { | 4840 | { |
4863 | struct intel_dp *intel_dp = intel_attached_dp(connector); | 4841 | struct intel_dp *intel_dp = intel_attached_dp(connector); |
4864 | struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base; | 4842 | struct intel_encoder *intel_encoder = &dp_to_dig_port(intel_dp)->base; |
4843 | struct drm_i915_private *dev_priv = to_i915(intel_encoder->base.dev); | ||
4865 | enum intel_display_power_domain power_domain; | 4844 | enum intel_display_power_domain power_domain; |
4866 | 4845 | ||
4867 | DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", | 4846 | DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", |
@@ -4871,11 +4850,12 @@ intel_dp_force(struct drm_connector *connector) | |||
4871 | if (connector->status != connector_status_connected) | 4850 | if (connector->status != connector_status_connected) |
4872 | return; | 4851 | return; |
4873 | 4852 | ||
4874 | power_domain = intel_dp_power_get(intel_dp); | 4853 | power_domain = intel_display_port_aux_power_domain(intel_encoder); |
4854 | intel_display_power_get(dev_priv, power_domain); | ||
4875 | 4855 | ||
4876 | intel_dp_set_edid(intel_dp); | 4856 | intel_dp_set_edid(intel_dp); |
4877 | 4857 | ||
4878 | intel_dp_power_put(intel_dp, power_domain); | 4858 | intel_display_power_put(dev_priv, power_domain); |
4879 | 4859 | ||
4880 | if (intel_encoder->type != INTEL_OUTPUT_EDP) | 4860 | if (intel_encoder->type != INTEL_OUTPUT_EDP) |
4881 | intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT; | 4861 | intel_encoder->type = INTEL_OUTPUT_DISPLAYPORT; |
@@ -5091,7 +5071,7 @@ static void intel_edp_panel_vdd_sanitize(struct intel_dp *intel_dp) | |||
5091 | * indefinitely. | 5071 | * indefinitely. |
5092 | */ | 5072 | */ |
5093 | DRM_DEBUG_KMS("VDD left on by BIOS, adjusting state tracking\n"); | 5073 | DRM_DEBUG_KMS("VDD left on by BIOS, adjusting state tracking\n"); |
5094 | power_domain = intel_display_port_power_domain(&intel_dig_port->base); | 5074 | power_domain = intel_display_port_aux_power_domain(&intel_dig_port->base); |
5095 | intel_display_power_get(dev_priv, power_domain); | 5075 | intel_display_power_get(dev_priv, power_domain); |
5096 | 5076 | ||
5097 | edp_panel_vdd_schedule_off(intel_dp); | 5077 | edp_panel_vdd_schedule_off(intel_dp); |
@@ -5153,7 +5133,8 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd) | |||
5153 | enum intel_display_power_domain power_domain; | 5133 | enum intel_display_power_domain power_domain; |
5154 | enum irqreturn ret = IRQ_NONE; | 5134 | enum irqreturn ret = IRQ_NONE; |
5155 | 5135 | ||
5156 | if (intel_dig_port->base.type != INTEL_OUTPUT_EDP) | 5136 | if (intel_dig_port->base.type != INTEL_OUTPUT_EDP && |
5137 | intel_dig_port->base.type != INTEL_OUTPUT_HDMI) | ||
5157 | intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT; | 5138 | intel_dig_port->base.type = INTEL_OUTPUT_DISPLAYPORT; |
5158 | 5139 | ||
5159 | if (long_hpd && intel_dig_port->base.type == INTEL_OUTPUT_EDP) { | 5140 | if (long_hpd && intel_dig_port->base.type == INTEL_OUTPUT_EDP) { |
@@ -5172,7 +5153,7 @@ intel_dp_hpd_pulse(struct intel_digital_port *intel_dig_port, bool long_hpd) | |||
5172 | port_name(intel_dig_port->port), | 5153 | port_name(intel_dig_port->port), |
5173 | long_hpd ? "long" : "short"); | 5154 | long_hpd ? "long" : "short"); |
5174 | 5155 | ||
5175 | power_domain = intel_display_port_power_domain(intel_encoder); | 5156 | power_domain = intel_display_port_aux_power_domain(intel_encoder); |
5176 | intel_display_power_get(dev_priv, power_domain); | 5157 | intel_display_power_get(dev_priv, power_domain); |
5177 | 5158 | ||
5178 | if (long_hpd) { | 5159 | if (long_hpd) { |