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-fix-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
"Just a few device-specific HD-audio and USB-audio fixes"

* tag 'sound-fix-5.13-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda: generic: change the DAC ctl name for LO+SPK or LO+HP
ALSA: hda/realtek: Add fixup for HP OMEN laptop
ALSA: hda/realtek: Fix speaker amp on HP Envy AiO 32
ALSA: hda/realtek: Fix silent headphone output on ASUS UX430UA
ALSA: usb-audio: Add dB range mapping for Sennheiser Communications Headset PC 8
ALSA: hda/realtek: ALC285 Thinkpad jack pin quirk is unreachable

+109 -9
+11 -5
sound/pci/hda/hda_generic.c
··· 1204 1204 *index = ch; 1205 1205 return "Headphone"; 1206 1206 case AUTO_PIN_LINE_OUT: 1207 - /* This deals with the case where we have two DACs and 1208 - * one LO, one HP and one Speaker */ 1209 - if (!ch && cfg->speaker_outs && cfg->hp_outs) { 1210 - bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); 1211 - bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type); 1207 + /* This deals with the case where one HP or one Speaker or 1208 + * one HP + one Speaker need to share the DAC with LO 1209 + */ 1210 + if (!ch) { 1211 + bool hp_lo_shared = false, spk_lo_shared = false; 1212 + 1213 + if (cfg->speaker_outs) 1214 + spk_lo_shared = !path_has_mixer(codec, 1215 + spec->speaker_paths[0], ctl_type); 1216 + if (cfg->hp_outs) 1217 + hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type); 1212 1218 if (hp_lo_shared && spk_lo_shared) 1213 1219 return spec->vmaster_mute.hook ? "PCM" : "Master"; 1214 1220 if (hp_lo_shared)
+86 -4
sound/pci/hda/patch_realtek.c
··· 4338 4338 } 4339 4339 } 4340 4340 4341 + /* toggle GPIO2 at each time stream is started; we use PREPARE state instead */ 4342 + static void alc274_hp_envy_pcm_hook(struct hda_pcm_stream *hinfo, 4343 + struct hda_codec *codec, 4344 + struct snd_pcm_substream *substream, 4345 + int action) 4346 + { 4347 + switch (action) { 4348 + case HDA_GEN_PCM_ACT_PREPARE: 4349 + alc_update_gpio_data(codec, 0x04, true); 4350 + break; 4351 + case HDA_GEN_PCM_ACT_CLEANUP: 4352 + alc_update_gpio_data(codec, 0x04, false); 4353 + break; 4354 + } 4355 + } 4356 + 4357 + static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec, 4358 + const struct hda_fixup *fix, 4359 + int action) 4360 + { 4361 + struct alc_spec *spec = codec->spec; 4362 + 4363 + if (action == HDA_FIXUP_ACT_PROBE) { 4364 + spec->gpio_mask |= 0x04; 4365 + spec->gpio_dir |= 0x04; 4366 + spec->gen.pcm_playback_hook = alc274_hp_envy_pcm_hook; 4367 + } 4368 + } 4369 + 4341 4370 static void alc_update_coef_led(struct hda_codec *codec, 4342 4371 struct alc_coef_led *led, 4343 4372 bool polarity, bool on) ··· 5724 5695 spec->gen.preferred_dacs = preferred_pairs; 5725 5696 } 5726 5697 5698 + static void alc295_fixup_asus_dacs(struct hda_codec *codec, 5699 + const struct hda_fixup *fix, int action) 5700 + { 5701 + static const hda_nid_t preferred_pairs[] = { 5702 + 0x17, 0x02, 0x21, 0x03, 0 5703 + }; 5704 + struct alc_spec *spec = codec->spec; 5705 + 5706 + if (action == HDA_FIXUP_ACT_PRE_PROBE) 5707 + spec->gen.preferred_dacs = preferred_pairs; 5708 + } 5709 + 5727 5710 static void alc_shutup_dell_xps13(struct hda_codec *codec) 5728 5711 { 5729 5712 struct alc_spec *spec = codec->spec; ··· 6494 6453 ALC255_FIXUP_XIAOMI_HEADSET_MIC, 6495 6454 ALC274_FIXUP_HP_MIC, 6496 6455 ALC274_FIXUP_HP_HEADSET_MIC, 6456 + ALC274_FIXUP_HP_ENVY_GPIO, 6497 6457 ALC256_FIXUP_ASUS_HPE, 6498 6458 ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK, 6499 6459 ALC287_FIXUP_HP_GPIO_LED, ··· 6505 6463 ALC256_FIXUP_ACER_HEADSET_MIC, 6506 6464 ALC285_FIXUP_IDEAPAD_S740_COEF, 6507 6465 ALC285_FIXUP_HP_LIMIT_INT_MIC_BOOST, 6466 + ALC295_FIXUP_ASUS_DACS, 6467 + ALC295_FIXUP_HP_OMEN, 6508 6468 }; 6509 6469 6510 6470 static const struct hda_fixup alc269_fixups[] = { ··· 7938 7894 .chained = true, 7939 7895 .chain_id = ALC274_FIXUP_HP_MIC 7940 7896 }, 7897 + [ALC274_FIXUP_HP_ENVY_GPIO] = { 7898 + .type = HDA_FIXUP_FUNC, 7899 + .v.func = alc274_fixup_hp_envy_gpio, 7900 + }, 7941 7901 [ALC256_FIXUP_ASUS_HPE] = { 7942 7902 .type = HDA_FIXUP_VERBS, 7943 7903 .v.verbs = (const struct hda_verb[]) { ··· 8010 7962 .v.func = alc269_fixup_limit_int_mic_boost, 8011 7963 .chained = true, 8012 7964 .chain_id = ALC285_FIXUP_HP_MUTE_LED, 7965 + }, 7966 + [ALC295_FIXUP_ASUS_DACS] = { 7967 + .type = HDA_FIXUP_FUNC, 7968 + .v.func = alc295_fixup_asus_dacs, 7969 + }, 7970 + [ALC295_FIXUP_HP_OMEN] = { 7971 + .type = HDA_FIXUP_PINS, 7972 + .v.pins = (const struct hda_pintbl[]) { 7973 + { 0x12, 0xb7a60130 }, 7974 + { 0x13, 0x40000000 }, 7975 + { 0x14, 0x411111f0 }, 7976 + { 0x16, 0x411111f0 }, 7977 + { 0x17, 0x90170110 }, 7978 + { 0x18, 0x411111f0 }, 7979 + { 0x19, 0x02a11030 }, 7980 + { 0x1a, 0x411111f0 }, 7981 + { 0x1b, 0x04a19030 }, 7982 + { 0x1d, 0x40600001 }, 7983 + { 0x1e, 0x411111f0 }, 7984 + { 0x21, 0x03211020 }, 7985 + {} 7986 + }, 7987 + .chained = true, 7988 + .chain_id = ALC269_FIXUP_HP_LINE1_MIC1_LED, 8013 7989 }, 8014 7990 }; 8015 7991 ··· 8193 8121 SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE), 8194 8122 SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), 8195 8123 SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3), 8124 + SND_PCI_QUIRK(0x103c, 0x84da, "HP OMEN dc0019-ur", ALC295_FIXUP_HP_OMEN), 8196 8125 SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3), 8197 8126 SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED), 8127 + SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO), 8198 8128 SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED), 8199 8129 SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED), 8200 8130 SND_PCI_QUIRK(0x103c, 0x8730, "HP ProBook 445 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), ··· 8235 8161 SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK), 8236 8162 SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A), 8237 8163 SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC), 8164 + SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS), 8238 8165 SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK), 8239 8166 SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS), 8240 8167 SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC), ··· 8599 8524 {.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"}, 8600 8525 {.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"}, 8601 8526 {.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"}, 8527 + {.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"}, 8602 8528 {} 8603 8529 }; 8604 8530 #define ALC225_STANDARD_PINS \ ··· 8877 8801 {0x19, 0x03a11020}, 8878 8802 {0x21, 0x0321101f}), 8879 8803 SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE, 8804 + {0x12, 0x90a60130}, 8805 + {0x14, 0x90170110}, 8806 + {0x19, 0x04a11040}, 8807 + {0x21, 0x04211020}), 8808 + SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE, 8809 + {0x14, 0x90170110}, 8810 + {0x19, 0x04a11040}, 8811 + {0x1d, 0x40600001}, 8812 + {0x21, 0x04211020}), 8813 + SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK, 8880 8814 {0x14, 0x90170110}, 8881 8815 {0x19, 0x04a11040}, 8882 8816 {0x21, 0x04211020}), ··· 9057 8971 SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB, 9058 8972 {0x19, 0x40000000}, 9059 8973 {0x1a, 0x40000000}), 9060 - SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK, 9061 - {0x14, 0x90170110}, 9062 - {0x19, 0x04a11040}, 9063 - {0x21, 0x04211020}), 9064 8974 {} 9065 8975 }; 9066 8976
+12
sound/usb/mixer_maps.c
··· 337 337 { 0 } /* terminator */ 338 338 }; 339 339 340 + /* Sennheiser Communications Headset [PC 8], the dB value is reported as -6 negative maximum */ 341 + static const struct usbmix_dB_map sennheiser_pc8_dB = {-9500, 0}; 342 + static const struct usbmix_name_map sennheiser_pc8_map[] = { 343 + { 9, NULL, .dB = &sennheiser_pc8_dB }, 344 + { 0 } /* terminator */ 345 + }; 346 + 340 347 /* 341 348 * Dell usb dock with ALC4020 codec had a firmware problem where it got 342 349 * screwed up when zero volume is passed; just skip it as a workaround ··· 599 592 { /* Lenovo ThinkStation P620 Rear */ 600 593 .id = USB_ID(0x17aa, 0x1046), 601 594 .map = lenovo_p620_rear_map, 595 + }, 596 + { 597 + /* Sennheiser Communications Headset [PC 8] */ 598 + .id = USB_ID(0x1395, 0x0025), 599 + .map = sennheiser_pc8_map, 602 600 }, 603 601 { 0 } /* terminator */ 604 602 };