Skip to content

Commit 042742a

Browse files
committed
Merge tag 'sound-6.10-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound
Pull sound fixes from Takashi Iwai: "Lots of small HD-audio quirks and fixes (mostly Realtek codec and Cirrus stuff). Also a small MIDI 2.0 fix and a fix for missing module description are included" * tag 'sound-6.10-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: ALSA: hda: cs35l56: Select SERIAL_MULTI_INSTANTIATE ALSA: hda/realtek: Add more codec ID to no shutup pins list sound/oss/dmasound: add missing MODULE_DESCRIPTION() macro ALSA: hda/realtek: Add quirk for Lenovo Yoga Pro 7 14ARP8 ALSA: hda/realtek: Enable headset mic on IdeaPad 330-17IKB 81DM ALSA: hda: tas2781: Component should be unbound before deconstruction ALSA: hda: cs35l41: Component should be unbound before deconstruction ALSA: hda: cs35l56: Component should be unbound before deconstruction ALSA/hda: intel-dsp-config: Document AVS as dsp_driver option ALSA: hda/realtek: Support Lenovo Thinkbook 13x Gen 4 ALSA: hda/realtek: Support Lenovo Thinkbook 16P Gen 5 ALSA: hda: cs35l41: Support Lenovo Thinkbook 13x Gen 4 ALSA: hda: cs35l41: Support Lenovo Thinkbook 16P Gen 5 ALSA: hda/realtek: Remove Framework Laptop 16 from quirks ALSA: hda/realtek: Limit mic boost on N14AP7 ALSA: hda/realtek: fix mute/micmute LEDs don't work for ProBook 445/465 G11. ALSA: seq: ump: Fix missing System Reset message handling ALSA: hda: cs35l41: Possible null pointer dereference in cs35l41_hda_unbind() ALSA: hda: cs35l56: Fix lifecycle of codec pointer
2 parents 3a7b383 + 9b1efff commit 042742a

File tree

9 files changed

+61
-11
lines changed

9 files changed

+61
-11
lines changed

sound/core/seq/seq_ump_convert.c

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1075,6 +1075,8 @@ static const struct seq_ev_to_ump seq_ev_ump_encoders[] = {
10751075
system_ev_to_ump_midi1, system_ev_to_ump_midi2 },
10761076
{ SNDRV_SEQ_EVENT_SENSING, UMP_SYSTEM_STATUS_ACTIVE_SENSING,
10771077
system_ev_to_ump_midi1, system_ev_to_ump_midi2 },
1078+
{ SNDRV_SEQ_EVENT_RESET, UMP_SYSTEM_STATUS_RESET,
1079+
system_ev_to_ump_midi1, system_ev_to_ump_midi2 },
10781080
};
10791081

10801082
static const struct seq_ev_to_ump *find_ump_encoder(int type)

sound/hda/intel-dsp-config.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
static int dsp_driver;
1919

2020
module_param(dsp_driver, int, 0444);
21-
MODULE_PARM_DESC(dsp_driver, "Force the DSP driver for Intel DSP (0=auto, 1=legacy, 2=SST, 3=SOF)");
21+
MODULE_PARM_DESC(dsp_driver, "Force the DSP driver for Intel DSP (0=auto, 1=legacy, 2=SST, 3=SOF, 4=AVS)");
2222

2323
#define FLAG_SST BIT(0)
2424
#define FLAG_SOF BIT(1)

sound/oss/dmasound/dmasound_core.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -204,6 +204,7 @@ module_param(numWriteBufs, int, 0);
204204
static unsigned int writeBufSize = DEFAULT_BUFF_SIZE ; /* in bytes */
205205
module_param(writeBufSize, int, 0);
206206

207+
MODULE_DESCRIPTION("Atari/Amiga/Q40 core DMA sound driver");
207208
MODULE_LICENSE("GPL");
208209

209210
static int sq_unit = -1;

sound/pci/hda/Kconfig

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,6 +162,7 @@ config SND_HDA_SCODEC_CS35L56_I2C
162162
depends on ACPI || COMPILE_TEST
163163
depends on SND_SOC
164164
select FW_CS_DSP
165+
select SERIAL_MULTI_INSTANTIATE
165166
select SND_HDA_GENERIC
166167
select SND_SOC_CS35L56_SHARED
167168
select SND_HDA_SCODEC_CS35L56
@@ -178,6 +179,7 @@ config SND_HDA_SCODEC_CS35L56_SPI
178179
depends on ACPI || COMPILE_TEST
179180
depends on SND_SOC
180181
select FW_CS_DSP
182+
select SERIAL_MULTI_INSTANTIATE
181183
select SND_HDA_GENERIC
182184
select SND_SOC_CS35L56_SHARED
183185
select SND_HDA_SCODEC_CS35L56

sound/pci/hda/cs35l41_hda.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1495,7 +1495,7 @@ static void cs35l41_hda_unbind(struct device *dev, struct device *master, void *
14951495
if (comps[cs35l41->index].dev == dev) {
14961496
memset(&comps[cs35l41->index], 0, sizeof(*comps));
14971497
sleep_flags = lock_system_sleep();
1498-
device_link_remove(&comps->codec->core.dev, cs35l41->dev);
1498+
device_link_remove(&cs35l41->codec->core.dev, cs35l41->dev);
14991499
unlock_system_sleep(sleep_flags);
15001500
}
15011501
}
@@ -2019,15 +2019,15 @@ void cs35l41_hda_remove(struct device *dev)
20192019
{
20202020
struct cs35l41_hda *cs35l41 = dev_get_drvdata(dev);
20212021

2022+
component_del(cs35l41->dev, &cs35l41_hda_comp_ops);
2023+
20222024
pm_runtime_get_sync(cs35l41->dev);
20232025
pm_runtime_dont_use_autosuspend(cs35l41->dev);
20242026
pm_runtime_disable(cs35l41->dev);
20252027

20262028
if (cs35l41->halo_initialized)
20272029
cs35l41_remove_dsp(cs35l41);
20282030

2029-
component_del(cs35l41->dev, &cs35l41_hda_comp_ops);
2030-
20312031
acpi_dev_put(cs35l41->dacpi);
20322032

20332033
pm_runtime_put_noidle(cs35l41->dev);

sound/pci/hda/cs35l41_hda_property.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,6 +128,10 @@ static const struct cs35l41_config cs35l41_config_table[] = {
128128
{ "17AA38B5", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
129129
{ "17AA38B6", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
130130
{ "17AA38B7", 2, EXTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, 0, 0 }, 0, 1, -1, 0, 0, 0 },
131+
{ "17AA38C7", 4, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, CS35L41_LEFT, CS35L41_RIGHT }, 0, 2, -1, 1000, 4500, 24 },
132+
{ "17AA38C8", 4, INTERNAL, { CS35L41_LEFT, CS35L41_RIGHT, CS35L41_LEFT, CS35L41_RIGHT }, 0, 2, -1, 1000, 4500, 24 },
133+
{ "17AA38F9", 2, EXTERNAL, { CS35L41_RIGHT, CS35L41_LEFT, 0, 0 }, 0, 2, -1, 0, 0, 0 },
134+
{ "17AA38FA", 2, EXTERNAL, { CS35L41_RIGHT, CS35L41_LEFT, 0, 0 }, 0, 2, -1, 0, 0, 0 },
131135
{}
132136
};
133137

@@ -529,6 +533,10 @@ static const struct cs35l41_prop_model cs35l41_prop_model_table[] = {
529533
{ "CSC3551", "17AA38B5", generic_dsd_config },
530534
{ "CSC3551", "17AA38B6", generic_dsd_config },
531535
{ "CSC3551", "17AA38B7", generic_dsd_config },
536+
{ "CSC3551", "17AA38C7", generic_dsd_config },
537+
{ "CSC3551", "17AA38C8", generic_dsd_config },
538+
{ "CSC3551", "17AA38F9", generic_dsd_config },
539+
{ "CSC3551", "17AA38FA", generic_dsd_config },
532540
{}
533541
};
534542

sound/pci/hda/cs35l56_hda.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,8 @@ static void cs35l56_hda_unbind(struct device *dev, struct device *master, void *
735735
if (comps[cs35l56->index].dev == dev)
736736
memset(&comps[cs35l56->index], 0, sizeof(*comps));
737737

738+
cs35l56->codec = NULL;
739+
738740
dev_dbg(cs35l56->base.dev, "Unbound\n");
739741
}
740742

@@ -840,6 +842,9 @@ static int cs35l56_hda_system_resume(struct device *dev)
840842

841843
cs35l56->suspended = false;
842844

845+
if (!cs35l56->codec)
846+
return 0;
847+
843848
ret = cs35l56_is_fw_reload_needed(&cs35l56->base);
844849
dev_dbg(cs35l56->base.dev, "fw_reload_needed: %d\n", ret);
845850
if (ret > 0) {
@@ -1072,12 +1077,12 @@ void cs35l56_hda_remove(struct device *dev)
10721077
{
10731078
struct cs35l56_hda *cs35l56 = dev_get_drvdata(dev);
10741079

1080+
component_del(cs35l56->base.dev, &cs35l56_hda_comp_ops);
1081+
10751082
pm_runtime_dont_use_autosuspend(cs35l56->base.dev);
10761083
pm_runtime_get_sync(cs35l56->base.dev);
10771084
pm_runtime_disable(cs35l56->base.dev);
10781085

1079-
component_del(cs35l56->base.dev, &cs35l56_hda_comp_ops);
1080-
10811086
cs_dsp_remove(&cs35l56->cs_dsp);
10821087

10831088
kfree(cs35l56->system_name);

sound/pci/hda/patch_realtek.c

Lines changed: 35 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -583,10 +583,14 @@ static void alc_shutup_pins(struct hda_codec *codec)
583583
switch (codec->core.vendor_id) {
584584
case 0x10ec0236:
585585
case 0x10ec0256:
586+
case 0x10ec0257:
586587
case 0x19e58326:
587588
case 0x10ec0283:
589+
case 0x10ec0285:
588590
case 0x10ec0286:
591+
case 0x10ec0287:
589592
case 0x10ec0288:
593+
case 0x10ec0295:
590594
case 0x10ec0298:
591595
alc_headset_mic_no_shutup(codec);
592596
break;
@@ -7520,6 +7524,7 @@ enum {
75207524
ALC285_FIXUP_ASUS_GU605_SPI_SPEAKER2_TO_DAC1,
75217525
ALC287_FIXUP_LENOVO_THKPAD_WH_ALC1318,
75227526
ALC256_FIXUP_CHROME_BOOK,
7527+
ALC287_FIXUP_LENOVO_14ARP8_LEGION_IAH7,
75237528
};
75247529

75257530
/* A special fixup for Lenovo C940 and Yoga Duet 7;
@@ -7559,6 +7564,21 @@ static void alc287_fixup_lenovo_14irp8_duetitl(struct hda_codec *codec,
75597564
__snd_hda_apply_fixup(codec, id, action, 0);
75607565
}
75617566

7567+
/* Similar to above the Lenovo Yoga Pro 7 14ARP8 PCI SSID matches the codec SSID of the
7568+
Legion Y9000X 2022 IAH7.*/
7569+
static void alc287_fixup_lenovo_14arp8_legion_iah7(struct hda_codec *codec,
7570+
const struct hda_fixup *fix,
7571+
int action)
7572+
{
7573+
int id;
7574+
7575+
if (codec->core.subsystem_id == 0x17aa386e)
7576+
id = ALC287_FIXUP_CS35L41_I2C_2; /* Legion Y9000X 2022 IAH7 */
7577+
else
7578+
id = ALC285_FIXUP_SPEAKER2_TO_DAC1; /* Yoga Pro 7 14ARP8 */
7579+
__snd_hda_apply_fixup(codec, id, action, 0);
7580+
}
7581+
75627582
/* Another hilarious PCI SSID conflict with Lenovo Legion Pro 7 16ARX8H (with
75637583
* TAS2781 codec) and Legion 7i 16IAX7 (with CS35L41 codec);
75647584
* we apply a corresponding fixup depending on the codec SSID instead
@@ -9658,6 +9678,10 @@ static const struct hda_fixup alc269_fixups[] = {
96589678
.chained = true,
96599679
.chain_id = ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK,
96609680
},
9681+
[ALC287_FIXUP_LENOVO_14ARP8_LEGION_IAH7] = {
9682+
.type = HDA_FIXUP_FUNC,
9683+
.v.func = alc287_fixup_lenovo_14arp8_legion_iah7,
9684+
},
96619685
[ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN] = {
96629686
.type = HDA_FIXUP_FUNC,
96639687
.v.func = alc287_fixup_yoga9_14iap7_bass_spk_pin,
@@ -10194,6 +10218,10 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1019410218
SND_PCI_QUIRK(0x103c, 0x8c70, "HP EliteBook 835 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
1019510219
SND_PCI_QUIRK(0x103c, 0x8c71, "HP EliteBook 845 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
1019610220
SND_PCI_QUIRK(0x103c, 0x8c72, "HP EliteBook 865 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED),
10221+
SND_PCI_QUIRK(0x103c, 0x8c7b, "HP ProBook 445 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
10222+
SND_PCI_QUIRK(0x103c, 0x8c7c, "HP ProBook 445 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
10223+
SND_PCI_QUIRK(0x103c, 0x8c7d, "HP ProBook 465 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
10224+
SND_PCI_QUIRK(0x103c, 0x8c7e, "HP ProBook 465 G11", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF),
1019710225
SND_PCI_QUIRK(0x103c, 0x8c89, "HP ProBook 460 G11", ALC236_FIXUP_HP_GPIO_LED),
1019810226
SND_PCI_QUIRK(0x103c, 0x8c8a, "HP EliteBook 630", ALC236_FIXUP_HP_GPIO_LED),
1019910227
SND_PCI_QUIRK(0x103c, 0x8c8c, "HP EliteBook 660", ALC236_FIXUP_HP_GPIO_LED),
@@ -10502,7 +10530,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1050210530
SND_PCI_QUIRK(0x17aa, 0x3813, "Legion 7i 15IMHG05", ALC287_FIXUP_LEGION_15IMHG05_SPEAKERS),
1050310531
SND_PCI_QUIRK(0x17aa, 0x3818, "Lenovo C940 / Yoga Duet 7", ALC298_FIXUP_LENOVO_C940_DUET7),
1050410532
SND_PCI_QUIRK(0x17aa, 0x3819, "Lenovo 13s Gen2 ITL", ALC287_FIXUP_13S_GEN2_SPEAKERS),
10505-
SND_PCI_QUIRK(0x17aa, 0x3820, "Yoga Duet 7 13ITL6", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
10533+
SND_PCI_QUIRK(0x17aa, 0x3820, "IdeaPad 330-17IKB 81DM", ALC269_FIXUP_ASPIRE_HEADSET_MIC),
1050610534
SND_PCI_QUIRK(0x17aa, 0x3824, "Legion Y9000X 2020", ALC285_FIXUP_LEGION_Y9000X_SPEAKERS),
1050710535
SND_PCI_QUIRK(0x17aa, 0x3827, "Ideapad S740", ALC285_FIXUP_IDEAPAD_S740_COEF),
1050810536
SND_PCI_QUIRK(0x17aa, 0x3834, "Lenovo IdeaPad Slim 9i 14ITL5", ALC287_FIXUP_YOGA7_14ITL_SPEAKERS),
@@ -10516,7 +10544,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1051610544
SND_PCI_QUIRK(0x17aa, 0x3865, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
1051710545
SND_PCI_QUIRK(0x17aa, 0x3866, "Lenovo 13X", ALC287_FIXUP_CS35L41_I2C_2),
1051810546
SND_PCI_QUIRK(0x17aa, 0x3869, "Lenovo Yoga7 14IAL7", ALC287_FIXUP_YOGA9_14IAP7_BASS_SPK_PIN),
10519-
SND_PCI_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7", ALC287_FIXUP_CS35L41_I2C_2),
10547+
SND_PCI_QUIRK(0x17aa, 0x386e, "Legion Y9000X 2022 IAH7 / Yoga Pro 7 14ARP8", ALC287_FIXUP_LENOVO_14ARP8_LEGION_IAH7),
1052010548
SND_PCI_QUIRK(0x17aa, 0x386f, "Legion Pro 7/7i", ALC287_FIXUP_LENOVO_LEGION_7),
1052110549
SND_PCI_QUIRK(0x17aa, 0x3870, "Lenovo Yoga 7 14ARB7", ALC287_FIXUP_YOGA7_14ARB7_I2C),
1052210550
SND_PCI_QUIRK(0x17aa, 0x3877, "Lenovo Legion 7 Slim 16ARHA7", ALC287_FIXUP_CS35L41_I2C_2),
@@ -10540,10 +10568,14 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1054010568
SND_PCI_QUIRK(0x17aa, 0x38be, "Yoga S980-14.5 proX YC Dual", ALC287_FIXUP_TAS2781_I2C),
1054110569
SND_PCI_QUIRK(0x17aa, 0x38bf, "Yoga S980-14.5 proX LX Dual", ALC287_FIXUP_TAS2781_I2C),
1054210570
SND_PCI_QUIRK(0x17aa, 0x38c3, "Y980 DUAL", ALC287_FIXUP_TAS2781_I2C),
10571+
SND_PCI_QUIRK(0x17aa, 0x38c7, "Thinkbook 13x Gen 4", ALC287_FIXUP_CS35L41_I2C_4),
10572+
SND_PCI_QUIRK(0x17aa, 0x38c8, "Thinkbook 13x Gen 4", ALC287_FIXUP_CS35L41_I2C_4),
1054310573
SND_PCI_QUIRK(0x17aa, 0x38cb, "Y790 YG DUAL", ALC287_FIXUP_TAS2781_I2C),
1054410574
SND_PCI_QUIRK(0x17aa, 0x38cd, "Y790 VECO DUAL", ALC287_FIXUP_TAS2781_I2C),
1054510575
SND_PCI_QUIRK(0x17aa, 0x38d2, "Lenovo Yoga 9 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
1054610576
SND_PCI_QUIRK(0x17aa, 0x38d7, "Lenovo Yoga 9 14IMH9", ALC287_FIXUP_YOGA9_14IMH9_BASS_SPK_PIN),
10577+
SND_PCI_QUIRK(0x17aa, 0x38f9, "Thinkbook 16P Gen5", ALC287_FIXUP_CS35L41_I2C_2),
10578+
SND_PCI_QUIRK(0x17aa, 0x38fa, "Thinkbook 16P Gen5", ALC287_FIXUP_CS35L41_I2C_2),
1054710579
SND_PCI_QUIRK(0x17aa, 0x3902, "Lenovo E50-80", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
1054810580
SND_PCI_QUIRK(0x17aa, 0x3977, "IdeaPad S210", ALC283_FIXUP_INT_MIC),
1054910581
SND_PCI_QUIRK(0x17aa, 0x3978, "Lenovo B50-70", ALC269_FIXUP_DMIC_THINKPAD_ACPI),
@@ -10581,6 +10613,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1058110613
SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
1058210614
SND_PCI_QUIRK(0x1c06, 0x2013, "Lemote A1802", ALC269_FIXUP_LEMOTE_A1802),
1058310615
SND_PCI_QUIRK(0x1c06, 0x2015, "Lemote A190X", ALC269_FIXUP_LEMOTE_A190X),
10616+
SND_PCI_QUIRK(0x1c6c, 0x122a, "Positivo N14AP7", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
1058410617
SND_PCI_QUIRK(0x1c6c, 0x1251, "Positivo N14KP6-TG", ALC288_FIXUP_DELL1_MIC_NO_PRESENCE),
1058510618
SND_PCI_QUIRK(0x1d05, 0x1132, "TongFang PHxTxX1", ALC256_FIXUP_SET_COEF_DEFAULTS),
1058610619
SND_PCI_QUIRK(0x1d05, 0x1096, "TongFang GMxMRxx", ALC269_FIXUP_NO_SHUTUP),
@@ -10605,7 +10638,6 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
1060510638
SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
1060610639
SND_PCI_QUIRK(0x8086, 0x3038, "Intel NUC 13", ALC295_FIXUP_CHROME_BOOK),
1060710640
SND_PCI_QUIRK(0xf111, 0x0001, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
10608-
SND_PCI_QUIRK(0xf111, 0x0005, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
1060910641
SND_PCI_QUIRK(0xf111, 0x0006, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE),
1061010642

1061110643
#if 0

sound/pci/hda/tas2781_hda_i2c.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -777,11 +777,11 @@ static void tas2781_hda_remove(struct device *dev)
777777
{
778778
struct tas2781_hda *tas_hda = dev_get_drvdata(dev);
779779

780+
component_del(tas_hda->dev, &tas2781_hda_comp_ops);
781+
780782
pm_runtime_get_sync(tas_hda->dev);
781783
pm_runtime_disable(tas_hda->dev);
782784

783-
component_del(tas_hda->dev, &tas2781_hda_comp_ops);
784-
785785
pm_runtime_put_noidle(tas_hda->dev);
786786

787787
tasdevice_remove(tas_hda->priv);

0 commit comments

Comments
 (0)