diff options
author | Takashi Iwai <tiwai@suse.de> | 2016-12-09 05:21:35 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2016-12-09 05:21:35 -0500 |
commit | d71bb23a81f80eeb5291e5c782377024e7265a23 (patch) | |
tree | 81aded55aceadd50ff2360df95f626d7bc35265c | |
parent | 17f08b0d9aafccdb10038ab6dbd9ddb6433c13e2 (diff) | |
parent | 82ffb6fc637150b279f49e174166d2aa3853eaf4 (diff) |
Merge branch 'for-linus' into for-next
-rw-r--r-- | sound/pci/hda/hda_auto_parser.c | 4 | ||||
-rw-r--r-- | sound/pci/hda/patch_conexant.c | 17 | ||||
-rw-r--r-- | sound/usb/endpoint.c | 12 | ||||
-rw-r--r-- | sound/usb/mixer.c | 3 |
4 files changed, 30 insertions, 6 deletions
diff --git a/sound/pci/hda/hda_auto_parser.c b/sound/pci/hda/hda_auto_parser.c index 4ad29f8d7a4a..a03cf68d0bcd 100644 --- a/sound/pci/hda/hda_auto_parser.c +++ b/sound/pci/hda/hda_auto_parser.c | |||
@@ -884,6 +884,8 @@ void snd_hda_apply_fixup(struct hda_codec *codec, int action) | |||
884 | } | 884 | } |
885 | EXPORT_SYMBOL_GPL(snd_hda_apply_fixup); | 885 | EXPORT_SYMBOL_GPL(snd_hda_apply_fixup); |
886 | 886 | ||
887 | #define IGNORE_SEQ_ASSOC (~(AC_DEFCFG_SEQUENCE | AC_DEFCFG_DEF_ASSOC)) | ||
888 | |||
887 | static bool pin_config_match(struct hda_codec *codec, | 889 | static bool pin_config_match(struct hda_codec *codec, |
888 | const struct hda_pintbl *pins) | 890 | const struct hda_pintbl *pins) |
889 | { | 891 | { |
@@ -901,7 +903,7 @@ static bool pin_config_match(struct hda_codec *codec, | |||
901 | for (; t_pins->nid; t_pins++) { | 903 | for (; t_pins->nid; t_pins++) { |
902 | if (t_pins->nid == nid) { | 904 | if (t_pins->nid == nid) { |
903 | found = 1; | 905 | found = 1; |
904 | if ((t_pins->val & 0xfffffff0) == (cfg & 0xfffffff0)) | 906 | if ((t_pins->val & IGNORE_SEQ_ASSOC) == (cfg & IGNORE_SEQ_ASSOC)) |
905 | break; | 907 | break; |
906 | else if ((cfg & 0xf0000000) == 0x40000000 && (t_pins->val & 0xf0000000) == 0x40000000) | 908 | else if ((cfg & 0xf0000000) == 0x40000000 && (t_pins->val & 0xf0000000) == 0x40000000) |
907 | break; | 909 | break; |
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index ed62748a6d55..c15c51bea26d 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c | |||
@@ -262,6 +262,7 @@ enum { | |||
262 | CXT_FIXUP_CAP_MIX_AMP_5047, | 262 | CXT_FIXUP_CAP_MIX_AMP_5047, |
263 | CXT_FIXUP_MUTE_LED_EAPD, | 263 | CXT_FIXUP_MUTE_LED_EAPD, |
264 | CXT_FIXUP_HP_SPECTRE, | 264 | CXT_FIXUP_HP_SPECTRE, |
265 | CXT_FIXUP_HP_GATE_MIC, | ||
265 | }; | 266 | }; |
266 | 267 | ||
267 | /* for hda_fixup_thinkpad_acpi() */ | 268 | /* for hda_fixup_thinkpad_acpi() */ |
@@ -633,6 +634,17 @@ static void cxt_fixup_cap_mix_amp_5047(struct hda_codec *codec, | |||
633 | (1 << AC_AMPCAP_MUTE_SHIFT)); | 634 | (1 << AC_AMPCAP_MUTE_SHIFT)); |
634 | } | 635 | } |
635 | 636 | ||
637 | static void cxt_fixup_hp_gate_mic_jack(struct hda_codec *codec, | ||
638 | const struct hda_fixup *fix, | ||
639 | int action) | ||
640 | { | ||
641 | /* the mic pin (0x19) doesn't give an unsolicited event; | ||
642 | * probe the mic pin together with the headphone pin (0x16) | ||
643 | */ | ||
644 | if (action == HDA_FIXUP_ACT_PROBE) | ||
645 | snd_hda_jack_set_gating_jack(codec, 0x19, 0x16); | ||
646 | } | ||
647 | |||
636 | /* ThinkPad X200 & co with cxt5051 */ | 648 | /* ThinkPad X200 & co with cxt5051 */ |
637 | static const struct hda_pintbl cxt_pincfg_lenovo_x200[] = { | 649 | static const struct hda_pintbl cxt_pincfg_lenovo_x200[] = { |
638 | { 0x16, 0x042140ff }, /* HP (seq# overridden) */ | 650 | { 0x16, 0x042140ff }, /* HP (seq# overridden) */ |
@@ -774,6 +786,10 @@ static const struct hda_fixup cxt_fixups[] = { | |||
774 | { } | 786 | { } |
775 | } | 787 | } |
776 | }, | 788 | }, |
789 | [CXT_FIXUP_HP_GATE_MIC] = { | ||
790 | .type = HDA_FIXUP_FUNC, | ||
791 | .v.func = cxt_fixup_hp_gate_mic_jack, | ||
792 | }, | ||
777 | }; | 793 | }; |
778 | 794 | ||
779 | static const struct snd_pci_quirk cxt5045_fixups[] = { | 795 | static const struct snd_pci_quirk cxt5045_fixups[] = { |
@@ -824,6 +840,7 @@ static const struct snd_pci_quirk cxt5066_fixups[] = { | |||
824 | SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_ASPIRE_DMIC), | 840 | SND_PCI_QUIRK(0x1025, 0x054c, "Acer Aspire 3830TG", CXT_FIXUP_ASPIRE_DMIC), |
825 | SND_PCI_QUIRK(0x1025, 0x054f, "Acer Aspire 4830T", CXT_FIXUP_ASPIRE_DMIC), | 841 | SND_PCI_QUIRK(0x1025, 0x054f, "Acer Aspire 4830T", CXT_FIXUP_ASPIRE_DMIC), |
826 | SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE), | 842 | SND_PCI_QUIRK(0x103c, 0x8174, "HP Spectre x360", CXT_FIXUP_HP_SPECTRE), |
843 | SND_PCI_QUIRK(0x103c, 0x8115, "HP Z1 Gen3", CXT_FIXUP_HP_GATE_MIC), | ||
827 | SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN), | 844 | SND_PCI_QUIRK(0x1043, 0x138d, "Asus", CXT_FIXUP_HEADPHONE_MIC_PIN), |
828 | SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT_FIXUP_OLPC_XO), | 845 | SND_PCI_QUIRK(0x152d, 0x0833, "OLPC XO-1.5", CXT_FIXUP_OLPC_XO), |
829 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410), | 846 | SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400", CXT_PINCFG_LENOVO_TP410), |
diff --git a/sound/usb/endpoint.c b/sound/usb/endpoint.c index a2931f49a1fc..57b0d9968ec2 100644 --- a/sound/usb/endpoint.c +++ b/sound/usb/endpoint.c | |||
@@ -384,6 +384,9 @@ static void snd_complete_urb(struct urb *urb) | |||
384 | if (unlikely(atomic_read(&ep->chip->shutdown))) | 384 | if (unlikely(atomic_read(&ep->chip->shutdown))) |
385 | goto exit_clear; | 385 | goto exit_clear; |
386 | 386 | ||
387 | if (unlikely(!test_bit(EP_FLAG_RUNNING, &ep->flags))) | ||
388 | goto exit_clear; | ||
389 | |||
387 | if (usb_pipeout(ep->pipe)) { | 390 | if (usb_pipeout(ep->pipe)) { |
388 | retire_outbound_urb(ep, ctx); | 391 | retire_outbound_urb(ep, ctx); |
389 | /* can be stopped during retire callback */ | 392 | /* can be stopped during retire callback */ |
@@ -534,6 +537,11 @@ static int wait_clear_urbs(struct snd_usb_endpoint *ep) | |||
534 | alive, ep->ep_num); | 537 | alive, ep->ep_num); |
535 | clear_bit(EP_FLAG_STOPPING, &ep->flags); | 538 | clear_bit(EP_FLAG_STOPPING, &ep->flags); |
536 | 539 | ||
540 | ep->data_subs = NULL; | ||
541 | ep->sync_slave = NULL; | ||
542 | ep->retire_data_urb = NULL; | ||
543 | ep->prepare_data_urb = NULL; | ||
544 | |||
537 | return 0; | 545 | return 0; |
538 | } | 546 | } |
539 | 547 | ||
@@ -1006,10 +1014,6 @@ void snd_usb_endpoint_stop(struct snd_usb_endpoint *ep) | |||
1006 | 1014 | ||
1007 | if (--ep->use_count == 0) { | 1015 | if (--ep->use_count == 0) { |
1008 | deactivate_urbs(ep, false); | 1016 | deactivate_urbs(ep, false); |
1009 | ep->data_subs = NULL; | ||
1010 | ep->sync_slave = NULL; | ||
1011 | ep->retire_data_urb = NULL; | ||
1012 | ep->prepare_data_urb = NULL; | ||
1013 | set_bit(EP_FLAG_STOPPING, &ep->flags); | 1017 | set_bit(EP_FLAG_STOPPING, &ep->flags); |
1014 | } | 1018 | } |
1015 | } | 1019 | } |
diff --git a/sound/usb/mixer.c b/sound/usb/mixer.c index 2f8c388ef84f..4703caea56b2 100644 --- a/sound/usb/mixer.c +++ b/sound/usb/mixer.c | |||
@@ -932,9 +932,10 @@ static void volume_control_quirks(struct usb_mixer_elem_info *cval, | |||
932 | case USB_ID(0x046d, 0x0826): /* HD Webcam c525 */ | 932 | case USB_ID(0x046d, 0x0826): /* HD Webcam c525 */ |
933 | case USB_ID(0x046d, 0x08ca): /* Logitech Quickcam Fusion */ | 933 | case USB_ID(0x046d, 0x08ca): /* Logitech Quickcam Fusion */ |
934 | case USB_ID(0x046d, 0x0991): | 934 | case USB_ID(0x046d, 0x0991): |
935 | case USB_ID(0x046d, 0x09a2): /* QuickCam Communicate Deluxe/S7500 */ | ||
935 | /* Most audio usb devices lie about volume resolution. | 936 | /* Most audio usb devices lie about volume resolution. |
936 | * Most Logitech webcams have res = 384. | 937 | * Most Logitech webcams have res = 384. |
937 | * Proboly there is some logitech magic behind this number --fishor | 938 | * Probably there is some logitech magic behind this number --fishor |
938 | */ | 939 | */ |
939 | if (!strcmp(kctl->id.name, "Mic Capture Volume")) { | 940 | if (!strcmp(kctl->id.name, "Mic Capture Volume")) { |
940 | usb_audio_info(chip, | 941 | usb_audio_info(chip, |