diff options
author | Jens Axboe <axboe@kernel.dk> | 2013-07-02 02:31:48 -0400 |
---|---|---|
committer | Jens Axboe <axboe@kernel.dk> | 2013-07-02 02:31:48 -0400 |
commit | 5f0e5afa0de4522abb3ea7d1369039b94e740ec5 (patch) | |
tree | 6a5be3db9ecfed8ef2150c6146f6d1e0d658ac8b /sound/pci | |
parent | d752b2696072ed52fd5afab08b601e2220a3b87e (diff) | |
parent | 9e895ace5d82df8929b16f58e9f515f6d54ab82d (diff) |
Merge tag 'v3.10-rc7' into for-3.11/drivers
Linux 3.10-rc7
Pull this in early to avoid doing it with the bcache merge,
since there are a number of changes to bcache between my old
base (3.10-rc1) and the new pull request.
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/hda/hda_generic.c | 77 | ||||
-rw-r--r-- | sound/pci/hda/hda_generic.h | 1 | ||||
-rw-r--r-- | sound/pci/hda/patch_cirrus.c | 23 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 10 | ||||
-rw-r--r-- | sound/pci/hda/patch_via.c | 10 | ||||
-rw-r--r-- | sound/pci/sis7019.c | 3 |
6 files changed, 90 insertions, 34 deletions
diff --git a/sound/pci/hda/hda_generic.c b/sound/pci/hda/hda_generic.c index ac079f93c535..4b1524a861f3 100644 --- a/sound/pci/hda/hda_generic.c +++ b/sound/pci/hda/hda_generic.c | |||
@@ -606,6 +606,10 @@ static bool is_active_nid(struct hda_codec *codec, hda_nid_t nid, | |||
606 | return false; | 606 | return false; |
607 | } | 607 | } |
608 | 608 | ||
609 | /* check whether the NID is referred by any active paths */ | ||
610 | #define is_active_nid_for_any(codec, nid) \ | ||
611 | is_active_nid(codec, nid, HDA_OUTPUT, 0) | ||
612 | |||
609 | /* get the default amp value for the target state */ | 613 | /* get the default amp value for the target state */ |
610 | static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid, | 614 | static int get_amp_val_to_activate(struct hda_codec *codec, hda_nid_t nid, |
611 | int dir, unsigned int caps, bool enable) | 615 | int dir, unsigned int caps, bool enable) |
@@ -759,7 +763,8 @@ static void path_power_down_sync(struct hda_codec *codec, struct nid_path *path) | |||
759 | 763 | ||
760 | for (i = 0; i < path->depth; i++) { | 764 | for (i = 0; i < path->depth; i++) { |
761 | hda_nid_t nid = path->path[i]; | 765 | hda_nid_t nid = path->path[i]; |
762 | if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3)) { | 766 | if (!snd_hda_check_power_state(codec, nid, AC_PWRST_D3) && |
767 | !is_active_nid_for_any(codec, nid)) { | ||
763 | snd_hda_codec_write(codec, nid, 0, | 768 | snd_hda_codec_write(codec, nid, 0, |
764 | AC_VERB_SET_POWER_STATE, | 769 | AC_VERB_SET_POWER_STATE, |
765 | AC_PWRST_D3); | 770 | AC_PWRST_D3); |
@@ -783,6 +788,8 @@ static void set_pin_eapd(struct hda_codec *codec, hda_nid_t pin, bool enable) | |||
783 | return; | 788 | return; |
784 | if (codec->inv_eapd) | 789 | if (codec->inv_eapd) |
785 | enable = !enable; | 790 | enable = !enable; |
791 | if (spec->keep_eapd_on && !enable) | ||
792 | return; | ||
786 | snd_hda_codec_update_cache(codec, pin, 0, | 793 | snd_hda_codec_update_cache(codec, pin, 0, |
787 | AC_VERB_SET_EAPD_BTLENABLE, | 794 | AC_VERB_SET_EAPD_BTLENABLE, |
788 | enable ? 0x02 : 0x00); | 795 | enable ? 0x02 : 0x00); |
@@ -1933,17 +1940,7 @@ static int create_speaker_out_ctls(struct hda_codec *codec) | |||
1933 | * independent HP controls | 1940 | * independent HP controls |
1934 | */ | 1941 | */ |
1935 | 1942 | ||
1936 | /* update HP auto-mute state too */ | 1943 | static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack); |
1937 | static void update_hp_automute_hook(struct hda_codec *codec) | ||
1938 | { | ||
1939 | struct hda_gen_spec *spec = codec->spec; | ||
1940 | |||
1941 | if (spec->hp_automute_hook) | ||
1942 | spec->hp_automute_hook(codec, NULL); | ||
1943 | else | ||
1944 | snd_hda_gen_hp_automute(codec, NULL); | ||
1945 | } | ||
1946 | |||
1947 | static int indep_hp_info(struct snd_kcontrol *kcontrol, | 1944 | static int indep_hp_info(struct snd_kcontrol *kcontrol, |
1948 | struct snd_ctl_elem_info *uinfo) | 1945 | struct snd_ctl_elem_info *uinfo) |
1949 | { | 1946 | { |
@@ -2004,7 +2001,7 @@ static int indep_hp_put(struct snd_kcontrol *kcontrol, | |||
2004 | else | 2001 | else |
2005 | *dacp = spec->alt_dac_nid; | 2002 | *dacp = spec->alt_dac_nid; |
2006 | 2003 | ||
2007 | update_hp_automute_hook(codec); | 2004 | call_hp_automute(codec, NULL); |
2008 | ret = 1; | 2005 | ret = 1; |
2009 | } | 2006 | } |
2010 | unlock: | 2007 | unlock: |
@@ -2300,7 +2297,7 @@ static void update_hp_mic(struct hda_codec *codec, int adc_mux, bool force) | |||
2300 | else | 2297 | else |
2301 | val = PIN_HP; | 2298 | val = PIN_HP; |
2302 | set_pin_target(codec, pin, val, true); | 2299 | set_pin_target(codec, pin, val, true); |
2303 | update_hp_automute_hook(codec); | 2300 | call_hp_automute(codec, NULL); |
2304 | } | 2301 | } |
2305 | } | 2302 | } |
2306 | 2303 | ||
@@ -2709,7 +2706,7 @@ static int hp_mic_jack_mode_put(struct snd_kcontrol *kcontrol, | |||
2709 | val = snd_hda_get_default_vref(codec, nid); | 2706 | val = snd_hda_get_default_vref(codec, nid); |
2710 | } | 2707 | } |
2711 | snd_hda_set_pin_ctl_cache(codec, nid, val); | 2708 | snd_hda_set_pin_ctl_cache(codec, nid, val); |
2712 | update_hp_automute_hook(codec); | 2709 | call_hp_automute(codec, NULL); |
2713 | 2710 | ||
2714 | return 1; | 2711 | return 1; |
2715 | } | 2712 | } |
@@ -3854,20 +3851,42 @@ void snd_hda_gen_mic_autoswitch(struct hda_codec *codec, struct hda_jack_tbl *ja | |||
3854 | } | 3851 | } |
3855 | EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch); | 3852 | EXPORT_SYMBOL_HDA(snd_hda_gen_mic_autoswitch); |
3856 | 3853 | ||
3857 | /* update jack retasking */ | 3854 | /* call appropriate hooks */ |
3858 | static void update_automute_all(struct hda_codec *codec) | 3855 | static void call_hp_automute(struct hda_codec *codec, struct hda_jack_tbl *jack) |
3859 | { | 3856 | { |
3860 | struct hda_gen_spec *spec = codec->spec; | 3857 | struct hda_gen_spec *spec = codec->spec; |
3858 | if (spec->hp_automute_hook) | ||
3859 | spec->hp_automute_hook(codec, jack); | ||
3860 | else | ||
3861 | snd_hda_gen_hp_automute(codec, jack); | ||
3862 | } | ||
3861 | 3863 | ||
3862 | update_hp_automute_hook(codec); | 3864 | static void call_line_automute(struct hda_codec *codec, |
3865 | struct hda_jack_tbl *jack) | ||
3866 | { | ||
3867 | struct hda_gen_spec *spec = codec->spec; | ||
3863 | if (spec->line_automute_hook) | 3868 | if (spec->line_automute_hook) |
3864 | spec->line_automute_hook(codec, NULL); | 3869 | spec->line_automute_hook(codec, jack); |
3865 | else | 3870 | else |
3866 | snd_hda_gen_line_automute(codec, NULL); | 3871 | snd_hda_gen_line_automute(codec, jack); |
3872 | } | ||
3873 | |||
3874 | static void call_mic_autoswitch(struct hda_codec *codec, | ||
3875 | struct hda_jack_tbl *jack) | ||
3876 | { | ||
3877 | struct hda_gen_spec *spec = codec->spec; | ||
3867 | if (spec->mic_autoswitch_hook) | 3878 | if (spec->mic_autoswitch_hook) |
3868 | spec->mic_autoswitch_hook(codec, NULL); | 3879 | spec->mic_autoswitch_hook(codec, jack); |
3869 | else | 3880 | else |
3870 | snd_hda_gen_mic_autoswitch(codec, NULL); | 3881 | snd_hda_gen_mic_autoswitch(codec, jack); |
3882 | } | ||
3883 | |||
3884 | /* update jack retasking */ | ||
3885 | static void update_automute_all(struct hda_codec *codec) | ||
3886 | { | ||
3887 | call_hp_automute(codec, NULL); | ||
3888 | call_line_automute(codec, NULL); | ||
3889 | call_mic_autoswitch(codec, NULL); | ||
3871 | } | 3890 | } |
3872 | 3891 | ||
3873 | /* | 3892 | /* |
@@ -4004,9 +4023,7 @@ static int check_auto_mute_availability(struct hda_codec *codec) | |||
4004 | snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n", | 4023 | snd_printdd("hda-codec: Enable HP auto-muting on NID 0x%x\n", |
4005 | nid); | 4024 | nid); |
4006 | snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT, | 4025 | snd_hda_jack_detect_enable_callback(codec, nid, HDA_GEN_HP_EVENT, |
4007 | spec->hp_automute_hook ? | 4026 | call_hp_automute); |
4008 | spec->hp_automute_hook : | ||
4009 | snd_hda_gen_hp_automute); | ||
4010 | spec->detect_hp = 1; | 4027 | spec->detect_hp = 1; |
4011 | } | 4028 | } |
4012 | 4029 | ||
@@ -4019,9 +4036,7 @@ static int check_auto_mute_availability(struct hda_codec *codec) | |||
4019 | snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid); | 4036 | snd_printdd("hda-codec: Enable Line-Out auto-muting on NID 0x%x\n", nid); |
4020 | snd_hda_jack_detect_enable_callback(codec, nid, | 4037 | snd_hda_jack_detect_enable_callback(codec, nid, |
4021 | HDA_GEN_FRONT_EVENT, | 4038 | HDA_GEN_FRONT_EVENT, |
4022 | spec->line_automute_hook ? | 4039 | call_line_automute); |
4023 | spec->line_automute_hook : | ||
4024 | snd_hda_gen_line_automute); | ||
4025 | spec->detect_lo = 1; | 4040 | spec->detect_lo = 1; |
4026 | } | 4041 | } |
4027 | spec->automute_lo_possible = spec->detect_hp; | 4042 | spec->automute_lo_possible = spec->detect_hp; |
@@ -4063,9 +4078,7 @@ static bool auto_mic_check_imux(struct hda_codec *codec) | |||
4063 | snd_hda_jack_detect_enable_callback(codec, | 4078 | snd_hda_jack_detect_enable_callback(codec, |
4064 | spec->am_entry[i].pin, | 4079 | spec->am_entry[i].pin, |
4065 | HDA_GEN_MIC_EVENT, | 4080 | HDA_GEN_MIC_EVENT, |
4066 | spec->mic_autoswitch_hook ? | 4081 | call_mic_autoswitch); |
4067 | spec->mic_autoswitch_hook : | ||
4068 | snd_hda_gen_mic_autoswitch); | ||
4069 | return true; | 4082 | return true; |
4070 | } | 4083 | } |
4071 | 4084 | ||
@@ -4157,7 +4170,7 @@ static unsigned int snd_hda_gen_path_power_filter(struct hda_codec *codec, | |||
4157 | return power_state; | 4170 | return power_state; |
4158 | if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER) | 4171 | if (get_wcaps_type(get_wcaps(codec, nid)) >= AC_WID_POWER) |
4159 | return power_state; | 4172 | return power_state; |
4160 | if (is_active_nid(codec, nid, HDA_OUTPUT, 0)) | 4173 | if (is_active_nid_for_any(codec, nid)) |
4161 | return power_state; | 4174 | return power_state; |
4162 | return AC_PWRST_D3; | 4175 | return AC_PWRST_D3; |
4163 | } | 4176 | } |
diff --git a/sound/pci/hda/hda_generic.h b/sound/pci/hda/hda_generic.h index 54e665160379..76200314ee95 100644 --- a/sound/pci/hda/hda_generic.h +++ b/sound/pci/hda/hda_generic.h | |||
@@ -222,6 +222,7 @@ struct hda_gen_spec { | |||
222 | unsigned int multi_cap_vol:1; /* allow multiple capture xxx volumes */ | 222 | unsigned int multi_cap_vol:1; /* allow multiple capture xxx volumes */ |
223 | unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */ | 223 | unsigned int inv_dmic_split:1; /* inverted dmic w/a for conexant */ |
224 | unsigned int own_eapd_ctl:1; /* set EAPD by own function */ | 224 | unsigned int own_eapd_ctl:1; /* set EAPD by own function */ |
225 | unsigned int keep_eapd_on:1; /* don't turn off EAPD automatically */ | ||
225 | unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */ | 226 | unsigned int vmaster_mute_enum:1; /* add vmaster mute mode enum */ |
226 | unsigned int indep_hp:1; /* independent HP supported */ | 227 | unsigned int indep_hp:1; /* independent HP supported */ |
227 | unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */ | 228 | unsigned int prefer_hp_amp:1; /* enable HP amp for speaker if any */ |
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index bd8d46cca2b3..cccaf9c7a7bb 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
@@ -58,6 +58,7 @@ enum { | |||
58 | CS420X_GPIO_23, | 58 | CS420X_GPIO_23, |
59 | CS420X_MBP101, | 59 | CS420X_MBP101, |
60 | CS420X_MBP81, | 60 | CS420X_MBP81, |
61 | CS420X_MBA42, | ||
61 | CS420X_AUTO, | 62 | CS420X_AUTO, |
62 | /* aliases */ | 63 | /* aliases */ |
63 | CS420X_IMAC27_122 = CS420X_GPIO_23, | 64 | CS420X_IMAC27_122 = CS420X_GPIO_23, |
@@ -346,6 +347,7 @@ static const struct hda_model_fixup cs420x_models[] = { | |||
346 | { .id = CS420X_APPLE, .name = "apple" }, | 347 | { .id = CS420X_APPLE, .name = "apple" }, |
347 | { .id = CS420X_MBP101, .name = "mbp101" }, | 348 | { .id = CS420X_MBP101, .name = "mbp101" }, |
348 | { .id = CS420X_MBP81, .name = "mbp81" }, | 349 | { .id = CS420X_MBP81, .name = "mbp81" }, |
350 | { .id = CS420X_MBA42, .name = "mba42" }, | ||
349 | {} | 351 | {} |
350 | }; | 352 | }; |
351 | 353 | ||
@@ -361,6 +363,7 @@ static const struct snd_pci_quirk cs420x_fixup_tbl[] = { | |||
361 | SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81), | 363 | SND_PCI_QUIRK(0x106b, 0x1c00, "MacBookPro 8,1", CS420X_MBP81), |
362 | SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122), | 364 | SND_PCI_QUIRK(0x106b, 0x2000, "iMac 12,2", CS420X_IMAC27_122), |
363 | SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101), | 365 | SND_PCI_QUIRK(0x106b, 0x2800, "MacBookPro 10,1", CS420X_MBP101), |
366 | SND_PCI_QUIRK(0x106b, 0x5b00, "MacBookAir 4,2", CS420X_MBA42), | ||
364 | SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE), | 367 | SND_PCI_QUIRK_VENDOR(0x106b, "Apple", CS420X_APPLE), |
365 | {} /* terminator */ | 368 | {} /* terminator */ |
366 | }; | 369 | }; |
@@ -414,6 +417,20 @@ static const struct hda_pintbl mbp101_pincfgs[] = { | |||
414 | {} /* terminator */ | 417 | {} /* terminator */ |
415 | }; | 418 | }; |
416 | 419 | ||
420 | static const struct hda_pintbl mba42_pincfgs[] = { | ||
421 | { 0x09, 0x012b4030 }, /* HP */ | ||
422 | { 0x0a, 0x400000f0 }, | ||
423 | { 0x0b, 0x90100120 }, /* speaker */ | ||
424 | { 0x0c, 0x400000f0 }, | ||
425 | { 0x0d, 0x90a00110 }, /* mic */ | ||
426 | { 0x0e, 0x400000f0 }, | ||
427 | { 0x0f, 0x400000f0 }, | ||
428 | { 0x10, 0x400000f0 }, | ||
429 | { 0x12, 0x400000f0 }, | ||
430 | { 0x15, 0x400000f0 }, | ||
431 | {} /* terminator */ | ||
432 | }; | ||
433 | |||
417 | static void cs420x_fixup_gpio_13(struct hda_codec *codec, | 434 | static void cs420x_fixup_gpio_13(struct hda_codec *codec, |
418 | const struct hda_fixup *fix, int action) | 435 | const struct hda_fixup *fix, int action) |
419 | { | 436 | { |
@@ -482,6 +499,12 @@ static const struct hda_fixup cs420x_fixups[] = { | |||
482 | .chained = true, | 499 | .chained = true, |
483 | .chain_id = CS420X_GPIO_13, | 500 | .chain_id = CS420X_GPIO_13, |
484 | }, | 501 | }, |
502 | [CS420X_MBA42] = { | ||
503 | .type = HDA_FIXUP_PINS, | ||
504 | .v.pins = mba42_pincfgs, | ||
505 | .chained = true, | ||
506 | .chain_id = CS420X_GPIO_13, | ||
507 | }, | ||
485 | }; | 508 | }; |
486 | 509 | ||
487 | static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid) | 510 | static struct cs_spec *cs_alloc_spec(struct hda_codec *codec, int vendor_nid) |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 6bf47f7326ad..403010c9e82e 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -3482,6 +3482,8 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3482 | SND_PCI_QUIRK(0x1028, 0x05c9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3482 | SND_PCI_QUIRK(0x1028, 0x05c9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3483 | SND_PCI_QUIRK(0x1028, 0x05ca, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3483 | SND_PCI_QUIRK(0x1028, 0x05ca, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
3484 | SND_PCI_QUIRK(0x1028, 0x05cb, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | 3484 | SND_PCI_QUIRK(0x1028, 0x05cb, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), |
3485 | SND_PCI_QUIRK(0x1028, 0x05de, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | ||
3486 | SND_PCI_QUIRK(0x1028, 0x05e0, "Dell", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), | ||
3485 | SND_PCI_QUIRK(0x1028, 0x05e9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3487 | SND_PCI_QUIRK(0x1028, 0x05e9, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3486 | SND_PCI_QUIRK(0x1028, 0x05ea, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3488 | SND_PCI_QUIRK(0x1028, 0x05ea, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3487 | SND_PCI_QUIRK(0x1028, 0x05eb, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3489 | SND_PCI_QUIRK(0x1028, 0x05eb, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
@@ -3492,6 +3494,10 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3492 | SND_PCI_QUIRK(0x1028, 0x05f4, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3494 | SND_PCI_QUIRK(0x1028, 0x05f4, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3493 | SND_PCI_QUIRK(0x1028, 0x05f5, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3495 | SND_PCI_QUIRK(0x1028, 0x05f5, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3494 | SND_PCI_QUIRK(0x1028, 0x05f6, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | 3496 | SND_PCI_QUIRK(0x1028, 0x05f6, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), |
3497 | SND_PCI_QUIRK(0x1028, 0x05f8, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | ||
3498 | SND_PCI_QUIRK(0x1028, 0x0606, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | ||
3499 | SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | ||
3500 | SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), | ||
3495 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), | 3501 | SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), |
3496 | SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED), | 3502 | SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED), |
3497 | SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1), | 3503 | SND_PCI_QUIRK(0x103c, 0x1973, "HP Pavilion", ALC269_FIXUP_HP_MUTE_LED_MIC1), |
@@ -3529,6 +3535,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = { | |||
3529 | SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK), | 3535 | SND_PCI_QUIRK(0x17aa, 0x21fa, "Thinkpad X230", ALC269_FIXUP_LENOVO_DOCK), |
3530 | SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK), | 3536 | SND_PCI_QUIRK(0x17aa, 0x21f3, "Thinkpad T430", ALC269_FIXUP_LENOVO_DOCK), |
3531 | SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK), | 3537 | SND_PCI_QUIRK(0x17aa, 0x21fb, "Thinkpad T430s", ALC269_FIXUP_LENOVO_DOCK), |
3538 | SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK), | ||
3532 | SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK), | 3539 | SND_PCI_QUIRK(0x17aa, 0x2203, "Thinkpad X230 Tablet", ALC269_FIXUP_LENOVO_DOCK), |
3533 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), | 3540 | SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K), |
3534 | SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), | 3541 | SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD), |
@@ -3592,6 +3599,8 @@ static const struct hda_model_fixup alc269_fixup_models[] = { | |||
3592 | {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, | 3599 | {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, |
3593 | {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, | 3600 | {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, |
3594 | {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, | 3601 | {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, |
3602 | {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, | ||
3603 | {.id = ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, .name = "dell-headset-dock"}, | ||
3595 | {} | 3604 | {} |
3596 | }; | 3605 | }; |
3597 | 3606 | ||
@@ -4271,6 +4280,7 @@ static const struct hda_model_fixup alc662_fixup_models[] = { | |||
4271 | {.id = ALC662_FIXUP_ASUS_MODE7, .name = "asus-mode7"}, | 4280 | {.id = ALC662_FIXUP_ASUS_MODE7, .name = "asus-mode7"}, |
4272 | {.id = ALC662_FIXUP_ASUS_MODE8, .name = "asus-mode8"}, | 4281 | {.id = ALC662_FIXUP_ASUS_MODE8, .name = "asus-mode8"}, |
4273 | {.id = ALC662_FIXUP_INV_DMIC, .name = "inv-dmic"}, | 4282 | {.id = ALC662_FIXUP_INV_DMIC, .name = "inv-dmic"}, |
4283 | {.id = ALC668_FIXUP_DELL_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, | ||
4274 | {} | 4284 | {} |
4275 | }; | 4285 | }; |
4276 | 4286 | ||
diff --git a/sound/pci/hda/patch_via.c b/sound/pci/hda/patch_via.c index e0dadcf2030d..e5245544eb52 100644 --- a/sound/pci/hda/patch_via.c +++ b/sound/pci/hda/patch_via.c | |||
@@ -136,6 +136,7 @@ static struct via_spec *via_new_spec(struct hda_codec *codec) | |||
136 | spec->codec_type = VT1708S; | 136 | spec->codec_type = VT1708S; |
137 | spec->no_pin_power_ctl = 1; | 137 | spec->no_pin_power_ctl = 1; |
138 | spec->gen.indep_hp = 1; | 138 | spec->gen.indep_hp = 1; |
139 | spec->gen.keep_eapd_on = 1; | ||
139 | spec->gen.pcm_playback_hook = via_playback_pcm_hook; | 140 | spec->gen.pcm_playback_hook = via_playback_pcm_hook; |
140 | return spec; | 141 | return spec; |
141 | } | 142 | } |
@@ -231,9 +232,14 @@ static void vt1708_update_hp_work(struct hda_codec *codec) | |||
231 | 232 | ||
232 | static void set_widgets_power_state(struct hda_codec *codec) | 233 | static void set_widgets_power_state(struct hda_codec *codec) |
233 | { | 234 | { |
235 | #if 0 /* FIXME: the assumed connections don't match always with the | ||
236 | * actual routes by the generic parser, so better to disable | ||
237 | * the control for safety. | ||
238 | */ | ||
234 | struct via_spec *spec = codec->spec; | 239 | struct via_spec *spec = codec->spec; |
235 | if (spec->set_widgets_power_state) | 240 | if (spec->set_widgets_power_state) |
236 | spec->set_widgets_power_state(codec); | 241 | spec->set_widgets_power_state(codec); |
242 | #endif | ||
237 | } | 243 | } |
238 | 244 | ||
239 | static void update_power_state(struct hda_codec *codec, hda_nid_t nid, | 245 | static void update_power_state(struct hda_codec *codec, hda_nid_t nid, |
@@ -478,7 +484,9 @@ static int via_suspend(struct hda_codec *codec) | |||
478 | /* Fix pop noise on headphones */ | 484 | /* Fix pop noise on headphones */ |
479 | int i; | 485 | int i; |
480 | for (i = 0; i < spec->gen.autocfg.hp_outs; i++) | 486 | for (i = 0; i < spec->gen.autocfg.hp_outs; i++) |
481 | snd_hda_set_pin_ctl(codec, spec->gen.autocfg.hp_pins[i], 0); | 487 | snd_hda_codec_write(codec, spec->gen.autocfg.hp_pins[i], |
488 | 0, AC_VERB_SET_PIN_WIDGET_CONTROL, | ||
489 | 0x00); | ||
482 | } | 490 | } |
483 | 491 | ||
484 | return 0; | 492 | return 0; |
diff --git a/sound/pci/sis7019.c b/sound/pci/sis7019.c index d59abe1682c5..748e82d4d257 100644 --- a/sound/pci/sis7019.c +++ b/sound/pci/sis7019.c | |||
@@ -1341,7 +1341,8 @@ static int sis_chip_create(struct snd_card *card, | |||
1341 | if (rc) | 1341 | if (rc) |
1342 | goto error_out; | 1342 | goto error_out; |
1343 | 1343 | ||
1344 | if (pci_set_dma_mask(pci, DMA_BIT_MASK(30)) < 0) { | 1344 | rc = pci_set_dma_mask(pci, DMA_BIT_MASK(30)); |
1345 | if (rc < 0) { | ||
1345 | dev_err(&pci->dev, "architecture does not support 30-bit PCI busmaster DMA"); | 1346 | dev_err(&pci->dev, "architecture does not support 30-bit PCI busmaster DMA"); |
1346 | goto error_out_enabled; | 1347 | goto error_out_enabled; |
1347 | } | 1348 | } |