aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorDhinakaran Pandiyan <dhinakaran.pandiyan@intel.com>2016-09-29 02:55:04 -0400
committerJani Nikula <jani.nikula@intel.com>2016-09-29 04:02:41 -0400
commitbe754b101f70076f6375c84db4e8bcc517a4524f (patch)
tree59583a9b365f817bf995a01cce13ecb8691a0e75 /drivers
parent7d7f8633a82763577727762ff3ac1df3017cb8fe (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')
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c19
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c20
-rw-r--r--drivers/gpu/drm/i915/intel_dp_mst.c18
-rw-r--r--drivers/gpu/drm/i915/intel_drv.h2
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
2892static 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
2906static void intel_hdmi_info(struct seq_file *m, 2892static 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
2230bool 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
2243void intel_ddi_get_config(struct intel_encoder *encoder, 2230void 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
108static void intel_mst_post_disable_dp(struct intel_encoder *encoder, 99static 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
226static bool intel_dp_mst_enc_get_hw_state(struct intel_encoder *encoder, 211static 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,
1156void intel_ddi_set_pipe_settings(struct drm_crtc *crtc); 1156void intel_ddi_set_pipe_settings(struct drm_crtc *crtc);
1157void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp); 1157void intel_ddi_prepare_link_retrain(struct intel_dp *intel_dp);
1158bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector); 1158bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector);
1159bool intel_ddi_is_audio_enabled(struct drm_i915_private *dev_priv,
1160 struct intel_crtc *intel_crtc);
1161void intel_ddi_get_config(struct intel_encoder *encoder, 1159void intel_ddi_get_config(struct intel_encoder *encoder,
1162 struct intel_crtc_state *pipe_config); 1160 struct intel_crtc_state *pipe_config);
1163struct intel_encoder * 1161struct intel_encoder *