aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/hda/patch_intelhdmi.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sound/pci/hda/patch_intelhdmi.c b/sound/pci/hda/patch_intelhdmi.c
index 742f15eb3331..0d5dd1ba8205 100644
--- a/sound/pci/hda/patch_intelhdmi.c
+++ b/sound/pci/hda/patch_intelhdmi.c
@@ -436,14 +436,15 @@ static void hdmi_set_channel_count(struct hda_codec *codec,
436 AC_VERB_SET_CVT_CHAN_COUNT, chs - 1); 436 AC_VERB_SET_CVT_CHAN_COUNT, chs - 1);
437} 437}
438 438
439static void hdmi_debug_channel_mapping(struct hda_codec *codec, hda_nid_t nid) 439static void hdmi_debug_channel_mapping(struct hda_codec *codec,
440 hda_nid_t pin_nid)
440{ 441{
441#ifdef CONFIG_SND_DEBUG_VERBOSE 442#ifdef CONFIG_SND_DEBUG_VERBOSE
442 int i; 443 int i;
443 int slot; 444 int slot;
444 445
445 for (i = 0; i < 8; i++) { 446 for (i = 0; i < 8; i++) {
446 slot = snd_hda_codec_read(codec, nid, 0, 447 slot = snd_hda_codec_read(codec, pin_nid, 0,
447 AC_VERB_GET_HDMI_CHAN_SLOT, i); 448 AC_VERB_GET_HDMI_CHAN_SLOT, i);
448 printk(KERN_DEBUG "HDMI: ASP channel %d => slot %d\n", 449 printk(KERN_DEBUG "HDMI: ASP channel %d => slot %d\n",
449 slot >> 4, slot & 0xf); 450 slot >> 4, slot & 0xf);
@@ -619,7 +620,8 @@ static int hdmi_setup_channel_allocation(struct hda_codec *codec, hda_nid_t nid,
619 return ai->CA; 620 return ai->CA;
620} 621}
621 622
622static void hdmi_setup_channel_mapping(struct hda_codec *codec, hda_nid_t nid, 623static void hdmi_setup_channel_mapping(struct hda_codec *codec,
624 hda_nid_t pin_nid,
623 struct hdmi_audio_infoframe *ai) 625 struct hdmi_audio_infoframe *ai)
624{ 626{
625 int i; 627 int i;
@@ -633,11 +635,11 @@ static void hdmi_setup_channel_mapping(struct hda_codec *codec, hda_nid_t nid,
633 */ 635 */
634 636
635 for (i = 0; i < 8; i++) 637 for (i = 0; i < 8; i++)
636 snd_hda_codec_write(codec, nid, 0, 638 snd_hda_codec_write(codec, pin_nid, 0,
637 AC_VERB_SET_HDMI_CHAN_SLOT, 639 AC_VERB_SET_HDMI_CHAN_SLOT,
638 (i << 4) | i); 640 (i << 4) | i);
639 641
640 hdmi_debug_channel_mapping(codec, nid); 642 hdmi_debug_channel_mapping(codec, pin_nid);
641} 643}
642 644
643static bool hdmi_infoframe_uptodate(struct hda_codec *codec, hda_nid_t pin_nid, 645static bool hdmi_infoframe_uptodate(struct hda_codec *codec, hda_nid_t pin_nid,
@@ -676,7 +678,6 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
676 }; 678 };
677 679
678 hdmi_setup_channel_allocation(codec, nid, &ai); 680 hdmi_setup_channel_allocation(codec, nid, &ai);
679 hdmi_setup_channel_mapping(codec, nid, &ai);
680 681
681 for (i = 0; i < spec->num_pins; i++) { 682 for (i = 0; i < spec->num_pins; i++) {
682 if (spec->pin_cvt[i] != nid) 683 if (spec->pin_cvt[i] != nid)
@@ -686,6 +687,7 @@ static void hdmi_setup_audio_infoframe(struct hda_codec *codec, hda_nid_t nid,
686 687
687 pin_nid = spec->pin[i]; 688 pin_nid = spec->pin[i];
688 if (!hdmi_infoframe_uptodate(codec, pin_nid, &ai)) { 689 if (!hdmi_infoframe_uptodate(codec, pin_nid, &ai)) {
690 hdmi_setup_channel_mapping(codec, pin_nid, &ai);
689 hdmi_stop_infoframe_trans(codec, pin_nid); 691 hdmi_stop_infoframe_trans(codec, pin_nid);
690 hdmi_fill_audio_infoframe(codec, pin_nid, &ai); 692 hdmi_fill_audio_infoframe(codec, pin_nid, &ai);
691 hdmi_start_infoframe_trans(codec, pin_nid); 693 hdmi_start_infoframe_trans(codec, pin_nid);