Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'sound-3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"All stable fixes except for a trivial headset mic fixup: the removal
of bogus frame checks in snd-usb-usx2y driver that have regressed in
the recent kernel versions, the HD-audio HDMI channel map fix, and a
few HD-audio device-specific fixes"

* tag 'sound-3.12' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda - Sony VAIO Pro 13 (haswell) now has a working headset jack
ALSA: hda - Add a headset mic model for ALC269 and friends
ALSA: hda - Fix microphone for Sony VAIO Pro 13 (Haswell model)
ALSA: hda - Add fixup for ASUS N56VZ
ALSA: hda - hdmi: Fix channel map switch not taking effect
ALSA: hda - Fix mono speakers and headset mic on Dell Vostro 5470
ALSA: snd-usb-usx2y: remove bogus frame checks

+67 -35
+1
Documentation/sound/alsa/HD-Audio-Models.txt
··· 28 28 alc269-dmic Enable ALC269(VA) digital mic workaround 29 29 alc271-dmic Enable ALC271X digital mic workaround 30 30 inv-dmic Inverted internal mic workaround 31 + headset-mic Indicates a combined headset (headphone+mic) jack 31 32 lenovo-dock Enables docking station I/O for some Lenovos 32 33 dell-headset-multi Headset jack, which can also be used as mic-in 33 34 dell-headset-dock Headset jack (without mic-in), and also dock I/O
+8 -10
sound/pci/hda/patch_hdmi.c
··· 937 937 } 938 938 939 939 /* 940 + * always configure channel mapping, it may have been changed by the 941 + * user in the meantime 942 + */ 943 + hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, 944 + channels, per_pin->chmap, 945 + per_pin->chmap_set); 946 + 947 + /* 940 948 * sizeof(ai) is used instead of sizeof(*hdmi_ai) or 941 949 * sizeof(*dp_ai) to avoid partial match/update problems when 942 950 * the user switches between HDMI/DP monitors. ··· 955 947 "pin=%d channels=%d\n", 956 948 pin_nid, 957 949 channels); 958 - hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, 959 - channels, per_pin->chmap, 960 - per_pin->chmap_set); 961 950 hdmi_stop_infoframe_trans(codec, pin_nid); 962 951 hdmi_fill_audio_infoframe(codec, pin_nid, 963 952 ai.bytes, sizeof(ai)); 964 953 hdmi_start_infoframe_trans(codec, pin_nid); 965 - } else { 966 - /* For non-pcm audio switch, setup new channel mapping 967 - * accordingly */ 968 - if (per_pin->non_pcm != non_pcm) 969 - hdmi_setup_channel_mapping(codec, pin_nid, non_pcm, ca, 970 - channels, per_pin->chmap, 971 - per_pin->chmap_set); 972 954 } 973 955 974 956 per_pin->non_pcm = non_pcm;
+54
sound/pci/hda/patch_realtek.c
··· 2819 2819 alc_write_coef_idx(codec, 0x1e, coef | 0x80); 2820 2820 } 2821 2821 2822 + static void alc269_fixup_headset_mic(struct hda_codec *codec, 2823 + const struct hda_fixup *fix, int action) 2824 + { 2825 + struct alc_spec *spec = codec->spec; 2826 + 2827 + if (action == HDA_FIXUP_ACT_PRE_PROBE) 2828 + spec->parse_flags |= HDA_PINCFG_HEADSET_MIC; 2829 + } 2830 + 2822 2831 static void alc271_fixup_dmic(struct hda_codec *codec, 2823 2832 const struct hda_fixup *fix, int action) 2824 2833 { ··· 3505 3496 } 3506 3497 } 3507 3498 3499 + static void alc290_fixup_mono_speakers(struct hda_codec *codec, 3500 + const struct hda_fixup *fix, int action) 3501 + { 3502 + if (action == HDA_FIXUP_ACT_PRE_PROBE) 3503 + /* Remove DAC node 0x03, as it seems to be 3504 + giving mono output */ 3505 + snd_hda_override_wcaps(codec, 0x03, 0); 3506 + } 3507 + 3508 3508 enum { 3509 3509 ALC269_FIXUP_SONY_VAIO, 3510 3510 ALC275_FIXUP_SONY_VAIO_GPIO2, ··· 3525 3507 ALC271_FIXUP_DMIC, 3526 3508 ALC269_FIXUP_PCM_44K, 3527 3509 ALC269_FIXUP_STEREO_DMIC, 3510 + ALC269_FIXUP_HEADSET_MIC, 3528 3511 ALC269_FIXUP_QUANTA_MUTE, 3529 3512 ALC269_FIXUP_LIFEBOOK, 3530 3513 ALC269_FIXUP_AMIC, ··· 3538 3519 ALC269_FIXUP_HP_GPIO_LED, 3539 3520 ALC269_FIXUP_INV_DMIC, 3540 3521 ALC269_FIXUP_LENOVO_DOCK, 3522 + ALC286_FIXUP_SONY_MIC_NO_PRESENCE, 3541 3523 ALC269_FIXUP_PINCFG_NO_HP_TO_LINEOUT, 3542 3524 ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, 3543 3525 ALC269_FIXUP_DELL2_MIC_NO_PRESENCE, 3526 + ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, 3544 3527 ALC269_FIXUP_HEADSET_MODE, 3545 3528 ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC, 3546 3529 ALC269_FIXUP_ASUS_X101_FUNC, ··· 3556 3535 ALC283_FIXUP_CHROME_BOOK, 3557 3536 ALC282_FIXUP_ASUS_TX300, 3558 3537 ALC283_FIXUP_INT_MIC, 3538 + ALC290_FIXUP_MONO_SPEAKERS, 3559 3539 }; 3560 3540 3561 3541 static const struct hda_fixup alc269_fixups[] = { ··· 3624 3602 [ALC269_FIXUP_STEREO_DMIC] = { 3625 3603 .type = HDA_FIXUP_FUNC, 3626 3604 .v.func = alc269_fixup_stereo_dmic, 3605 + }, 3606 + [ALC269_FIXUP_HEADSET_MIC] = { 3607 + .type = HDA_FIXUP_FUNC, 3608 + .v.func = alc269_fixup_headset_mic, 3627 3609 }, 3628 3610 [ALC269_FIXUP_QUANTA_MUTE] = { 3629 3611 .type = HDA_FIXUP_FUNC, ··· 3738 3712 .chained = true, 3739 3713 .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC 3740 3714 }, 3715 + [ALC269_FIXUP_DELL3_MIC_NO_PRESENCE] = { 3716 + .type = HDA_FIXUP_PINS, 3717 + .v.pins = (const struct hda_pintbl[]) { 3718 + { 0x1a, 0x01a1913c }, /* use as headset mic, without its own jack detect */ 3719 + { } 3720 + }, 3721 + .chained = true, 3722 + .chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC 3723 + }, 3741 3724 [ALC269_FIXUP_HEADSET_MODE] = { 3742 3725 .type = HDA_FIXUP_FUNC, 3743 3726 .v.func = alc_fixup_headset_mode, ··· 3754 3719 [ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC] = { 3755 3720 .type = HDA_FIXUP_FUNC, 3756 3721 .v.func = alc_fixup_headset_mode_no_hp_mic, 3722 + }, 3723 + [ALC286_FIXUP_SONY_MIC_NO_PRESENCE] = { 3724 + .type = HDA_FIXUP_PINS, 3725 + .v.pins = (const struct hda_pintbl[]) { 3726 + { 0x18, 0x01a1913c }, /* use as headset mic, without its own jack detect */ 3727 + { } 3728 + }, 3729 + .chained = true, 3730 + .chain_id = ALC269_FIXUP_HEADSET_MIC 3757 3731 }, 3758 3732 [ALC269_FIXUP_ASUS_X101_FUNC] = { 3759 3733 .type = HDA_FIXUP_FUNC, ··· 3848 3804 .chained = true, 3849 3805 .chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST 3850 3806 }, 3807 + [ALC290_FIXUP_MONO_SPEAKERS] = { 3808 + .type = HDA_FIXUP_FUNC, 3809 + .v.func = alc290_fixup_mono_speakers, 3810 + .chained = true, 3811 + .chain_id = ALC269_FIXUP_DELL3_MIC_NO_PRESENCE, 3812 + }, 3851 3813 }; 3852 3814 3853 3815 static const struct snd_pci_quirk alc269_fixup_tbl[] = { ··· 3895 3845 SND_PCI_QUIRK(0x1028, 0x0608, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 3896 3846 SND_PCI_QUIRK(0x1028, 0x0609, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 3897 3847 SND_PCI_QUIRK(0x1028, 0x0613, "Dell", ALC269_FIXUP_DELL1_MIC_NO_PRESENCE), 3848 + SND_PCI_QUIRK(0x1028, 0x0616, "Dell Vostro 5470", ALC290_FIXUP_MONO_SPEAKERS), 3898 3849 SND_PCI_QUIRK(0x1028, 0x15cc, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 3899 3850 SND_PCI_QUIRK(0x1028, 0x15cd, "Dell X5 Precision", ALC269_FIXUP_DELL2_MIC_NO_PRESENCE), 3900 3851 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), ··· 3918 3867 SND_PCI_QUIRK(0x1043, 0x8398, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), 3919 3868 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS P1005", ALC269_FIXUP_STEREO_DMIC), 3920 3869 SND_PCI_QUIRK(0x1043, 0x8516, "ASUS X101CH", ALC269_FIXUP_ASUS_X101), 3870 + SND_PCI_QUIRK(0x104d, 0x90b6, "Sony VAIO Pro 13", ALC286_FIXUP_SONY_MIC_NO_PRESENCE), 3921 3871 SND_PCI_QUIRK(0x104d, 0x9073, "Sony VAIO", ALC275_FIXUP_SONY_VAIO_GPIO2), 3922 3872 SND_PCI_QUIRK(0x104d, 0x907b, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), 3923 3873 SND_PCI_QUIRK(0x104d, 0x9084, "Sony VAIO", ALC275_FIXUP_SONY_HWEQ), ··· 4004 3952 {.id = ALC269_FIXUP_STEREO_DMIC, .name = "alc269-dmic"}, 4005 3953 {.id = ALC271_FIXUP_DMIC, .name = "alc271-dmic"}, 4006 3954 {.id = ALC269_FIXUP_INV_DMIC, .name = "inv-dmic"}, 3955 + {.id = ALC269_FIXUP_HEADSET_MIC, .name = "headset-mic"}, 4007 3956 {.id = ALC269_FIXUP_LENOVO_DOCK, .name = "lenovo-dock"}, 4008 3957 {.id = ALC269_FIXUP_HP_GPIO_LED, .name = "hp-gpio-led"}, 4009 3958 {.id = ALC269_FIXUP_DELL1_MIC_NO_PRESENCE, .name = "dell-headset-multi"}, ··· 4622 4569 SND_PCI_QUIRK(0x1028, 0x05d8, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), 4623 4570 SND_PCI_QUIRK(0x1028, 0x05db, "Dell", ALC668_FIXUP_DELL_MIC_NO_PRESENCE), 4624 4571 SND_PCI_QUIRK(0x103c, 0x1632, "HP RP5800", ALC662_FIXUP_HP_RP5800), 4572 + SND_PCI_QUIRK(0x1043, 0x1477, "ASUS N56VZ", ALC662_FIXUP_ASUS_MODE4), 4625 4573 SND_PCI_QUIRK(0x1043, 0x8469, "ASUS mobo", ALC662_FIXUP_NO_JACK_DETECT), 4626 4574 SND_PCI_QUIRK(0x105b, 0x0cd6, "Foxconn", ALC662_FIXUP_ASUS_MODE2), 4627 4575 SND_PCI_QUIRK(0x144d, 0xc051, "Samsung R720", ALC662_FIXUP_IDEAPAD),
+3 -19
sound/usb/usx2y/usbusx2yaudio.c
··· 299 299 usX2Y_clients_stop(usX2Y); 300 300 } 301 301 302 - static void usX2Y_error_sequence(struct usX2Ydev *usX2Y, 303 - struct snd_usX2Y_substream *subs, struct urb *urb) 304 - { 305 - snd_printk(KERN_ERR 306 - "Sequence Error!(hcd_frame=%i ep=%i%s;wait=%i,frame=%i).\n" 307 - "Most probably some urb of usb-frame %i is still missing.\n" 308 - "Cause could be too long delays in usb-hcd interrupt handling.\n", 309 - usb_get_current_frame_number(usX2Y->dev), 310 - subs->endpoint, usb_pipein(urb->pipe) ? "in" : "out", 311 - usX2Y->wait_iso_frame, urb->start_frame, usX2Y->wait_iso_frame); 312 - usX2Y_clients_stop(usX2Y); 313 - } 314 - 315 302 static void i_usX2Y_urb_complete(struct urb *urb) 316 303 { 317 304 struct snd_usX2Y_substream *subs = urb->context; ··· 315 328 usX2Y_error_urb_status(usX2Y, subs, urb); 316 329 return; 317 330 } 318 - if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF))) 319 - subs->completed_urb = urb; 320 - else { 321 - usX2Y_error_sequence(usX2Y, subs, urb); 322 - return; 323 - } 331 + 332 + subs->completed_urb = urb; 333 + 324 334 { 325 335 struct snd_usX2Y_substream *capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE], 326 336 *playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];
+1 -6
sound/usb/usx2y/usx2yhwdeppcm.c
··· 244 244 usX2Y_error_urb_status(usX2Y, subs, urb); 245 245 return; 246 246 } 247 - if (likely((urb->start_frame & 0xFFFF) == (usX2Y->wait_iso_frame & 0xFFFF))) 248 - subs->completed_urb = urb; 249 - else { 250 - usX2Y_error_sequence(usX2Y, subs, urb); 251 - return; 252 - } 253 247 248 + subs->completed_urb = urb; 254 249 capsubs = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE]; 255 250 capsubs2 = usX2Y->subs[SNDRV_PCM_STREAM_CAPTURE + 2]; 256 251 playbacksubs = usX2Y->subs[SNDRV_PCM_STREAM_PLAYBACK];