|
@@ -936,6 +936,14 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ /*
|
|
|
+ * always configure channel mapping, it may have been changed by the
|
|
|
+ * user in the meantime
|
|
|
+ */
|
|
|
+ hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
|
|
|
+ channels, per_pin->chmap,
|
|
|
+ per_pin->chmap_set);
|
|
|
+
|
|
|
/*
|
|
|
* sizeof(ai) is used instead of sizeof(*hdmi_ai) or
|
|
|
* sizeof(*dp_ai) to avoid partial match/update problems when
|
|
@@ -947,20 +955,10 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec,
|
|
|
"pin=%d channels=%d\n",
|
|
|
pin_nid,
|
|
|
channels);
|
|
|
- hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
|
|
|
- channels, per_pin->chmap,
|
|
|
- per_pin->chmap_set);
|
|
|
hdmi_stop_infoframe_trans(codec, pin_nid);
|
|
|
hdmi_fill_audio_infoframe(codec, pin_nid,
|
|
|
ai.bytes, sizeof(ai));
|
|
|
hdmi_start_infoframe_trans(codec, pin_nid);
|
|
|
- } else {
|
|
|
- /* For non-pcm audio switch, setup new channel mapping
|
|
|
- * accordingly */
|
|
|
- if (per_pin->non_pcm != non_pcm)
|
|
|
- hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca,
|
|
|
- channels, per_pin->chmap,
|
|
|
- per_pin->chmap_set);
|
|
|
}
|
|
|
|
|
|
per_pin->non_pcm = non_pcm;
|