
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@iki.fi Tested-by: Stephan Raue stephan@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, AMP_OUT_UNMUTE);
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);