[alsa-devel] [PATCH 2/2] ALSA: hda - hdmi: Set infoframe and channel mapping even without sink

Anssi Hannula anssi.hannula at iki.fi
Mon May 5 01:38:44 CEST 2014

Currently infoframe contents and channel mapping are only set when a
sink (monitor) is present.

However, this does not make much sense, since
1) We can make a very reasonable guess on CA after 18e391862c ("ALSA:
   hda - hdmi: Fallback to ALSA allocation when selecting CA") or by
   relying on a previously valid ELD (or we may be using a
   user-specified channel map).
2) Not setting infoframe contents and channel count simply means they
   are left at a possibly incorrect state - playback is still allowed
   to proceed (with missing or wrongly mapped channels).

Reasons for monitor_present being 0 include disconnected cable, video
driver issues, or codec not being spec-compliant. Note that in
actual disconnected-cable case it should not matter if these settings
are wrong as they will be re-set after jack detection, though.

Change the behavior to allow the infoframe contents and the channel
mapping to be set even without a sink/monitor, either based on the
previous valid ELD contents, if any, or based on sensible defaults
(standard channel layouts or provided custom map, sink type HDMI).

Signed-off-by: Anssi Hannula <anssi.hannula at iki.fi>
Tested-by: Stephan Raue <stephan at openelec.tv>

This simply removes the monitor_present check, which is probably more
trouble than it is worth, as it may trip obscure setups even though we
can tolerate !monitor_present and !eld in 99%+ of all cases by using
defaults, nowadays post-18e391862c anyway.
Downside is that missing monitor_present may not be noticed by the user
as ~everything continues to work.

 sound/pci/hda/patch_hdmi.c | 4 ----
 1 file changed, 4 deletions(-)

diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index 1edbb9c47c2d..016f785cdf45 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1127,10 +1127,6 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
 	eld = &per_pin->sink_eld;
-	if (!eld->monitor_present) {
-		hdmi_set_channel_count(codec, per_pin->cvt_nid, channels);
-		return;
-	}
 	if (!non_pcm && per_pin->chmap_set)
 		ca = hdmi_manual_channel_allocation(channels, per_pin->chmap);

More information about the Alsa-devel mailing list