@@ -735,7 +735,11 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)
if (intel_hdmi->force_audio != HDMI_AUDIO_OFF_DVI)
intel_hdmi->has_hdmi_sink =
drm_detect_hdmi_monitor(edid);
- intel_hdmi->has_audio = drm_detect_monitor_audio(edid);
+
+ /* We are only allowed to send audio and audio related
+ * infoframes if it's an hdmi monitor. */
+ intel_hdmi->has_audio = intel_hdmi->has_hdmi_sink &&
+ drm_detect_monitor_audio(edid);
}
connector->display_info.raw_edid = NULL;
kfree(edid);
@@ -755,10 +759,6 @@ static int intel_hdmi_get_modes(struct drm_connector *connector)
struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector);
struct drm_i915_private *dev_priv = connector->dev->dev_private;
- /* We should parse the EDID data and find out if it's an HDMI sink so
- * we can send audio to it.
- */
-
return intel_ddc_get_modes(connector,
intel_gmbus_get_adapter(dev_priv,
intel_hdmi->ddc_bus));
@@ -783,7 +783,9 @@ intel_hdmi_detect_audio(struct drm_connector *connector)
kfree(edid);
}
- return has_audio;
+ /* We are only allowed to send audio and audio related
+ * infoframes if it's an hdmi monitor. */
+ return intel_hdmi->has_hdmi_sink && has_audio;
}
static int
Some monitors totally don't like to receive infoframes, and naturally don't claim to support hdmi. But for some odd reason they've added a CEA block to their edid, which automatically gives you basic audio. Still, we may not send out hdmi infoframes to them, hence check whether the sink is indeed hdmi capable. Also kill a stale comment while at it. References: http://www.mail-archive.com/dri-devel@lists.freedesktop.org/msg26765.html Cc: Adam Jackson <ajax@redhat.com> Cc: Ian Pilcher <arequipeno@gmail.com> Cc: stable@vger.kernel.org Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> --- drivers/gpu/drm/i915/intel_hdmi.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-)