summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2016-12-09 05:21:35 -0500
committerTakashi Iwai <tiwai@suse.de>2016-12-09 05:21:35 -0500
commitd71bb23a81f80eeb5291e5c782377024e7265a23 (patch)
tree81aded55aceadd50ff2360df95f626d7bc35265c
parent17f08b0d9aafccdb10038ab6dbd9ddb6433c13e2 (diff)
parent82ffb6fc637150b279f49e174166d2aa3853eaf4 (diff)
Merge branch 'for-linus' into for-next
-rw-r--r--sound/pci/hda/hda_auto_parser.c4
-rw-r--r--sound/pci/hda/patch_conexant.c17
-rw-r--r--sound/usb/endpoint.c12
-rw-r--r--sound/usb/mixer.c3
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}
885EXPORT_SYMBOL_GPL(snd_hda_apply_fixup); 885EXPORT_SYMBOL_GPL(snd_hda_apply_fixup);
886 886
887#define IGNORE_SEQ_ASSOC (~(AC_DEFCFG_SEQUENCE | AC_DEFCFG_DEF_ASSOC))
888
887static bool pin_config_match(struct hda_codec *codec, 889static 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
637static 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 */
637static const struct hda_pintbl cxt_pincfg_lenovo_x200[] = { 649static 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
779static const struct snd_pci_quirk cxt5045_fixups[] = { 795static 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,