diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/patch_intelhdmi.c | 14 |
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 | ||
439 | static void hdmi_debug_channel_mapping(struct hda_codec *codec, hda_nid_t nid) | 439 | static 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 | ||
622 | static void hdmi_setup_channel_mapping(struct hda_codec *codec, hda_nid_t nid, | 623 | static 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 | ||
643 | static bool hdmi_infoframe_uptodate(struct hda_codec *codec, hda_nid_t pin_nid, | 645 | static 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); |