514 lines
26 KiB
Diff
514 lines
26 KiB
Diff
diff --git a/include/sound/core.h b/include/sound/core.h
|
|
--- a/include/sound/core.h
|
|
+++ b/include/sound/core.h
|
|
@@ -340,6 +340,15 @@ static inline void snd_card_unref(struct snd_card *card)
|
|
|
|
DEFINE_FREE(snd_card_unref, struct snd_card *, if (_T) snd_card_unref(_T))
|
|
|
|
+/*
|
|
+ * For automatic error handling at probe time, assign the card like:
|
|
+ * struct snd_card *card __free(snd_card_free) = NULL;
|
|
+ * then create and process as usual.
|
|
+ * But, don't forget to clear to NULL at successful return for avoiding
|
|
+ * the unexpected cleanup!
|
|
+ */
|
|
+DEFINE_FREE(snd_card_free, struct snd_card *, if (_T) snd_card_free(_T))
|
|
+
|
|
#define snd_card_set_dev(card, devptr) ((card)->dev = (devptr))
|
|
|
|
/* device.c */
|
|
diff --git a/sound/core/seq/seq_compat.c b/sound/core/seq/seq_compat.c
|
|
--- a/sound/core/seq/seq_compat.c
|
|
+++ b/sound/core/seq/seq_compat.c
|
|
@@ -44,7 +44,9 @@ static int snd_seq_call_port_info_ioctl(struct snd_seq_client *client, unsigned
|
|
return -EFAULT;
|
|
data->kernel = NULL;
|
|
|
|
- err = snd_seq_kernel_client_ctl(client->number, cmd, data);
|
|
+ scoped_guard(mutex, &client->ioctl_mutex) {
|
|
+ err = snd_seq_kernel_client_ctl(client->number, cmd, data);
|
|
+ }
|
|
if (err < 0)
|
|
return err;
|
|
|
|
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
|
|
--- a/sound/hda/codecs/realtek/alc269.c
|
|
+++ b/sound/hda/codecs/realtek/alc269.c
|
|
@@ -4025,6 +4025,7 @@ enum {
|
|
ALC269_FIXUP_SONY_VAIO,
|
|
ALC275_FIXUP_SONY_VAIO_GPIO2,
|
|
ALC269_FIXUP_DELL_M101Z,
|
|
+ ALC256_FIXUP_ASUS_PM3406CHA,
|
|
ALC269_FIXUP_SKU_IGNORE,
|
|
ALC269_FIXUP_ASUS_G73JW,
|
|
ALC269_FIXUP_ASUS_N7601ZM_PINS,
|
|
@@ -4124,6 +4125,7 @@ enum {
|
|
ALC285_FIXUP_HP_SPECTRE_X360_EB1,
|
|
ALC285_FIXUP_HP_SPECTRE_X360_DF1,
|
|
ALC285_FIXUP_HP_ENVY_X360,
|
|
+ ALC285_FIXUP_HP_ENVY_13AQ,
|
|
ALC288_FIXUP_DELL_HEADSET_MODE,
|
|
ALC288_FIXUP_DELL1_MIC_NO_PRESENCE,
|
|
ALC288_FIXUP_DELL_XPS_13,
|
|
@@ -4199,6 +4201,7 @@ enum {
|
|
ALC225_FIXUP_DELL_WYSE_AIO_MIC_NO_PRESENCE,
|
|
ALC225_FIXUP_WYSE_AUTO_MUTE,
|
|
ALC225_FIXUP_WYSE_DISABLE_MIC_VREF,
|
|
+ ALC225_FIXUP_HP_AIO_SPK,
|
|
ALC286_FIXUP_ACER_AIO_HEADSET_MIC,
|
|
ALC256_FIXUP_ASUS_HEADSET_MIC,
|
|
ALC256_FIXUP_ASUS_MIC_NO_PRESENCE,
|
|
@@ -4385,6 +4388,7 @@ enum {
|
|
ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN_HEADSET,
|
|
ALC285_LENOVO_DAC_RENAME,
|
|
ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1,
|
|
+ ALC256_FIXUP_IPASON_SMARTBOOK_S1,
|
|
};
|
|
|
|
/* A special fixup for Lenovo C940 and Yoga Duet 7;
|
|
@@ -4482,6 +4486,14 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
{}
|
|
}
|
|
},
|
|
+ [ALC256_FIXUP_ASUS_PM3406CHA] = {
|
|
+ .type = HDA_FIXUP_VERBS,
|
|
+ .v.verbs = (const struct hda_verb[]) {
|
|
+ { 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
|
|
+ { 0x20, AC_VERB_SET_PROC_COEF, 0x7f20 },
|
|
+ {}
|
|
+ }
|
|
+ },
|
|
[ALC269_FIXUP_SKU_IGNORE] = {
|
|
.type = HDA_FIXUP_FUNC,
|
|
.v.func = alc_fixup_sku_ignore,
|
|
@@ -5720,6 +5732,14 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
.chained = true,
|
|
.chain_id = ALC269_FIXUP_HEADSET_MODE_NO_HP_MIC
|
|
},
|
|
+ [ALC225_FIXUP_HP_AIO_SPK] = {
|
|
+ .type = HDA_FIXUP_VERBS,
|
|
+ .v.verbs = (const struct hda_verb[]) {
|
|
+ { 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
|
|
+ { 0x20, AC_VERB_SET_PROC_COEF, 0x0220 },
|
|
+ { }
|
|
+ },
|
|
+ },
|
|
[ALC286_FIXUP_ACER_AIO_HEADSET_MIC] = {
|
|
.type = HDA_FIXUP_VERBS,
|
|
.v.verbs = (const struct hda_verb[]) {
|
|
@@ -6401,6 +6421,15 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
.chained = true,
|
|
.chain_id = ALC285_FIXUP_HP_GPIO_AMP_INIT,
|
|
},
|
|
+ [ALC285_FIXUP_HP_ENVY_13AQ] = {
|
|
+ .type = HDA_FIXUP_PINS,
|
|
+ .v.pins = (const struct hda_pintbl[]) {
|
|
+ { 0x14, 0x90170150 }, /* front speakers */
|
|
+ { }
|
|
+ },
|
|
+ .chained = true,
|
|
+ .chain_id = ALC285_FIXUP_HP_GPIO_AMP_INIT,
|
|
+ },
|
|
[ALC287_FIXUP_IDEAPAD_BASS_SPK_AMP] = {
|
|
.type = HDA_FIXUP_FUNC,
|
|
.v.func = alc285_fixup_ideapad_s740_coef,
|
|
@@ -7088,6 +7117,8 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
[ALC236_FIXUP_DELL_HP_POP_NOISE] = {
|
|
.type = HDA_FIXUP_FUNC,
|
|
.v.func = alc285_fixup_invalidate_dacs,
|
|
+ .chained = true,
|
|
+ .chain_id = ALC255_FIXUP_DELL1_MIC_NO_PRESENCE
|
|
},
|
|
[ALC274_FIXUP_HP_89E9_GPIO] = {
|
|
.type = HDA_FIXUP_FUNC,
|
|
@@ -7150,6 +7181,13 @@ static const struct hda_fixup alc269_fixups[] = {
|
|
{ }
|
|
}
|
|
},
|
|
+ [ALC256_FIXUP_IPASON_SMARTBOOK_S1] = {
|
|
+ .type = HDA_FIXUP_PINS,
|
|
+ .v.pins = (const struct hda_pintbl[]) {
|
|
+ { 0x1b, 0x90170110 }, /* the real internal speaker */
|
|
+ { }
|
|
+ },
|
|
+ },
|
|
};
|
|
|
|
static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
@@ -7197,6 +7235,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x1025, 0x142b, "Acer Swift SF314-42", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
|
SND_PCI_QUIRK(0x1025, 0x1430, "Acer TravelMate B311R-31", ALC256_FIXUP_ACER_MIC_NO_PRESENCE),
|
|
SND_PCI_QUIRK(0x1025, 0x1466, "Acer Aspire A515-56", ALC255_FIXUP_ACER_HEADPHONE_AND_MIC),
|
|
+ SND_PCI_QUIRK(0x1025, 0x151e, "Acer Nitro AN515-45", ALC2XX_FIXUP_HEADSET_MIC),
|
|
SND_PCI_QUIRK(0x1025, 0x1534, "Acer Predator PH315-54", ALC255_FIXUP_ACER_MIC_NO_PRESENCE),
|
|
SND_PCI_QUIRK(0x1025, 0x1539, "Acer Nitro 5 AN515-57", ALC2XX_FIXUP_HEADSET_MIC),
|
|
SND_PCI_QUIRK(0x1025, 0x159c, "Acer Nitro 5 AN515-58", ALC287_FIXUP_ACER_MICMUTE_LED),
|
|
@@ -7210,8 +7249,10 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x1025, 0x1679, "Acer Nitro 16 AN16-41", ALC2XX_FIXUP_HEADSET_MIC),
|
|
SND_PCI_QUIRK(0x1025, 0x169a, "Acer Swift SFG16", ALC256_FIXUP_ACER_SFG16_MICMUTE_LED),
|
|
SND_PCI_QUIRK(0x1025, 0x171e, "Acer Nitro ANV15-51", ALC245_FIXUP_ACER_MICMUTE_LED),
|
|
+ SND_PCI_QUIRK(0x1025, 0x172c, "Acer Nitro ANV16-41", ALC2XX_FIXUP_HEADSET_MIC),
|
|
SND_PCI_QUIRK(0x1025, 0x1731, "Acer Predator PHN16-72", ALC2XX_FIXUP_HEADSET_MIC),
|
|
SND_PCI_QUIRK(0x1025, 0x173a, "Acer Swift SFG14-73", ALC245_FIXUP_ACER_MICMUTE_LED),
|
|
+ SND_PCI_QUIRK(0x1025, 0x173b, "Acer Swift SFG16-72", ALC245_FIXUP_ACER_MICMUTE_LED),
|
|
SND_PCI_QUIRK(0x1025, 0x1758, "Acer Nitro ANV15-41", ALC245_FIXUP_ACER_MICMUTE_LED),
|
|
SND_PCI_QUIRK(0x1025, 0x1826, "Acer Helios ZPC", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x1025, 0x182c, "Acer Helios ZPD", ALC287_FIXUP_PREDATOR_SPK_CS35L41_I2C_2),
|
|
@@ -7317,6 +7358,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE),
|
|
SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2),
|
|
SND_PCI_QUIRK(0x103c, 0x18e6, "HP", ALC269_FIXUP_HP_GPIO_LED),
|
|
+ SND_PCI_QUIRK(0x103c, 0x2164, "HP Pavilion 15 Notebook PC", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x218b, "HP", ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x21f9, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
|
SND_PCI_QUIRK(0x103c, 0x2210, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC1),
|
|
@@ -7399,9 +7441,11 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x854a, "HP EliteBook 830 G6", ALC285_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x854d, "HP EliteBook 840 G6", ALC285_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x856a, "HP Pavilion 15-cs1xxx", ALC295_FIXUP_HP_PAVILION_MUTE_LED_1B),
|
|
+ HDA_CODEC_QUIRK(0x103c, 0x85ba, "HP Pavilion AiO 24", ALC225_FIXUP_HP_AIO_SPK),
|
|
SND_PCI_QUIRK(0x103c, 0x85c6, "HP Pavilion x360 Convertible 14-dy1xxx", ALC295_FIXUP_HP_MUTE_LED_COEFBIT11),
|
|
SND_PCI_QUIRK(0x103c, 0x85de, "HP Envy x360 13-ar0xxx", ALC285_FIXUP_HP_ENVY_X360),
|
|
SND_PCI_QUIRK(0x103c, 0x85f0, "HP Laptop 15-dw0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
|
+ SND_PCI_QUIRK(0x103c, 0x85f1, "HP Laptop 15-dw1xxx", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
|
|
SND_PCI_QUIRK(0x103c, 0x85f3, "HP 250 G8 Notebook PC", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
|
SND_PCI_QUIRK(0x103c, 0x8603, "HP Omen 17-cb0xxx", ALC285_FIXUP_HP_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x860c, "HP ZBook 17 G6", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
|
@@ -7409,6 +7453,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x861f, "HP Elite Dragonfly G1", ALC285_FIXUP_HP_GPIO_AMP_INIT),
|
|
SND_PCI_QUIRK(0x103c, 0x864f, "HP Laptop 15-dy0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
|
SND_PCI_QUIRK(0x103c, 0x869d, "HP", ALC236_FIXUP_HP_MUTE_LED),
|
|
+ SND_PCI_QUIRK(0x103c, 0x86ad, "HP ENVY 13-aq1xxx", ALC285_FIXUP_HP_ENVY_13AQ),
|
|
SND_PCI_QUIRK(0x103c, 0x86c1, "HP Laptop 15-da3001TU", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
|
SND_PCI_QUIRK(0x103c, 0x86c7, "HP Envy AiO 32", ALC274_FIXUP_HP_ENVY_GPIO),
|
|
SND_PCI_QUIRK(0x103c, 0x86c8, "HP Laptop 14s-dr1xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
|
@@ -7437,6 +7482,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x8786, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x8787, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x8788, "HP OMEN 15", ALC285_FIXUP_HP_MUTE_LED),
|
|
+ SND_PCI_QUIRK(0x103c, 0x87b2, "HP Pavilion Gaming Laptop 15-ec1xxx", ALC285_FIXUP_HP_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x87b7, "HP Laptop 14-fq0xxx", ALC236_FIXUP_HP_MUTE_LED_COEFBIT2),
|
|
SND_PCI_QUIRK(0x103c, 0x87c8, "HP", ALC287_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x87cb, "HP Pavilion 15-eg0xxx", ALC287_FIXUP_HP_GPIO_LED),
|
|
@@ -7497,6 +7543,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x8975, "HP EliteBook x360 840 Aero G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x897d, "HP mt440 Mobile Thin Client U74", ALC236_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x8981, "HP Elite Dragonfly G3", ALC245_FIXUP_CS35L41_SPI_4),
|
|
+ SND_PCI_QUIRK(0x103c, 0x8987, "HP Pavilion 14-dv1001TU", ALC287_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x898a, "HP Pavilion 15-eg100", ALC287_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x898e, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x898f, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2),
|
|
@@ -7534,7 +7581,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x8a2d, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x8a2e, "HP Envy 16", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x8a30, "HP Envy 17", ALC287_FIXUP_CS35L41_I2C_2),
|
|
- SND_PCI_QUIRK(0x103c, 0x8a31, "HP Envy 15", ALC287_FIXUP_CS35L41_I2C_2),
|
|
+ SND_PCI_QUIRK(0x103c, 0x8a31, "HP ENVY x360 2-in-1 Laptop 15-ey0xxx", ALC287_FIXUP_CS35L41_I2C_2_HP_MUTE_LEDS),
|
|
SND_PCI_QUIRK(0x103c, 0x8a34, "HP Pavilion x360 2-in-1 Laptop 14-ek0xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8a36, "HP Pavilion Plus 14-eh0xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8a3d, "HP Victus 15-fb0xxx (MB 8A3D)", ALC245_FIXUP_HP_MUTE_LED_V2_COEFBIT),
|
|
@@ -7595,6 +7642,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x8bb4, "HP Slim OMEN", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x8bb6, "HP Laptop 15-fd0039nt", ALC236_FIXUP_HP_15_FD0XXX),
|
|
SND_PCI_QUIRK(0x103c, 0x8bbe, "HP Victus 16-r0xxx (MB 8BBE)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
+ SND_PCI_QUIRK(0x103c, 0x8bc7, "HP Pavilion 15-eh3174nw", ALC287_FIXUP_HP_GPIO_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x8bc8, "HP Victus 15-fa1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8bcd, "HP Omen 16-xd0xxx", ALC245_FIXUP_HP_MUTE_LED_V1_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8bd4, "HP Victus 16-s0xxx (MB 8BD4)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
@@ -7617,6 +7665,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x8c17, "HP Spectre x360 2-in-1 Laptop 16-aa0xxx", ALC245_FIXUP_HP_SPECTRE_X360_16_AA0XXX),
|
|
SND_PCI_QUIRK(0x103c, 0x8c21, "HP Pavilion Plus Laptop 14-ey0XXX", ALC245_FIXUP_HP_X360_MUTE_LEDS),
|
|
SND_PCI_QUIRK(0x103c, 0x8c2d, "HP Victus 15-fa1xxx (MB 8C2D)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
+ SND_PCI_QUIRK(0x103c, 0x8c2f, "HP Victus 15-fb2xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8c30, "HP Victus 15-fb1xxx", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8c3f, "HP Victus 15-fa1xxx (MB 8C3F)", ALC245_FIXUP_HP_MUTE_LED_COEFBIT),
|
|
SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED),
|
|
@@ -7726,6 +7775,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x103c, 0x8e37, "HP 16 Piston OmniBook X", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x8e3a, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x8e3b, "HP Agusta", ALC287_FIXUP_CS35L41_I2C_2),
|
|
+ SND_PCI_QUIRK(0x103c, 0x8e43, "HP Laptop 15-fd2xxx", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO),
|
|
SND_PCI_QUIRK(0x103c, 0x8e60, "HP OmniBook 7 Laptop 16-bh0xxx", ALC245_FIXUP_CS35L41_I2C_2_MUTE_LED),
|
|
SND_PCI_QUIRK(0x103c, 0x8e61, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x103c, 0x8e62, "HP Trekker ", ALC287_FIXUP_CS35L41_I2C_2),
|
|
@@ -7829,6 +7879,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x1043, 0x1652, "ASUS ROG Zephyrus Do 15 SE", ALC289_FIXUP_ASUS_ZEPHYRUS_DUAL_SPK),
|
|
SND_PCI_QUIRK(0x1043, 0x1662, "ASUS GV301QH", ALC294_FIXUP_ASUS_DUAL_SPK),
|
|
SND_PCI_QUIRK(0x1043, 0x1663, "ASUS GU603ZI/ZJ/ZQ/ZU/ZV", ALC285_FIXUP_ASUS_HEADSET_MIC),
|
|
+ SND_PCI_QUIRK(0x1043, 0x1664, "ASUS ExpertBook PM3406CHA", ALC256_FIXUP_ASUS_PM3406CHA),
|
|
SND_PCI_QUIRK(0x1043, 0x1683, "ASUS UM3402YAR", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x1043, 0x16a3, "ASUS UX3402VA", ALC245_FIXUP_CS35L41_SPI_2),
|
|
SND_PCI_QUIRK(0x1043, 0x16b2, "ASUS GU603", ALC289_FIXUP_ASUS_GA401),
|
|
@@ -7931,7 +7982,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x1043, 0x3ef0, "ASUS Strix G635LR_LW_LX", ALC287_FIXUP_TXNW2781_I2C),
|
|
SND_PCI_QUIRK(0x1043, 0x3f00, "ASUS Strix G815LH_LM_LP", ALC287_FIXUP_TXNW2781_I2C),
|
|
SND_PCI_QUIRK(0x1043, 0x3f10, "ASUS Strix G835LR_LW_LX", ALC287_FIXUP_TXNW2781_I2C),
|
|
- SND_PCI_QUIRK(0x1043, 0x3f20, "ASUS Strix G615LR_LW", ALC287_FIXUP_TXNW2781_I2C),
|
|
+ SND_PCI_QUIRK(0x1043, 0x3f20, "ASUS Strix G615LR_LW", ALC287_FIXUP_TXNW2781_I2C_ASUS),
|
|
SND_PCI_QUIRK(0x1043, 0x3f30, "ASUS Strix G815LR_LW", ALC287_FIXUP_TXNW2781_I2C),
|
|
SND_PCI_QUIRK(0x1043, 0x3fd0, "ASUS B3605CVA", ALC245_FIXUP_CS35L41_SPI_2),
|
|
SND_PCI_QUIRK(0x1043, 0x3ff0, "ASUS B5405CVA", ALC245_FIXUP_CS35L41_SPI_2),
|
|
@@ -7954,6 +8005,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x10cf, 0x1757, "Lifebook E752", ALC269_FIXUP_LIFEBOOK_HP_PIN),
|
|
SND_PCI_QUIRK(0x10cf, 0x1845, "Lifebook U904", ALC269_FIXUP_LIFEBOOK_EXTMIC),
|
|
SND_PCI_QUIRK(0x10ec, 0x10f2, "Intel Reference board", ALC700_FIXUP_INTEL_REFERENCE),
|
|
+ SND_PCI_QUIRK(0x10ec, 0x111e, "Higole F9B", ALC290_FIXUP_MONO_SPEAKERS),
|
|
SND_PCI_QUIRK(0x10ec, 0x118c, "Medion EE4254 MD62100", ALC256_FIXUP_MEDION_HEADSET_NO_PRESENCE),
|
|
SND_PCI_QUIRK(0x10ec, 0x119e, "Positivo SU C1400", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
|
|
SND_PCI_QUIRK(0x10ec, 0x11bc, "VAIO VJFE-IL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
@@ -8179,7 +8231,6 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x17aa, 0x3834, "Lenovo IdeaPad Slim 9i 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
|
|
SND_PCI_QUIRK(0x17aa, 0x383d, "Legion Y9000X 2019", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
|
|
SND_PCI_QUIRK(0x17aa, 0x3843, "Lenovo Yoga 9i / Yoga Book 9i", ALC287_FIXUP_LENOVO_YOGA_BOOK_9I),
|
|
- SND_PCI_QUIRK(0x17aa, 0x3846, "Lenovo Yoga Pro 9 16IAH10", ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1),
|
|
/* Yoga Pro 7 14IMH9 shares PCI SSID 17aa:3847 with Legion 7 16ACHG6;
|
|
* use codec SSID to distinguish them
|
|
*/
|
|
@@ -8204,6 +8255,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
HDA_CODEC_QUIRK(0x17aa, 0x38a8, "Legion Pro 7 16ARX8H", ALC287_FIXUP_TAS2781_I2C), /* this must match before PCI SSID 17aa:386f below */
|
|
SND_PCI_QUIRK(0x17aa, 0x386f, "Legion Pro 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x17aa, 0x3870, "Lenovo Yoga 7 14ARB7", ALC287_FIXUP_YOGA7_14ARB7_I2C),
|
|
+ SND_PCI_QUIRK(0x17aa, 0x3871, "Lenovo ThinkBook 16p Gen 3 ARH", ALC287_FIXUP_YOGA7_14ARB7_I2C),
|
|
SND_PCI_QUIRK(0x17aa, 0x3874, "Legion 7i 16IAX7", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x17aa, 0x3877, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
|
|
SND_PCI_QUIRK(0x17aa, 0x3878, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
|
|
@@ -8254,6 +8306,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x17aa, 0x38d5, "Yoga S990-16 Pro IMH YC Quad", ALC287_FIXUP_TAS2781_I2C),
|
|
SND_PCI_QUIRK(0x17aa, 0x38d6, "Yoga S990-16 Pro IMH VECO Quad", ALC287_FIXUP_TAS2781_I2C),
|
|
SND_PCI_QUIRK(0x17aa, 0x38d7, "Lenovo Yoga 9 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
|
|
+ SND_PCI_QUIRK(0x17aa, 0x38dc, "Lenovo ThinkBook G8", ALC285_FIXUP_SPEAKER2_TO_DAC1),
|
|
SND_PCI_QUIRK(0x17aa, 0x38df, "Yoga Y990 Intel YC Dual", ALC287_FIXUP_TAS2781_I2C),
|
|
SND_PCI_QUIRK(0x17aa, 0x38e0, "Yoga Y990 Intel VECO Dual", ALC287_FIXUP_TAS2781_I2C),
|
|
SND_PCI_QUIRK(0x17aa, 0x38f8, "Yoga Book 9i", ALC287_FIXUP_TAS2781_I2C),
|
|
@@ -8273,7 +8326,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x17aa, 0x3912, "Lenovo Xiaoxin 14 GT", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
|
|
SND_PCI_QUIRK(0x17aa, 0x3913, "Lenovo 145", ALC236_FIXUP_LENOVO_INV_DMIC),
|
|
SND_PCI_QUIRK(0x17aa, 0x391f, "Yoga S990-16 pro Quad YC Quad", ALC287_FIXUP_TXNW2781_I2C),
|
|
- SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_TXNW2781_I2C),
|
|
+ SND_PCI_QUIRK(0x17aa, 0x3920, "Yoga S990-16 pro Quad VECO Quad", ALC287_FIXUP_YOGA9_SPEAKER2_TO_DAC1),
|
|
SND_PCI_QUIRK(0x17aa, 0x3929, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
|
SND_PCI_QUIRK(0x17aa, 0x392b, "Thinkbook 13x Gen 5", ALC287_FIXUP_MG_RTKC_CSAMP_CS35L41_I2C_THINKPAD),
|
|
HDA_CODEC_QUIRK(0x17aa, 0x3936, "Legion R9000P ADR10H", ALC287_FIXUP_LENOVO_LEGION_AW88399),
|
|
@@ -8369,6 +8422,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
|
|
SND_PCI_QUIRK(0x2014, 0x800a, "Positivo ARN50", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
SND_PCI_QUIRK(0x2039, 0x0001, "Inspur S14-G1", ALC295_FIXUP_CHROME_BOOK),
|
|
SND_PCI_QUIRK(0x2145, 0x0001, "Star Labs StarFighter", ALC233_FIXUP_STARLABS_STARFIGHTER),
|
|
+ SND_PCI_QUIRK(0x2782, 0x0206, "IPASON SmartBook S1", ALC256_FIXUP_IPASON_SMARTBOOK_S1),
|
|
SND_PCI_QUIRK(0x2782, 0x0214, "VAIO VJFE-CL", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
|
|
SND_PCI_QUIRK(0x2782, 0x0228, "Infinix ZERO BOOK 13", ALC269VB_FIXUP_INFINIX_ZERO_BOOK_13),
|
|
SND_PCI_QUIRK(0x2782, 0x0232, "CHUWI CoreBook XPro", ALC269VB_FIXUP_CHUWI_COREBOOK_XPRO),
|
|
diff --git a/sound/hda/codecs/realtek/realtek.c b/sound/hda/codecs/realtek/realtek.c
|
|
--- a/sound/hda/codecs/realtek/realtek.c
|
|
+++ b/sound/hda/codecs/realtek/realtek.c
|
|
@@ -1292,6 +1292,7 @@ static void alc_headset_mode_unplugged(struct hda_codec *codec)
|
|
}
|
|
|
|
switch (codec->core.vendor_id) {
|
|
+ case 0x10ec0235:
|
|
case 0x10ec0255:
|
|
alc_process_coef_fw(codec, coef0255);
|
|
break;
|
|
@@ -1407,6 +1408,7 @@ static void alc_headset_mode_mic_in(struct hda_codec *codec, hda_nid_t hp_pin,
|
|
};
|
|
|
|
switch (codec->core.vendor_id) {
|
|
+ case 0x10ec0235:
|
|
case 0x10ec0255:
|
|
alc_write_coef_idx(codec, 0x45, 0xc489);
|
|
snd_hda_set_pin_ctl_cache(codec, hp_pin, 0);
|
|
@@ -1562,6 +1564,7 @@ static void alc_headset_mode_default(struct hda_codec *codec)
|
|
alc_process_coef_fw(codec, coef0225);
|
|
alc_hp_enable_unmute(codec, 75);
|
|
break;
|
|
+ case 0x10ec0235:
|
|
case 0x10ec0255:
|
|
alc_process_coef_fw(codec, coef0255);
|
|
break;
|
|
@@ -1663,6 +1666,7 @@ static void alc_headset_mode_ctia(struct hda_codec *codec)
|
|
};
|
|
|
|
switch (codec->core.vendor_id) {
|
|
+ case 0x10ec0235:
|
|
case 0x10ec0255:
|
|
alc_process_coef_fw(codec, coef0255);
|
|
break;
|
|
@@ -1780,6 +1784,7 @@ static void alc_headset_mode_omtp(struct hda_codec *codec)
|
|
};
|
|
|
|
switch (codec->core.vendor_id) {
|
|
+ case 0x10ec0235:
|
|
case 0x10ec0255:
|
|
alc_process_coef_fw(codec, coef0255);
|
|
break;
|
|
@@ -1881,6 +1886,7 @@ static void alc_determine_headset_type(struct hda_codec *codec)
|
|
}
|
|
|
|
switch (codec->core.vendor_id) {
|
|
+ case 0x10ec0235:
|
|
case 0x10ec0255:
|
|
alc_process_coef_fw(codec, coef0255);
|
|
msleep(300);
|
|
diff --git a/sound/hda/controllers/tegra.c b/sound/hda/controllers/tegra.c
|
|
--- a/sound/hda/controllers/tegra.c
|
|
+++ b/sound/hda/controllers/tegra.c
|
|
@@ -374,7 +374,8 @@ static int hda_tegra_first_init(struct azx *chip, struct platform_device *pdev)
|
|
* in powers of 2, next available ratio is 16 which can be
|
|
* used as a limiting factor here.
|
|
*/
|
|
- if (of_device_is_compatible(np, "nvidia,tegra30-hda"))
|
|
+ if (of_device_is_compatible(np, "nvidia,tegra30-hda") ||
|
|
+ of_device_is_compatible(np, "nvidia,tegra194-hda"))
|
|
chip->bus.core.sdo_limit = 16;
|
|
|
|
/* codec detection */
|
|
diff --git a/sound/pci/ctxfi/cthw20k2.c b/sound/pci/ctxfi/cthw20k2.c
|
|
--- a/sound/pci/ctxfi/cthw20k2.c
|
|
+++ b/sound/pci/ctxfi/cthw20k2.c
|
|
@@ -1895,6 +1895,7 @@ static int hw_adc_init(struct hw *hw, const struct adc_conf *info)
|
|
|
|
if (hw->model == CTSB1270) {
|
|
/* Set up the PCM4220 ADC on Titanium HD */
|
|
+ data = hw_read_20kx(hw, GPIO_DATA);
|
|
data &= ~0x0C;
|
|
if (1 == info->msr)
|
|
data |= 0x00; /* Single Speed Mode 32-50kHz */
|
|
@@ -1903,6 +1904,7 @@ static int hw_adc_init(struct hw *hw, const struct adc_conf *info)
|
|
else
|
|
data |= 0x04; /* Quad Speed Mode 108kHz-216kHz */
|
|
hw_write_20kx(hw, GPIO_DATA, data);
|
|
+ usleep_range(10000, 11000);
|
|
}
|
|
|
|
hw_adc_start(hw);
|
|
diff --git a/sound/pci/ice1712/ice1712.c b/sound/pci/ice1712/ice1712.c
|
|
--- a/sound/pci/ice1712/ice1712.c
|
|
+++ b/sound/pci/ice1712/ice1712.c
|
|
@@ -2523,7 +2523,7 @@ static int snd_ice1712_probe(struct pci_dev *pci,
|
|
const struct pci_device_id *pci_id)
|
|
{
|
|
static int dev;
|
|
- struct snd_card *card __free(snd_card_unref) = NULL;
|
|
+ struct snd_card *card __free(snd_card_free) = NULL;
|
|
struct snd_ice1712 *ice;
|
|
int pcm_dev = 0, err;
|
|
const struct snd_ice1712_card_info * const *tbl, *c;
|
|
diff --git a/sound/usb/caiaq/device.c b/sound/usb/caiaq/device.c
|
|
--- a/sound/usb/caiaq/device.c
|
|
+++ b/sound/usb/caiaq/device.c
|
|
@@ -562,6 +562,9 @@ static int snd_probe(struct usb_interface *intf,
|
|
ret = init_card(caiaqdev(card));
|
|
if (ret < 0) {
|
|
dev_err(&usb_dev->dev, "unable to init card! (ret=%d)\n", ret);
|
|
+#ifdef CONFIG_SND_USB_CAIAQ_INPUT
|
|
+ snd_usb_caiaq_input_disconnect(caiaqdev(card));
|
|
+#endif
|
|
snd_card_free(card);
|
|
return ret;
|
|
}
|
|
diff --git a/sound/usb/line6/playback.c b/sound/usb/line6/playback.c
|
|
--- a/sound/usb/line6/playback.c
|
|
+++ b/sound/usb/line6/playback.c
|
|
@@ -182,6 +182,13 @@ static int submit_audio_out_urb(struct snd_line6_pcm *line6pcm)
|
|
|
|
fsize *= bytes_per_frame;
|
|
|
|
+ if (fsize > line6pcm->max_packet_size_out) {
|
|
+ dev_err(line6pcm->line6->ifcdev,
|
|
+ "playback packet too large: %d > %d\n",
|
|
+ fsize, line6pcm->max_packet_size_out);
|
|
+ return -EMSGSIZE;
|
|
+ }
|
|
+
|
|
fout->offset = urb_size;
|
|
fout->length = fsize;
|
|
urb_size += fsize;
|
|
diff --git a/sound/usb/misc/ua101.c b/sound/usb/misc/ua101.c
|
|
--- a/sound/usb/misc/ua101.c
|
|
+++ b/sound/usb/misc/ua101.c
|
|
@@ -1007,6 +1007,15 @@ static int detect_usb_format(struct ua101 *ua)
|
|
}
|
|
ua->playback.usb_pipe = usb_sndisocpipe(ua->dev, usb_endpoint_num(epd));
|
|
ua->playback.max_packet_bytes = usb_endpoint_maxp(epd);
|
|
+
|
|
+ if (ua->capture.max_packet_bytes / ua->capture.frame_bytes *
|
|
+ ua->playback.frame_bytes > ua->playback.max_packet_bytes) {
|
|
+ dev_err(&ua->dev->dev,
|
|
+ "playback packet size %u too small for %u capture frames\n",
|
|
+ ua->playback.max_packet_bytes,
|
|
+ ua->capture.max_packet_bytes / ua->capture.frame_bytes);
|
|
+ return -ENXIO;
|
|
+ }
|
|
return 0;
|
|
}
|
|
|
|
diff --git a/sound/usb/mixer_maps.c b/sound/usb/mixer_maps.c
|
|
--- a/sound/usb/mixer_maps.c
|
|
+++ b/sound/usb/mixer_maps.c
|
|
@@ -749,6 +749,10 @@ static const struct usbmix_ctl_map usbmix_ctl_maps[] = {
|
|
.id = USB_ID(0x0db0, 0xa073),
|
|
.map = msi_mpg_x570s_carbon_max_wifi_alc4080_map,
|
|
},
|
|
+ { /* MSI MAG B850M MORTAR WIFI */
|
|
+ .id = USB_ID(0x0db0, 0xcc78),
|
|
+ .map = msi_mpg_x570s_carbon_max_wifi_alc4080_map,
|
|
+ },
|
|
{ /* MSI TRX40 */
|
|
.id = USB_ID(0x0db0, 0x543d),
|
|
.map = trx40_mobo_map,
|
|
diff --git a/sound/usb/quirks.c b/sound/usb/quirks.c
|
|
--- a/sound/usb/quirks.c
|
|
+++ b/sound/usb/quirks.c
|
|
@@ -1702,10 +1702,12 @@ int snd_usb_apply_boot_quirk_once(struct usb_device *dev,
|
|
switch (id) {
|
|
case USB_ID(0x07fd, 0x0008): /* MOTU M Series, 1st hardware version */
|
|
return snd_usb_motu_m_series_boot_quirk(dev);
|
|
- case USB_ID(0x1397, 0x1234): /* Behringer CM1A */
|
|
- return snd_usb_cm1a_boot_quirk(dev);
|
|
}
|
|
|
|
+ /* Behringer devices may need explicit device descriptor read at boot */
|
|
+ if (USB_ID_VENDOR(id) == 0x1397)
|
|
+ return snd_usb_cm1a_boot_quirk(dev);
|
|
+
|
|
return 0;
|
|
}
|
|
|
|
@@ -2366,6 +2368,10 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|
QUIRK_FLAG_CTL_MSG_DELAY_1M),
|
|
DEVICE_FLG(0x0a73, 0x003a, /* Mackie DLZ Creator XS */
|
|
QUIRK_FLAG_ALWAYS_SET_RATE),
|
|
+ DEVICE_FLG(0x0b05, 0x1826, /* ASUS SupremeFX Hi-Fi */
|
|
+ QUIRK_FLAG_DISABLE_AUTOSUSPEND),
|
|
+ DEVICE_FLG(0x0b05, 0x1827, /* ASUS SupremeFX Hi-Fi */
|
|
+ QUIRK_FLAG_DISABLE_AUTOSUSPEND),
|
|
DEVICE_FLG(0x0b05, 0x18a6, /* ASUSTek Computer, Inc. */
|
|
QUIRK_FLAG_MIXER_CAPTURE_MIN_MUTE),
|
|
DEVICE_FLG(0x0b0e, 0x0349, /* Jabra 550a */
|
|
@@ -2510,8 +2516,6 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|
QUIRK_FLAG_FORCE_IFACE_RESET | QUIRK_FLAG_IFACE_DELAY),
|
|
DEVICE_FLG(0x262a, 0x9302, /* ddHiFi TC44C */
|
|
QUIRK_FLAG_DSD_RAW),
|
|
- DEVICE_FLG(0x2708, 0x0002, /* Audient iD14 */
|
|
- QUIRK_FLAG_IGNORE_CTL_ERROR),
|
|
DEVICE_FLG(0x2772, 0x0502, /* Musical Fidelity M6s DAC */
|
|
0), /* for avoiding QUIRK_FLAG_DSD_RAW with vendor match */
|
|
DEVICE_FLG(0x2912, 0x30c8, /* Audioengine D1 */
|
|
@@ -2542,6 +2546,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|
QUIRK_FLAG_IGNORE_CTL_ERROR),
|
|
DEVICE_FLG(0x3255, 0x0000, /* Luxman D-10X */
|
|
QUIRK_FLAG_ITF_USB_DSD_DAC | QUIRK_FLAG_CTL_MSG_DELAY),
|
|
+ DEVICE_FLG(0x32bb, 0x0004, /* HiBy FC4 */
|
|
+ QUIRK_FLAG_DSD_RAW),
|
|
DEVICE_FLG(0x3302, 0x17c2, /* TTGK Technology USB-C Audio */
|
|
QUIRK_FLAG_FORCE_IFACE_RESET | QUIRK_FLAG_IFACE_DELAY),
|
|
DEVICE_FLG(0x339b, 0x3a07, /* Synaptics HONOR USB-C HEADSET */
|
|
@@ -2608,6 +2614,8 @@ static const struct usb_audio_quirk_flags_table quirk_flags_table[] = {
|
|
QUIRK_FLAG_DSD_RAW),
|
|
VENDOR_FLG(0x2622, /* IAG Limited devices */
|
|
QUIRK_FLAG_DSD_RAW),
|
|
+ VENDOR_FLG(0x2708, /* Audient devices */
|
|
+ QUIRK_FLAG_IGNORE_CTL_ERROR),
|
|
VENDOR_FLG(0x2772, /* Musical Fidelity devices */
|
|
QUIRK_FLAG_DSD_RAW),
|
|
VENDOR_FLG(0x278b, /* Rotel? */
|