diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-24 13:25:29 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-01-24 13:25:29 -0500 |
commit | 3496d9d6e6943db45f54aa212fbe4be0e57de307 (patch) | |
tree | b6f21dd64973701d6be8be1cd3b8e11ec2fbf910 /sound | |
parent | e912b6d27cea198980132f012d14f22247e19ad6 (diff) | |
parent | b4ead019afc201f71c39cd0dfcaafed4a97b3dd2 (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda - Fix silent outputs from docking-station jacks of Dell laptops
ALSA: HDA: Use model=auto for Thinkpad T510
ALSA: hda - Fix buffer-alignment regression with Nvidia HDMI
ALSA: hda - Fix a unused variable warning
snd-hda-intel: better Alienware M17x R3 quirk
ALSA: hda/realtek - Remove use_jack_tbl field
ALSA: hda/realtek - Avoid conflict of unsol-events with static quirks
ALSA: hda/realtek - Avoid multi-ios conflicting with multi-speakers
Diffstat (limited to 'sound')
-rw-r--r-- | sound/pci/hda/alc880_quirks.c | 17 | ||||
-rw-r--r-- | sound/pci/hda/alc882_quirks.c | 15 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 6 | ||||
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 2 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 47 | ||||
-rw-r--r-- | sound/pci/hda/patch_sigmatel.c | 10 |
6 files changed, 63 insertions, 34 deletions
diff --git a/sound/pci/hda/alc880_quirks.c b/sound/pci/hda/alc880_quirks.c index 5b68435d195b..501501ef36a9 100644 --- a/sound/pci/hda/alc880_quirks.c +++ b/sound/pci/hda/alc880_quirks.c | |||
@@ -762,16 +762,22 @@ static void alc880_uniwill_unsol_event(struct hda_codec *codec, | |||
762 | /* Looks like the unsol event is incompatible with the standard | 762 | /* Looks like the unsol event is incompatible with the standard |
763 | * definition. 4bit tag is placed at 28 bit! | 763 | * definition. 4bit tag is placed at 28 bit! |
764 | */ | 764 | */ |
765 | switch (res >> 28) { | 765 | res >>= 28; |
766 | switch (res) { | ||
766 | case ALC_MIC_EVENT: | 767 | case ALC_MIC_EVENT: |
767 | alc88x_simple_mic_automute(codec); | 768 | alc88x_simple_mic_automute(codec); |
768 | break; | 769 | break; |
769 | default: | 770 | default: |
770 | alc_sku_unsol_event(codec, res); | 771 | alc_exec_unsol_event(codec, res); |
771 | break; | 772 | break; |
772 | } | 773 | } |
773 | } | 774 | } |
774 | 775 | ||
776 | static void alc880_unsol_event(struct hda_codec *codec, unsigned int res) | ||
777 | { | ||
778 | alc_exec_unsol_event(codec, res >> 28); | ||
779 | } | ||
780 | |||
775 | static void alc880_uniwill_p53_setup(struct hda_codec *codec) | 781 | static void alc880_uniwill_p53_setup(struct hda_codec *codec) |
776 | { | 782 | { |
777 | struct alc_spec *spec = codec->spec; | 783 | struct alc_spec *spec = codec->spec; |
@@ -800,10 +806,11 @@ static void alc880_uniwill_p53_unsol_event(struct hda_codec *codec, | |||
800 | /* Looks like the unsol event is incompatible with the standard | 806 | /* Looks like the unsol event is incompatible with the standard |
801 | * definition. 4bit tag is placed at 28 bit! | 807 | * definition. 4bit tag is placed at 28 bit! |
802 | */ | 808 | */ |
803 | if ((res >> 28) == ALC_DCVOL_EVENT) | 809 | res >>= 28; |
810 | if (res == ALC_DCVOL_EVENT) | ||
804 | alc880_uniwill_p53_dcvol_automute(codec); | 811 | alc880_uniwill_p53_dcvol_automute(codec); |
805 | else | 812 | else |
806 | alc_sku_unsol_event(codec, res); | 813 | alc_exec_unsol_event(codec, res); |
807 | } | 814 | } |
808 | 815 | ||
809 | /* | 816 | /* |
@@ -1677,7 +1684,7 @@ static const struct alc_config_preset alc880_presets[] = { | |||
1677 | .channel_mode = alc880_lg_ch_modes, | 1684 | .channel_mode = alc880_lg_ch_modes, |
1678 | .need_dac_fix = 1, | 1685 | .need_dac_fix = 1, |
1679 | .input_mux = &alc880_lg_capture_source, | 1686 | .input_mux = &alc880_lg_capture_source, |
1680 | .unsol_event = alc_sku_unsol_event, | 1687 | .unsol_event = alc880_unsol_event, |
1681 | .setup = alc880_lg_setup, | 1688 | .setup = alc880_lg_setup, |
1682 | .init_hook = alc_hp_automute, | 1689 | .init_hook = alc_hp_automute, |
1683 | #ifdef CONFIG_SND_HDA_POWER_SAVE | 1690 | #ifdef CONFIG_SND_HDA_POWER_SAVE |
diff --git a/sound/pci/hda/alc882_quirks.c b/sound/pci/hda/alc882_quirks.c index bdf0ed4ab3e2..bb364a53f546 100644 --- a/sound/pci/hda/alc882_quirks.c +++ b/sound/pci/hda/alc882_quirks.c | |||
@@ -730,6 +730,11 @@ static void alc889A_mb31_unsol_event(struct hda_codec *codec, unsigned int res) | |||
730 | alc889A_mb31_automute(codec); | 730 | alc889A_mb31_automute(codec); |
731 | } | 731 | } |
732 | 732 | ||
733 | static void alc882_unsol_event(struct hda_codec *codec, unsigned int res) | ||
734 | { | ||
735 | alc_exec_unsol_event(codec, res >> 26); | ||
736 | } | ||
737 | |||
733 | /* | 738 | /* |
734 | * configuration and preset | 739 | * configuration and preset |
735 | */ | 740 | */ |
@@ -775,7 +780,7 @@ static const struct alc_config_preset alc882_presets[] = { | |||
775 | .channel_mode = alc885_mba21_ch_modes, | 780 | .channel_mode = alc885_mba21_ch_modes, |
776 | .num_channel_mode = ARRAY_SIZE(alc885_mba21_ch_modes), | 781 | .num_channel_mode = ARRAY_SIZE(alc885_mba21_ch_modes), |
777 | .input_mux = &alc882_capture_source, | 782 | .input_mux = &alc882_capture_source, |
778 | .unsol_event = alc_sku_unsol_event, | 783 | .unsol_event = alc882_unsol_event, |
779 | .setup = alc885_mba21_setup, | 784 | .setup = alc885_mba21_setup, |
780 | .init_hook = alc_hp_automute, | 785 | .init_hook = alc_hp_automute, |
781 | }, | 786 | }, |
@@ -791,7 +796,7 @@ static const struct alc_config_preset alc882_presets[] = { | |||
791 | .input_mux = &alc882_capture_source, | 796 | .input_mux = &alc882_capture_source, |
792 | .dig_out_nid = ALC882_DIGOUT_NID, | 797 | .dig_out_nid = ALC882_DIGOUT_NID, |
793 | .dig_in_nid = ALC882_DIGIN_NID, | 798 | .dig_in_nid = ALC882_DIGIN_NID, |
794 | .unsol_event = alc_sku_unsol_event, | 799 | .unsol_event = alc882_unsol_event, |
795 | .setup = alc885_mbp3_setup, | 800 | .setup = alc885_mbp3_setup, |
796 | .init_hook = alc_hp_automute, | 801 | .init_hook = alc_hp_automute, |
797 | }, | 802 | }, |
@@ -806,7 +811,7 @@ static const struct alc_config_preset alc882_presets[] = { | |||
806 | .input_mux = &mb5_capture_source, | 811 | .input_mux = &mb5_capture_source, |
807 | .dig_out_nid = ALC882_DIGOUT_NID, | 812 | .dig_out_nid = ALC882_DIGOUT_NID, |
808 | .dig_in_nid = ALC882_DIGIN_NID, | 813 | .dig_in_nid = ALC882_DIGIN_NID, |
809 | .unsol_event = alc_sku_unsol_event, | 814 | .unsol_event = alc882_unsol_event, |
810 | .setup = alc885_mb5_setup, | 815 | .setup = alc885_mb5_setup, |
811 | .init_hook = alc_hp_automute, | 816 | .init_hook = alc_hp_automute, |
812 | }, | 817 | }, |
@@ -821,7 +826,7 @@ static const struct alc_config_preset alc882_presets[] = { | |||
821 | .input_mux = &macmini3_capture_source, | 826 | .input_mux = &macmini3_capture_source, |
822 | .dig_out_nid = ALC882_DIGOUT_NID, | 827 | .dig_out_nid = ALC882_DIGOUT_NID, |
823 | .dig_in_nid = ALC882_DIGIN_NID, | 828 | .dig_in_nid = ALC882_DIGIN_NID, |
824 | .unsol_event = alc_sku_unsol_event, | 829 | .unsol_event = alc882_unsol_event, |
825 | .setup = alc885_macmini3_setup, | 830 | .setup = alc885_macmini3_setup, |
826 | .init_hook = alc_hp_automute, | 831 | .init_hook = alc_hp_automute, |
827 | }, | 832 | }, |
@@ -836,7 +841,7 @@ static const struct alc_config_preset alc882_presets[] = { | |||
836 | .input_mux = &alc889A_imac91_capture_source, | 841 | .input_mux = &alc889A_imac91_capture_source, |
837 | .dig_out_nid = ALC882_DIGOUT_NID, | 842 | .dig_out_nid = ALC882_DIGOUT_NID, |
838 | .dig_in_nid = ALC882_DIGIN_NID, | 843 | .dig_in_nid = ALC882_DIGIN_NID, |
839 | .unsol_event = alc_sku_unsol_event, | 844 | .unsol_event = alc882_unsol_event, |
840 | .setup = alc885_imac91_setup, | 845 | .setup = alc885_imac91_setup, |
841 | .init_hook = alc_hp_automute, | 846 | .init_hook = alc_hp_automute, |
842 | }, | 847 | }, |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index fb35474c1203..95dfb6874941 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -469,6 +469,7 @@ struct azx { | |||
469 | unsigned int irq_pending_warned :1; | 469 | unsigned int irq_pending_warned :1; |
470 | unsigned int probing :1; /* codec probing phase */ | 470 | unsigned int probing :1; /* codec probing phase */ |
471 | unsigned int snoop:1; | 471 | unsigned int snoop:1; |
472 | unsigned int align_buffer_size:1; | ||
472 | 473 | ||
473 | /* for debugging */ | 474 | /* for debugging */ |
474 | unsigned int last_cmd[AZX_MAX_CODECS]; | 475 | unsigned int last_cmd[AZX_MAX_CODECS]; |
@@ -1690,7 +1691,7 @@ static int azx_pcm_open(struct snd_pcm_substream *substream) | |||
1690 | runtime->hw.rates = hinfo->rates; | 1691 | runtime->hw.rates = hinfo->rates; |
1691 | snd_pcm_limit_hw_rates(runtime); | 1692 | snd_pcm_limit_hw_rates(runtime); |
1692 | snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); | 1693 | snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); |
1693 | if (align_buffer_size) | 1694 | if (chip->align_buffer_size) |
1694 | /* constrain buffer sizes to be multiple of 128 | 1695 | /* constrain buffer sizes to be multiple of 128 |
1695 | bytes. This is more efficient in terms of memory | 1696 | bytes. This is more efficient in terms of memory |
1696 | access but isn't required by the HDA spec and | 1697 | access but isn't required by the HDA spec and |
@@ -2773,8 +2774,9 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
2773 | } | 2774 | } |
2774 | 2775 | ||
2775 | /* disable buffer size rounding to 128-byte multiples if supported */ | 2776 | /* disable buffer size rounding to 128-byte multiples if supported */ |
2777 | chip->align_buffer_size = align_buffer_size; | ||
2776 | if (chip->driver_caps & AZX_DCAPS_BUFSIZE) | 2778 | if (chip->driver_caps & AZX_DCAPS_BUFSIZE) |
2777 | align_buffer_size = 0; | 2779 | chip->align_buffer_size = 0; |
2778 | 2780 | ||
2779 | /* allow 64bit DMA address if supported by H/W */ | 2781 | /* allow 64bit DMA address if supported by H/W */ |
2780 | if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64))) | 2782 | if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64))) |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index 8a32a69c83c3..a7a5733aa4d2 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
@@ -3027,7 +3027,7 @@ static const struct snd_pci_quirk cxt5066_cfg_tbl[] = { | |||
3027 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD), | 3027 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD), |
3028 | SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD), | 3028 | SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD), |
3029 | SND_PCI_QUIRK(0x17aa, 0x21c6, "Thinkpad Edge 13", CXT5066_ASUS), | 3029 | SND_PCI_QUIRK(0x17aa, 0x21c6, "Thinkpad Edge 13", CXT5066_ASUS), |
3030 | SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD), | 3030 | SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo T510", CXT5066_AUTO), |
3031 | SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520 & W520", CXT5066_AUTO), | 3031 | SND_PCI_QUIRK(0x17aa, 0x21cf, "Lenovo T520 & W520", CXT5066_AUTO), |
3032 | SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT5066_THINKPAD), | 3032 | SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT5066_THINKPAD), |
3033 | SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT5066_THINKPAD), | 3033 | SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT5066_THINKPAD), |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 5e82acf77c5a..c95c8bde12d0 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -185,7 +185,6 @@ struct alc_spec { | |||
185 | unsigned int vol_in_capsrc:1; /* use capsrc volume (ADC has no vol) */ | 185 | unsigned int vol_in_capsrc:1; /* use capsrc volume (ADC has no vol) */ |
186 | unsigned int parse_flags; /* passed to snd_hda_parse_pin_defcfg() */ | 186 | unsigned int parse_flags; /* passed to snd_hda_parse_pin_defcfg() */ |
187 | unsigned int shared_mic_hp:1; /* HP/Mic-in sharing */ | 187 | unsigned int shared_mic_hp:1; /* HP/Mic-in sharing */ |
188 | unsigned int use_jack_tbl:1; /* 1 for model=auto */ | ||
189 | 188 | ||
190 | /* auto-mute control */ | 189 | /* auto-mute control */ |
191 | int automute_mode; | 190 | int automute_mode; |
@@ -621,17 +620,10 @@ static void alc_mic_automute(struct hda_codec *codec) | |||
621 | alc_mux_select(codec, 0, spec->int_mic_idx, false); | 620 | alc_mux_select(codec, 0, spec->int_mic_idx, false); |
622 | } | 621 | } |
623 | 622 | ||
624 | /* unsolicited event for HP jack sensing */ | 623 | /* handle the specified unsol action (ALC_XXX_EVENT) */ |
625 | static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) | 624 | static void alc_exec_unsol_event(struct hda_codec *codec, int action) |
626 | { | 625 | { |
627 | struct alc_spec *spec = codec->spec; | 626 | switch (action) { |
628 | if (codec->vendor_id == 0x10ec0880) | ||
629 | res >>= 28; | ||
630 | else | ||
631 | res >>= 26; | ||
632 | if (spec->use_jack_tbl) | ||
633 | res = snd_hda_jack_get_action(codec, res); | ||
634 | switch (res) { | ||
635 | case ALC_HP_EVENT: | 627 | case ALC_HP_EVENT: |
636 | alc_hp_automute(codec); | 628 | alc_hp_automute(codec); |
637 | break; | 629 | break; |
@@ -645,6 +637,17 @@ static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) | |||
645 | snd_hda_jack_report_sync(codec); | 637 | snd_hda_jack_report_sync(codec); |
646 | } | 638 | } |
647 | 639 | ||
640 | /* unsolicited event for HP jack sensing */ | ||
641 | static void alc_sku_unsol_event(struct hda_codec *codec, unsigned int res) | ||
642 | { | ||
643 | if (codec->vendor_id == 0x10ec0880) | ||
644 | res >>= 28; | ||
645 | else | ||
646 | res >>= 26; | ||
647 | res = snd_hda_jack_get_action(codec, res); | ||
648 | alc_exec_unsol_event(codec, res); | ||
649 | } | ||
650 | |||
648 | /* call init functions of standard auto-mute helpers */ | 651 | /* call init functions of standard auto-mute helpers */ |
649 | static void alc_inithook(struct hda_codec *codec) | 652 | static void alc_inithook(struct hda_codec *codec) |
650 | { | 653 | { |
@@ -1883,7 +1886,7 @@ static const struct snd_kcontrol_new alc_beep_mixer[] = { | |||
1883 | }; | 1886 | }; |
1884 | #endif | 1887 | #endif |
1885 | 1888 | ||
1886 | static int alc_build_controls(struct hda_codec *codec) | 1889 | static int __alc_build_controls(struct hda_codec *codec) |
1887 | { | 1890 | { |
1888 | struct alc_spec *spec = codec->spec; | 1891 | struct alc_spec *spec = codec->spec; |
1889 | struct snd_kcontrol *kctl = NULL; | 1892 | struct snd_kcontrol *kctl = NULL; |
@@ -2029,11 +2032,16 @@ static int alc_build_controls(struct hda_codec *codec) | |||
2029 | 2032 | ||
2030 | alc_free_kctls(codec); /* no longer needed */ | 2033 | alc_free_kctls(codec); /* no longer needed */ |
2031 | 2034 | ||
2032 | err = snd_hda_jack_add_kctls(codec, &spec->autocfg); | 2035 | return 0; |
2036 | } | ||
2037 | |||
2038 | static int alc_build_controls(struct hda_codec *codec) | ||
2039 | { | ||
2040 | struct alc_spec *spec = codec->spec; | ||
2041 | int err = __alc_build_controls(codec); | ||
2033 | if (err < 0) | 2042 | if (err < 0) |
2034 | return err; | 2043 | return err; |
2035 | 2044 | return snd_hda_jack_add_kctls(codec, &spec->autocfg); | |
2036 | return 0; | ||
2037 | } | 2045 | } |
2038 | 2046 | ||
2039 | 2047 | ||
@@ -3233,7 +3241,7 @@ static int alc_auto_create_multi_out_ctls(struct hda_codec *codec, | |||
3233 | int i, err, noutputs; | 3241 | int i, err, noutputs; |
3234 | 3242 | ||
3235 | noutputs = cfg->line_outs; | 3243 | noutputs = cfg->line_outs; |
3236 | if (spec->multi_ios > 0) | 3244 | if (spec->multi_ios > 0 && cfg->line_outs < 3) |
3237 | noutputs += spec->multi_ios; | 3245 | noutputs += spec->multi_ios; |
3238 | 3246 | ||
3239 | for (i = 0; i < noutputs; i++) { | 3247 | for (i = 0; i < noutputs; i++) { |
@@ -3904,7 +3912,6 @@ static void set_capture_mixer(struct hda_codec *codec) | |||
3904 | static void alc_auto_init_std(struct hda_codec *codec) | 3912 | static void alc_auto_init_std(struct hda_codec *codec) |
3905 | { | 3913 | { |
3906 | struct alc_spec *spec = codec->spec; | 3914 | struct alc_spec *spec = codec->spec; |
3907 | spec->use_jack_tbl = 1; | ||
3908 | alc_auto_init_multi_out(codec); | 3915 | alc_auto_init_multi_out(codec); |
3909 | alc_auto_init_extra_out(codec); | 3916 | alc_auto_init_extra_out(codec); |
3910 | alc_auto_init_analog_input(codec); | 3917 | alc_auto_init_analog_input(codec); |
@@ -4168,6 +4175,8 @@ static int patch_alc880(struct hda_codec *codec) | |||
4168 | codec->patch_ops = alc_patch_ops; | 4175 | codec->patch_ops = alc_patch_ops; |
4169 | if (board_config == ALC_MODEL_AUTO) | 4176 | if (board_config == ALC_MODEL_AUTO) |
4170 | spec->init_hook = alc_auto_init_std; | 4177 | spec->init_hook = alc_auto_init_std; |
4178 | else | ||
4179 | codec->patch_ops.build_controls = __alc_build_controls; | ||
4171 | #ifdef CONFIG_SND_HDA_POWER_SAVE | 4180 | #ifdef CONFIG_SND_HDA_POWER_SAVE |
4172 | if (!spec->loopback.amplist) | 4181 | if (!spec->loopback.amplist) |
4173 | spec->loopback.amplist = alc880_loopbacks; | 4182 | spec->loopback.amplist = alc880_loopbacks; |
@@ -4297,6 +4306,8 @@ static int patch_alc260(struct hda_codec *codec) | |||
4297 | codec->patch_ops = alc_patch_ops; | 4306 | codec->patch_ops = alc_patch_ops; |
4298 | if (board_config == ALC_MODEL_AUTO) | 4307 | if (board_config == ALC_MODEL_AUTO) |
4299 | spec->init_hook = alc_auto_init_std; | 4308 | spec->init_hook = alc_auto_init_std; |
4309 | else | ||
4310 | codec->patch_ops.build_controls = __alc_build_controls; | ||
4300 | spec->shutup = alc_eapd_shutup; | 4311 | spec->shutup = alc_eapd_shutup; |
4301 | #ifdef CONFIG_SND_HDA_POWER_SAVE | 4312 | #ifdef CONFIG_SND_HDA_POWER_SAVE |
4302 | if (!spec->loopback.amplist) | 4313 | if (!spec->loopback.amplist) |
@@ -4691,6 +4702,8 @@ static int patch_alc882(struct hda_codec *codec) | |||
4691 | codec->patch_ops = alc_patch_ops; | 4702 | codec->patch_ops = alc_patch_ops; |
4692 | if (board_config == ALC_MODEL_AUTO) | 4703 | if (board_config == ALC_MODEL_AUTO) |
4693 | spec->init_hook = alc_auto_init_std; | 4704 | spec->init_hook = alc_auto_init_std; |
4705 | else | ||
4706 | codec->patch_ops.build_controls = __alc_build_controls; | ||
4694 | 4707 | ||
4695 | #ifdef CONFIG_SND_HDA_POWER_SAVE | 4708 | #ifdef CONFIG_SND_HDA_POWER_SAVE |
4696 | if (!spec->loopback.amplist) | 4709 | if (!spec->loopback.amplist) |
diff --git a/sound/pci/hda/patch_sigmatel.c b/sound/pci/hda/patch_sigmatel.c index 3556408d6ece..336cfcd324f9 100644 --- a/sound/pci/hda/patch_sigmatel.c +++ b/sound/pci/hda/patch_sigmatel.c | |||
@@ -1608,7 +1608,7 @@ static const struct snd_pci_quirk stac92hd73xx_codec_id_cfg_tbl[] = { | |||
1608 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x043a, | 1608 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x043a, |
1609 | "Alienware M17x", STAC_ALIENWARE_M17X), | 1609 | "Alienware M17x", STAC_ALIENWARE_M17X), |
1610 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490, | 1610 | SND_PCI_QUIRK(PCI_VENDOR_ID_DELL, 0x0490, |
1611 | "Alienware M17x", STAC_ALIENWARE_M17X), | 1611 | "Alienware M17x R3", STAC_DELL_EQ), |
1612 | {} /* terminator */ | 1612 | {} /* terminator */ |
1613 | }; | 1613 | }; |
1614 | 1614 | ||
@@ -4163,13 +4163,15 @@ static int enable_pin_detect(struct hda_codec *codec, hda_nid_t nid, | |||
4163 | return 1; | 4163 | return 1; |
4164 | } | 4164 | } |
4165 | 4165 | ||
4166 | static int is_nid_hp_pin(struct auto_pin_cfg *cfg, hda_nid_t nid) | 4166 | static int is_nid_out_jack_pin(struct auto_pin_cfg *cfg, hda_nid_t nid) |
4167 | { | 4167 | { |
4168 | int i; | 4168 | int i; |
4169 | for (i = 0; i < cfg->hp_outs; i++) | 4169 | for (i = 0; i < cfg->hp_outs; i++) |
4170 | if (cfg->hp_pins[i] == nid) | 4170 | if (cfg->hp_pins[i] == nid) |
4171 | return 1; /* nid is a HP-Out */ | 4171 | return 1; /* nid is a HP-Out */ |
4172 | 4172 | for (i = 0; i < cfg->line_outs; i++) | |
4173 | if (cfg->line_out_pins[i] == nid) | ||
4174 | return 1; /* nid is a line-Out */ | ||
4173 | return 0; /* nid is not a HP-Out */ | 4175 | return 0; /* nid is not a HP-Out */ |
4174 | }; | 4176 | }; |
4175 | 4177 | ||
@@ -4375,7 +4377,7 @@ static int stac92xx_init(struct hda_codec *codec) | |||
4375 | continue; | 4377 | continue; |
4376 | } | 4378 | } |
4377 | 4379 | ||
4378 | if (is_nid_hp_pin(cfg, nid)) | 4380 | if (is_nid_out_jack_pin(cfg, nid)) |
4379 | continue; /* already has an unsol event */ | 4381 | continue; /* already has an unsol event */ |
4380 | 4382 | ||
4381 | pinctl = snd_hda_codec_read(codec, nid, 0, | 4383 | pinctl = snd_hda_codec_read(codec, nid, 0, |