diff options
author | Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com> | 2016-09-29 02:55:04 -0400 |
---|---|---|
committer | Jani Nikula <jani.nikula@intel.com> | 2016-09-29 04:02:41 -0400 |
commit | be754b101f70076f6375c84db4e8bcc517a4524f (patch) | |
tree | 59583a9b365f817bf995a01cce13ecb8691a0e75 /drivers/gpu | |
parent | 7d7f8633a82763577727762ff3ac1df3017cb8fe (diff) |
Revert "drm/i915: start adding dp mst audio"
This reverts 'commit 3708d5e082c3 ("drm/i915: start adding dp mst audio")'
because it breaks MST multi-monitor setups on some platforms.
Fixes: 3708d5e082c3 ("drm/i915: start adding dp mst audio")
Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97907
Signed-off-by: Dhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>
Reported-by: Kim Lidström <kim@dxtr.im>
Cc: Libin Yang <libin.yang@linux.intel.com>
Cc: Lyude <cpaul@redhat.com>
Cc: Jani Nikula <jani.nikula@intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Link: http://patchwork.freedesktop.org/patch/msgid/1475132104-2754-1-git-send-email-dhinakaran.pandiyan@intel.com
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/i915/i915_debugfs.c | 19 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 20 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_dp_mst.c | 18 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_drv.h | 2 |
4 files changed, 6 insertions, 53 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c index 6dd325145a0a..eb91444707d2 100644 --- a/drivers/gpu/drm/i915/i915_debugfs.c +++ b/drivers/gpu/drm/i915/i915_debugfs.c | |||
@@ -2889,20 +2889,6 @@ static void intel_dp_info(struct seq_file *m, | |||
2889 | &intel_dp->aux); | 2889 | &intel_dp->aux); |
2890 | } | 2890 | } |
2891 | 2891 | ||
2892 | static void intel_dp_mst_info(struct seq_file *m, | ||
2893 | struct intel_connector *intel_connector) | ||
2894 | { | ||
2895 | struct intel_encoder *intel_encoder = intel_connector->encoder; | ||
2896 | struct intel_dp_mst_encoder *intel_mst = | ||
2897 | enc_to_mst(&intel_encoder->base); | ||
2898 | struct intel_digital_port *intel_dig_port = intel_mst->primary; | ||
2899 | struct intel_dp *intel_dp = &intel_dig_port->dp; | ||
2900 | bool has_audio = drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, | ||
2901 | intel_connector->port); | ||
2902 | |||
2903 | seq_printf(m, "\taudio support: %s\n", yesno(has_audio)); | ||
2904 | } | ||
2905 | |||
2906 | static void intel_hdmi_info(struct seq_file *m, | 2892 | static void intel_hdmi_info(struct seq_file *m, |
2907 | struct intel_connector *intel_connector) | 2893 | struct intel_connector *intel_connector) |
2908 | { | 2894 | { |
@@ -2945,10 +2931,7 @@ static void intel_connector_info(struct seq_file *m, | |||
2945 | switch (connector->connector_type) { | 2931 | switch (connector->connector_type) { |
2946 | case DRM_MODE_CONNECTOR_DisplayPort: | 2932 | case DRM_MODE_CONNECTOR_DisplayPort: |
2947 | case DRM_MODE_CONNECTOR_eDP: | 2933 | case DRM_MODE_CONNECTOR_eDP: |
2948 | if (intel_encoder->type == INTEL_OUTPUT_DP_MST) | 2934 | intel_dp_info(m, intel_connector); |
2949 | intel_dp_mst_info(m, intel_connector); | ||
2950 | else | ||
2951 | intel_dp_info(m, intel_connector); | ||
2952 | break; | 2935 | break; |
2953 | case DRM_MODE_CONNECTOR_LVDS: | 2936 | case DRM_MODE_CONNECTOR_LVDS: |
2954 | if (intel_encoder->type == INTEL_OUTPUT_LVDS) | 2937 | if (intel_encoder->type == INTEL_OUTPUT_LVDS) |
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index 07cba6c0b1b5..35f0b7c9d0a6 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c | |||
@@ -2227,19 +2227,6 @@ void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp) | |||
2227 | udelay(600); | 2227 | udelay(600); |
2228 | } | 2228 | } |
2229 | 2229 | ||
2230 | bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv, | ||
2231 | struct intel_crtc *intel_crtc) | ||
2232 | { | ||
2233 | u32 temp; | ||
2234 | |||
2235 | if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) { | ||
2236 | temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); | ||
2237 | if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe)) | ||
2238 | return true; | ||
2239 | } | ||
2240 | return false; | ||
2241 | } | ||
2242 | |||
2243 | void intel_ddi_get_config(struct intel_encoder *encoder, | 2230 | void intel_ddi_get_config(struct intel_encoder *encoder, |
2244 | struct intel_crtc_state *pipe_config) | 2231 | struct intel_crtc_state *pipe_config) |
2245 | { | 2232 | { |
@@ -2305,8 +2292,11 @@ void intel_ddi_get_config(struct intel_encoder *encoder, | |||
2305 | break; | 2292 | break; |
2306 | } | 2293 | } |
2307 | 2294 | ||
2308 | pipe_config->has_audio = | 2295 | if (intel_display_power_is_enabled(dev_priv, POWER_DOMAIN_AUDIO)) { |
2309 | intel_ddi_is_audio_enabled(dev_priv, intel_crtc); | 2296 | temp = I915_READ(HSW_AUD_PIN_ELD_CP_VLD); |
2297 | if (temp & AUDIO_OUTPUT_ENABLE(intel_crtc->pipe)) | ||
2298 | pipe_config->has_audio = true; | ||
2299 | } | ||
2310 | 2300 | ||
2311 | if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp && | 2301 | if (encoder->type == INTEL_OUTPUT_EDP && dev_priv->vbt.edp.bpp && |
2312 | pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) { | 2302 | pipe_config->pipe_bpp > dev_priv->vbt.edp.bpp) { |
diff --git a/drivers/gpu/drm/i915/intel_dp_mst.c b/drivers/gpu/drm/i915/intel_dp_mst.c index 2fc9f81fdd41..3ffbd69e4551 100644 --- a/drivers/gpu/drm/i915/intel_dp_mst.c +++ b/drivers/gpu/drm/i915/intel_dp_mst.c | |||
@@ -37,8 +37,6 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, | |||
37 | struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base); | 37 | struct intel_dp_mst_encoder *intel_mst = enc_to_mst(&encoder->base); |
38 | struct intel_digital_port *intel_dig_port = intel_mst->primary; | 38 | struct intel_digital_port *intel_dig_port = intel_mst->primary; |
39 | struct intel_dp *intel_dp = &intel_dig_port->dp; | 39 | struct intel_dp *intel_dp = &intel_dig_port->dp; |
40 | struct intel_connector *connector = | ||
41 | to_intel_connector(conn_state->connector); | ||
42 | struct drm_atomic_state *state; | 40 | struct drm_atomic_state *state; |
43 | int bpp; | 41 | int bpp; |
44 | int lane_count, slots; | 42 | int lane_count, slots; |
@@ -61,8 +59,6 @@ static bool intel_dp_mst_compute_config(struct intel_encoder *encoder, | |||
61 | 59 | ||
62 | state = pipe_config->base.state; | 60 | state = pipe_config->base.state; |
63 | 61 | ||
64 | if (drm_dp_mst_port_has_audio(&intel_dp->mst_mgr, connector->port)) | ||
65 | pipe_config->has_audio = true; | ||
66 | mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp); | 62 | mst_pbn = drm_dp_calc_pbn_mode(adjusted_mode->crtc_clock, bpp); |
67 | 63 | ||
68 | pipe_config->pbn = mst_pbn; | 64 | pipe_config->pbn = mst_pbn; |
@@ -88,7 +84,6 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder, | |||
88 | struct intel_dp *intel_dp = &intel_dig_port->dp; | 84 | struct intel_dp *intel_dp = &intel_dig_port->dp; |
89 | struct intel_connector *connector = | 85 | struct intel_connector *connector = |
90 | to_intel_connector(old_conn_state->connector); | 86 | to_intel_connector(old_conn_state->connector); |
91 | struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); | ||
92 | int ret; | 87 | int ret; |
93 | 88 | ||
94 | DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); | 89 | DRM_DEBUG_KMS("%d\n", intel_dp->active_mst_links); |
@@ -99,10 +94,6 @@ static void intel_mst_disable_dp(struct intel_encoder *encoder, | |||
99 | if (ret) { | 94 | if (ret) { |
100 | DRM_ERROR("failed to update payload %d\n", ret); | 95 | DRM_ERROR("failed to update payload %d\n", ret); |
101 | } | 96 | } |
102 | if (old_crtc_state->has_audio) { | ||
103 | intel_audio_codec_disable(encoder); | ||
104 | intel_display_power_put(dev_priv, POWER_DOMAIN_AUDIO); | ||
105 | } | ||
106 | } | 97 | } |
107 | 98 | ||
108 | static void intel_mst_post_disable_dp(struct intel_encoder *encoder, | 99 | static void intel_mst_post_disable_dp(struct intel_encoder *encoder, |
@@ -215,12 +206,6 @@ static void intel_mst_enable_dp(struct intel_encoder *encoder, | |||
215 | ret = drm_dp_check_act_status(&intel_dp->mst_mgr); | 206 | ret = drm_dp_check_act_status(&intel_dp->mst_mgr); |
216 | 207 | ||
217 | ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr); | 208 | ret = drm_dp_update_payload_part2(&intel_dp->mst_mgr); |
218 | if (pipe_config->has_audio) { | ||
219 | DRM_DEBUG_DRIVER("Enabling DP audio on pipe %c\n", | ||
220 | pipe_name(intel_mst->pipe)); | ||
221 | intel_display_power_get(dev_priv, POWER_DOMAIN_AUDIO); | ||
222 | intel_audio_codec_enable(encoder); | ||
223 | } | ||
224 | } | 209 | } |
225 | 210 | ||
226 | static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder, | 211 | static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder, |
@@ -243,9 +228,6 @@ static void intel_dp_mst_enc_get_config(struct intel_encoder *encoder, | |||
243 | enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; | 228 | enum transcoder cpu_transcoder = pipe_config->cpu_transcoder; |
244 | u32 temp, flags = 0; | 229 | u32 temp, flags = 0; |
245 | 230 | ||
246 | pipe_config->has_audio = | ||
247 | intel_ddi_is_audio_enabled(dev_priv, crtc); | ||
248 | |||
249 | temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); | 231 | temp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); |
250 | if (temp & TRANS_DDI_PHSYNC) | 232 | if (temp & TRANS_DDI_PHSYNC) |
251 | flags |= DRM_MODE_FLAG_PHSYNC; | 233 | flags |= DRM_MODE_FLAG_PHSYNC; |
diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h index 5fdae7fcee07..3f6c1a8fbd09 100644 --- a/drivers/gpu/drm/i915/intel_drv.h +++ b/drivers/gpu/drm/i915/intel_drv.h | |||
@@ -1156,8 +1156,6 @@ bool intel_ddi_pll_select(struct intel_crtc *crtc, | |||
1156 | void intel_ddi_set_pipe_settings(struct drm_crtc *crtc); | 1156 | void intel_ddi_set_pipe_settings(struct drm_crtc *crtc); |
1157 | void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp); | 1157 | void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp); |
1158 | bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector); | 1158 | bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector); |
1159 | bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv, | ||
1160 | struct intel_crtc *intel_crtc); | ||
1161 | void intel_ddi_get_config(struct intel_encoder *encoder, | 1159 | void intel_ddi_get_config(struct intel_encoder *encoder, |
1162 | struct intel_crtc_state *pipe_config); | 1160 | struct intel_crtc_state *pipe_config); |
1163 | struct intel_encoder * | 1161 | struct intel_encoder * |