mirror of
https://github.com/torvalds/linux.git
synced 2024-11-24 21:21:41 +00:00
sound fixes for 5.13-rc1
Just a few device-specific HD-audio and USB-audio fixes. -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmCT6MMOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE+EiQ/+OBil86I5j8zJWdnDnQZBzhe+r0jM9nkkBYOL 272/m0TTM9/twAHM6MfgVlXjRYRGuYv1t8DneaJG08ooPh/+jV6LvVKTNFB/TS/o a+YLP8gRZNibE+4gJM32ubrwJ/9PEzPZK/kME3nQKrvfM0coEStE581SzTGhJ24Q VROPzU0SqoeMQ+LVZ5qb04Tki2rh7EthaFUtlbcvnjCJVnvDrpKaHKuJTiZn82ud W6G85l8RX+QPsk6GgQRpexTBRjdndXDdRKanZ8GkTbMYnzODPVQQ9UZXGOJcavVx d440IjMlQWqQLluglQ85zWsacBs5vkt+TM64jvbU4lAChuGtBRuHVppaLdV3EXZi GDC6clcD4BgvxiUgu4x/hanYgSXJ0og5iYskbjCdsQtlbpSCnLzTN6ncV6Uu7zCb 1koNbx6yKIjAuhjBNrkL3csHjZZ62ZM3jyI9T7/6No/FEal4UdphWD/QtB94f7TY RZpQkwQX7n11cUMuenQELZu9tYjhbM+LOH/OufzrM7pdpJ4ggtZ4z5L/8GwHVNx2 Yn2CXD9RuvxqmWr9732Xajhc2sgRihxxdoZHG+eYY/5Q5cszxzRFKaXUPQOPWd50 23aJUfaQYmHWcLo0tCZn7tmhilxiSh34zly3PhYh3Vy0GiUPn1LFZV9yc5o1IBlO FDmivcE= =r3Dz -----END PGP SIGNATURE----- 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
This commit is contained in:
commit
2059c40ade
@ -1204,11 +1204,17 @@ static const char *get_line_out_pfx(struct hda_codec *codec, int ch,
|
||||
*index = ch;
|
||||
return "Headphone";
|
||||
case AUTO_PIN_LINE_OUT:
|
||||
/* This deals with the case where we have two DACs and
|
||||
* one LO, one HP and one Speaker */
|
||||
if (!ch && cfg->speaker_outs && cfg->hp_outs) {
|
||||
bool hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
|
||||
bool spk_lo_shared = !path_has_mixer(codec, spec->speaker_paths[0], ctl_type);
|
||||
/* This deals with the case where one HP or one Speaker or
|
||||
* one HP + one Speaker need to share the DAC with LO
|
||||
*/
|
||||
if (!ch) {
|
||||
bool hp_lo_shared = false, spk_lo_shared = false;
|
||||
|
||||
if (cfg->speaker_outs)
|
||||
spk_lo_shared = !path_has_mixer(codec,
|
||||
spec->speaker_paths[0], ctl_type);
|
||||
if (cfg->hp_outs)
|
||||
hp_lo_shared = !path_has_mixer(codec, spec->hp_paths[0], ctl_type);
|
||||
if (hp_lo_shared && spk_lo_shared)
|
||||
return spec->vmaster_mute.hook ? "PCM" : "Master";
|
||||
if (hp_lo_shared)
|
||||
|
@ -4338,6 +4338,35 @@ static void alc245_fixup_hp_x360_amp(struct hda_codec *codec,
|
||||
}
|
||||
}
|
||||
|
||||
/* toggle GPIO2 at each time stream is started; we use PREPARE state instead */
|
||||
static void alc274_hp_envy_pcm_hook(struct hda_pcm_stream *hinfo,
|
||||
struct hda_codec *codec,
|
||||
struct snd_pcm_substream *substream,
|
||||
int action)
|
||||
{
|
||||
switch (action) {
|
||||
case HDA_GEN_PCM_ACT_PREPARE:
|
||||
alc_update_gpio_data(codec, 0x04, true);
|
||||
break;
|
||||
case HDA_GEN_PCM_ACT_CLEANUP:
|
||||
alc_update_gpio_data(codec, 0x04, false);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix,
|
||||
int action)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
||||
if (action == HDA_FIXUP_ACT_PROBE) {
|
||||
spec->gpio_mask |= 0x04;
|
||||
spec->gpio_dir |= 0x04;
|
||||
spec->gen.pcm_playback_hook = alc274_hp_envy_pcm_hook;
|
||||
}
|
||||
}
|
||||
|
||||
static void alc_update_coef_led(struct hda_codec *codec,
|
||||
struct alc_coef_led *led,
|
||||
bool polarity, bool on)
|
||||
@ -5695,6 +5724,18 @@ static void alc_fixup_tpt470_dacs(struct hda_codec *codec,
|
||||
spec->gen.preferred_dacs = preferred_pairs;
|
||||
}
|
||||
|
||||
static void alc295_fixup_asus_dacs(struct hda_codec *codec,
|
||||
const struct hda_fixup *fix, int action)
|
||||
{
|
||||
static const hda_nid_t preferred_pairs[] = {
|
||||
0x17, 0x02, 0x21, 0x03, 0
|
||||
};
|
||||
struct alc_spec *spec = codec->spec;
|
||||
|
||||
if (action == HDA_FIXUP_ACT_PRE_PROBE)
|
||||
spec->gen.preferred_dacs = preferred_pairs;
|
||||
}
|
||||
|
||||
static void alc_shutup_dell_xps13(struct hda_codec *codec)
|
||||
{
|
||||
struct alc_spec *spec = codec->spec;
|
||||
@ -6453,6 +6494,7 @@ enum {
|
||||
ALC255_FIXUP_XIAOMI_HEADSET_MIC,
|
||||
ALC274_FIXUP_HP_MIC,
|
||||
ALC274_FIXUP_HP_HEADSET_MIC,
|
||||
ALC274_FIXUP_HP_ENVY_GPIO,
|
||||
ALC256_FIXUP_ASUS_HPE,
|
||||
ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
|
||||
ALC287_FIXUP_HP_GPIO_LED,
|
||||
@ -6463,6 +6505,8 @@ enum {
|
||||
ALC256_FIXUP_ACER_HEADSET_MIC,
|
||||
ALC285_FIXUP_IDEAPAD_S740_COEF,
|
||||
ALC285_FIXUP_HP_LIMIT_INT_MIC_BOOST,
|
||||
ALC295_FIXUP_ASUS_DACS,
|
||||
ALC295_FIXUP_HP_OMEN,
|
||||
};
|
||||
|
||||
static const struct hda_fixup alc269_fixups[] = {
|
||||
@ -7894,6 +7938,10 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC274_FIXUP_HP_MIC
|
||||
},
|
||||
[ALC274_FIXUP_HP_ENVY_GPIO] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc274_fixup_hp_envy_gpio,
|
||||
},
|
||||
[ALC256_FIXUP_ASUS_HPE] = {
|
||||
.type = HDA_FIXUP_VERBS,
|
||||
.v.verbs = (const struct hda_verb[]) {
|
||||
@ -7963,6 +8011,30 @@ static const struct hda_fixup alc269_fixups[] = {
|
||||
.chained = true,
|
||||
.chain_id = ALC285_FIXUP_HP_MUTE_LED,
|
||||
},
|
||||
[ALC295_FIXUP_ASUS_DACS] = {
|
||||
.type = HDA_FIXUP_FUNC,
|
||||
.v.func = alc295_fixup_asus_dacs,
|
||||
},
|
||||
[ALC295_FIXUP_HP_OMEN] = {
|
||||
.type = HDA_FIXUP_PINS,
|
||||
.v.pins = (const struct hda_pintbl[]) {
|
||||
{ 0x12, 0xb7a60130 },
|
||||
{ 0x13, 0x40000000 },
|
||||
{ 0x14, 0x411111f0 },
|
||||
{ 0x16, 0x411111f0 },
|
||||
{ 0x17, 0x90170110 },
|
||||
{ 0x18, 0x411111f0 },
|
||||
{ 0x19, 0x02a11030 },
|
||||
{ 0x1a, 0x411111f0 },
|
||||
{ 0x1b, 0x04a19030 },
|
||||
{ 0x1d, 0x40600001 },
|
||||
{ 0x1e, 0x411111f0 },
|
||||
{ 0x21, 0x03211020 },
|
||||
{}
|
||||
},
|
||||
.chained = true,
|
||||
.chain_id = ALC269_FIXUP_HP_LINE1_MIC1_LED,
|
||||
},
|
||||
};
|
||||
|
||||
static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
@ -8121,8 +8193,10 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x103c, 0x82c0, "HP G3 mini premium", ALC221_FIXUP_HP_MIC_NO_PRESENCE),
|
||||
SND_PCI_QUIRK(0x103c, 0x83b9, "HP Spectre x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
SND_PCI_QUIRK(0x103c, 0x8497, "HP Envy x360", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
SND_PCI_QUIRK(0x103c, 0x84da, "HP OMEN dc0019-ur", ALC295_FIXUP_HP_OMEN),
|
||||
SND_PCI_QUIRK(0x103c, 0x84e7, "HP Pavilion 15", ALC269_FIXUP_HP_MUTE_LED_MIC3),
|
||||
SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO),
|
||||
SND_PCI_QUIRK(0x103c, 0x8724, "HP EliteBook 850 G7", ALC285_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8729, "HP", ALC285_FIXUP_HP_GPIO_LED),
|
||||
SND_PCI_QUIRK(0x103c, 0x8730, "HP ProBook 445 G7", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
|
||||
@ -8161,6 +8235,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
|
||||
SND_PCI_QUIRK(0x1043, 0x1427, "Asus Zenbook UX31E", ALC269VB_FIXUP_ASUS_ZENBOOK),
|
||||
SND_PCI_QUIRK(0x1043, 0x1517, "Asus Zenbook UX31A", ALC269VB_FIXUP_ASUS_ZENBOOK_UX31A),
|
||||
SND_PCI_QUIRK(0x1043, 0x16e3, "ASUS UX50", ALC269_FIXUP_STEREO_DMIC),
|
||||
SND_PCI_QUIRK(0x1043, 0x1740, "ASUS UX430UA", ALC295_FIXUP_ASUS_DACS),
|
||||
SND_PCI_QUIRK(0x1043, 0x17d1, "ASUS UX431FL", ALC294_FIXUP_ASUS_DUAL_SPK),
|
||||
SND_PCI_QUIRK(0x1043, 0x1881, "ASUS Zephyrus S/M", ALC294_FIXUP_ASUS_GX502_PINS),
|
||||
SND_PCI_QUIRK(0x1043, 0x18b1, "Asus MJ401TA", ALC256_FIXUP_ASUS_HEADSET_MIC),
|
||||
@ -8524,6 +8599,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
|
||||
{.id = ALC255_FIXUP_XIAOMI_HEADSET_MIC, .name = "alc255-xiaomi-headset"},
|
||||
{.id = ALC274_FIXUP_HP_MIC, .name = "alc274-hp-mic-detect"},
|
||||
{.id = ALC245_FIXUP_HP_X360_AMP, .name = "alc245-hp-x360-amp"},
|
||||
{.id = ALC295_FIXUP_HP_OMEN, .name = "alc295-hp-omen"},
|
||||
{}
|
||||
};
|
||||
#define ALC225_STANDARD_PINS \
|
||||
@ -8801,6 +8877,16 @@ static const struct snd_hda_pin_quirk alc269_pin_fixup_tbl[] = {
|
||||
{0x19, 0x03a11020},
|
||||
{0x21, 0x0321101f}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
|
||||
{0x12, 0x90a60130},
|
||||
{0x14, 0x90170110},
|
||||
{0x19, 0x04a11040},
|
||||
{0x21, 0x04211020}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_LENOVO_PC_BEEP_IN_NOISE,
|
||||
{0x14, 0x90170110},
|
||||
{0x19, 0x04a11040},
|
||||
{0x1d, 0x40600001},
|
||||
{0x21, 0x04211020}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
|
||||
{0x14, 0x90170110},
|
||||
{0x19, 0x04a11040},
|
||||
{0x21, 0x04211020}),
|
||||
@ -8971,10 +9057,6 @@ static const struct snd_hda_pin_quirk alc269_fallback_pin_fixup_tbl[] = {
|
||||
SND_HDA_PIN_QUIRK(0x10ec0274, 0x1028, "Dell", ALC274_FIXUP_DELL_AIO_LINEOUT_VERB,
|
||||
{0x19, 0x40000000},
|
||||
{0x1a, 0x40000000}),
|
||||
SND_HDA_PIN_QUIRK(0x10ec0285, 0x17aa, "Lenovo", ALC285_FIXUP_THINKPAD_NO_BASS_SPK_HEADSET_JACK,
|
||||
{0x14, 0x90170110},
|
||||
{0x19, 0x04a11040},
|
||||
{0x21, 0x04211020}),
|
||||
{}
|
||||
};
|
||||
|
||||
|
@ -337,6 +337,13 @@ static const struct usbmix_name_map bose_companion5_map[] = {
|
||||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
/* Sennheiser Communications Headset [PC 8], the dB value is reported as -6 negative maximum */
|
||||
static const struct usbmix_dB_map sennheiser_pc8_dB = {-9500, 0};
|
||||
static const struct usbmix_name_map sennheiser_pc8_map[] = {
|
||||
{ 9, NULL, .dB = &sennheiser_pc8_dB },
|
||||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
/*
|
||||
* Dell usb dock with ALC4020 codec had a firmware problem where it got
|
||||
* screwed up when zero volume is passed; just skip it as a workaround
|
||||
@ -593,6 +600,11 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
||||
.id = USB_ID(0x17aa, 0x1046),
|
||||
.map = lenovo_p620_rear_map,
|
||||
},
|
||||
{
|
||||
/* Sennheiser Communications Headset [PC 8] */
|
||||
.id = USB_ID(0x1395, 0x0025),
|
||||
.map = sennheiser_pc8_map,
|
||||
},
|
||||
{ 0 } /* terminator */
|
||||
};
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user