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

Pull sound fixes from Takashi Iwai:
"A collection of small fixes again:

- A regression fix for hibernation bug in ASoC SoundWire

- Fixes for the new Qualcomm USB offload stuff

- A potential OOB access fix in USB-audio

- A potential memleadk fix in ASoC Intel

- Quirks for HD-audio and ASoC AMD ACP"

* tag 'sound-6.16-rc4' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda/realtek: Fix built-in mic on ASUS VivoBook X507UAR
ALSA: usb: qcom: fix NULL pointer dereference in qmi_stop_session
ASoC: SOF: Intel: hda: Use devm_kstrdup() to avoid memleak.
ASoC: rt721-sdca: fix boost gain calculation error
ALSA: qc_audio_offload: Fix missing error code in prepare_qmi_response()
ALSA: hda/realtek: Add mic-mute LED setup for ASUS UM5606
ALSA: usb-audio: Fix out-of-bounds read in snd_usb_get_audioformat_uac3()
ALSA: hda/realtek: fix mute/micmute LEDs for HP EliteBook 6 G1a
ASoC: amd: ps: fix for soundwire failures during hibernation exit sequence
ASoC: amd: yc: Add DMI quirk for Lenovo IdeaPad Slim 5 15
ASoC: amd: yc: add quirk for Acer Nitro ANV15-41 internal mic
ASoC: qcom: sm8250: Fix possibly undefined reference
ALSA: hda/realtek - Enable mute LED on HP Pavilion Laptop 15-eg100
ALSA: hda/realtek: Add quirks for some Clevo laptops

+79 -15
+10
sound/pci/hda/patch_realtek.c
··· 2656 2656 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX), 2657 2657 SND_PCI_QUIRK(0x1558, 0x3702, "Clevo X370SN[VW]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2658 2658 SND_PCI_QUIRK(0x1558, 0x50d3, "Clevo PC50[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2659 + SND_PCI_QUIRK(0x1558, 0x5802, "Clevo X58[05]WN[RST]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2659 2660 SND_PCI_QUIRK(0x1558, 0x65d1, "Clevo PB51[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2660 2661 SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2661 2662 SND_PCI_QUIRK(0x1558, 0x65e1, "Clevo PB51[ED][DF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), ··· 6610 6609 if (action == HDA_FIXUP_ACT_PRE_PROBE) { 6611 6610 static const hda_nid_t conn[] = { 0x02, 0x03 }; 6612 6611 snd_hda_override_conn_list(codec, 0x15, ARRAY_SIZE(conn), conn); 6612 + snd_hda_gen_add_micmute_led_cdev(codec, NULL); 6613 6613 } 6614 6614 } 6615 6615 ··· 10739 10737 SND_PCI_QUIRK(0x103c, 0x8975, "HP EliteBook x360 840 Aero G9", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 10740 10738 SND_PCI_QUIRK(0x103c, 0x897d, "HP mt440 Mobile Thin Client U74", ALC236_FIXUP_HP_GPIO_LED), 10741 10739 SND_PCI_QUIRK(0x103c, 0x8981, "HP Elite Dragonfly G3", ALC245_FIXUP_CS35L41_SPI_4), 10740 + SND_PCI_QUIRK(0x103c, 0x898a, "HP Pavilion 15-eg100", ALC287_FIXUP_HP_GPIO_LED), 10742 10741 SND_PCI_QUIRK(0x103c, 0x898e, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2), 10743 10742 SND_PCI_QUIRK(0x103c, 0x898f, "HP EliteBook 835 G9", ALC287_FIXUP_CS35L41_I2C_2), 10744 10743 SND_PCI_QUIRK(0x103c, 0x8991, "HP EliteBook 845 G9", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), ··· 10910 10907 SND_PCI_QUIRK(0x103c, 0x8def, "HP EliteBook 660 G12", ALC236_FIXUP_HP_GPIO_LED), 10911 10908 SND_PCI_QUIRK(0x103c, 0x8df0, "HP EliteBook 630 G12", ALC236_FIXUP_HP_GPIO_LED), 10912 10909 SND_PCI_QUIRK(0x103c, 0x8df1, "HP EliteBook 630 G12", ALC236_FIXUP_HP_GPIO_LED), 10910 + SND_PCI_QUIRK(0x103c, 0x8dfb, "HP EliteBook 6 G1a 14", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 10913 10911 SND_PCI_QUIRK(0x103c, 0x8dfc, "HP EliteBook 645 G12", ALC236_FIXUP_HP_GPIO_LED), 10912 + SND_PCI_QUIRK(0x103c, 0x8dfd, "HP EliteBook 6 G1a 16", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 10914 10913 SND_PCI_QUIRK(0x103c, 0x8dfe, "HP EliteBook 665 G12", ALC236_FIXUP_HP_GPIO_LED), 10915 10914 SND_PCI_QUIRK(0x103c, 0x8e11, "HP Trekker", ALC287_FIXUP_CS35L41_I2C_2), 10916 10915 SND_PCI_QUIRK(0x103c, 0x8e12, "HP Trekker", ALC287_FIXUP_CS35L41_I2C_2), ··· 11031 11026 SND_PCI_QUIRK(0x1043, 0x1df3, "ASUS UM5606WA", ALC294_FIXUP_BASS_SPEAKER_15), 11032 11027 SND_PCI_QUIRK(0x1043, 0x1264, "ASUS UM5606KA", ALC294_FIXUP_BASS_SPEAKER_15), 11033 11028 SND_PCI_QUIRK(0x1043, 0x1e02, "ASUS UX3402ZA", ALC245_FIXUP_CS35L41_SPI_2), 11029 + SND_PCI_QUIRK(0x1043, 0x1e10, "ASUS VivoBook X507UAR", ALC256_FIXUP_ASUS_MIC_NO_PRESENCE), 11034 11030 SND_PCI_QUIRK(0x1043, 0x1e11, "ASUS Zephyrus G15", ALC289_FIXUP_ASUS_GA502), 11035 11031 SND_PCI_QUIRK(0x1043, 0x1e12, "ASUS UM3402", ALC287_FIXUP_CS35L41_I2C_2), 11036 11032 SND_PCI_QUIRK(0x1043, 0x1e1f, "ASUS Vivobook 15 X1504VAP", ALC2XX_FIXUP_HEADSET_MIC), ··· 11141 11135 SND_PCI_QUIRK(0x1558, 0x14a1, "Clevo L141MU", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11142 11136 SND_PCI_QUIRK(0x1558, 0x2624, "Clevo L240TU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11143 11137 SND_PCI_QUIRK(0x1558, 0x28c1, "Clevo V370VND", ALC2XX_FIXUP_HEADSET_MIC), 11138 + SND_PCI_QUIRK(0x1558, 0x35a1, "Clevo V3[56]0EN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11139 + SND_PCI_QUIRK(0x1558, 0x35b1, "Clevo V3[57]0WN[MNP]Q", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11144 11140 SND_PCI_QUIRK(0x1558, 0x4018, "Clevo NV40M[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11145 11141 SND_PCI_QUIRK(0x1558, 0x4019, "Clevo NV40MZ", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11146 11142 SND_PCI_QUIRK(0x1558, 0x4020, "Clevo NV40MB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), ··· 11170 11162 SND_PCI_QUIRK(0x1558, 0x51b1, "Clevo NS50AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11171 11163 SND_PCI_QUIRK(0x1558, 0x51b3, "Clevo NS70AU", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11172 11164 SND_PCI_QUIRK(0x1558, 0x5630, "Clevo NP50RNJS", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11165 + SND_PCI_QUIRK(0x1558, 0x5700, "Clevo X560WN[RST]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11173 11166 SND_PCI_QUIRK(0x1558, 0x70a1, "Clevo NB70T[HJK]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11174 11167 SND_PCI_QUIRK(0x1558, 0x70b3, "Clevo NK70SB", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11175 11168 SND_PCI_QUIRK(0x1558, 0x70f2, "Clevo NH79EPY", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), ··· 11210 11201 SND_PCI_QUIRK(0x1558, 0xa650, "Clevo NP[567]0SN[CD]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11211 11202 SND_PCI_QUIRK(0x1558, 0xa671, "Clevo NP70SN[CDE]", ALC256_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11212 11203 SND_PCI_QUIRK(0x1558, 0xa741, "Clevo V54x_6x_TNE", ALC245_FIXUP_CLEVO_NOISY_MIC), 11204 + SND_PCI_QUIRK(0x1558, 0xa743, "Clevo V54x_6x_TU", ALC245_FIXUP_CLEVO_NOISY_MIC), 11213 11205 SND_PCI_QUIRK(0x1558, 0xa763, "Clevo V54x_6x_TU", ALC245_FIXUP_CLEVO_NOISY_MIC), 11214 11206 SND_PCI_QUIRK(0x1558, 0xb018, "Clevo NP50D[BE]", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE), 11215 11207 SND_PCI_QUIRK(0x1558, 0xb019, "Clevo NH77D[BE]Q", ALC293_FIXUP_SYSTEM76_MIC_NO_PRESENCE),
+4
sound/soc/amd/ps/acp63.h
··· 334 334 * @addr: pci ioremap address 335 335 * @reg_range: ACP reigister range 336 336 * @acp_rev: ACP PCI revision id 337 + * @acp_sw_pad_keeper_en: store acp SoundWire pad keeper enable register value 338 + * @acp_pad_pulldown_ctrl: store acp pad pulldown control register value 337 339 * @acp63_sdw0-dma_intr_stat: DMA interrupt status array for ACP6.3 platform SoundWire 338 340 * manager-SW0 instance 339 341 * @acp63_sdw_dma_intr_stat: DMA interrupt status array for ACP6.3 platform SoundWire ··· 369 367 u32 addr; 370 368 u32 reg_range; 371 369 u32 acp_rev; 370 + u32 acp_sw_pad_keeper_en; 371 + u32 acp_pad_pulldown_ctrl; 372 372 u16 acp63_sdw0_dma_intr_stat[ACP63_SDW0_DMA_MAX_STREAMS]; 373 373 u16 acp63_sdw1_dma_intr_stat[ACP63_SDW1_DMA_MAX_STREAMS]; 374 374 u16 acp70_sdw0_dma_intr_stat[ACP70_SDW0_DMA_MAX_STREAMS];
+18
sound/soc/amd/ps/ps-common.c
··· 160 160 161 161 adata = dev_get_drvdata(dev); 162 162 if (adata->is_sdw_dev) { 163 + adata->acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN); 164 + adata->acp_pad_pulldown_ctrl = readl(adata->acp63_base + ACP_PAD_PULLDOWN_CTRL); 163 165 adata->sdw_en_stat = check_acp_sdw_enable_status(adata); 164 166 if (adata->sdw_en_stat) { 165 167 writel(1, adata->acp63_base + ACP_ZSC_DSP_CTRL); ··· 199 197 static int __maybe_unused snd_acp63_resume(struct device *dev) 200 198 { 201 199 struct acp63_dev_data *adata; 200 + u32 acp_sw_pad_keeper_en; 202 201 int ret; 203 202 204 203 adata = dev_get_drvdata(dev); ··· 212 209 if (ret) 213 210 dev_err(dev, "ACP init failed\n"); 214 211 212 + acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN); 213 + dev_dbg(dev, "ACP_SW0_PAD_KEEPER_EN:0x%x\n", acp_sw_pad_keeper_en); 214 + if (!acp_sw_pad_keeper_en) { 215 + writel(adata->acp_sw_pad_keeper_en, adata->acp63_base + ACP_SW0_PAD_KEEPER_EN); 216 + writel(adata->acp_pad_pulldown_ctrl, adata->acp63_base + ACP_PAD_PULLDOWN_CTRL); 217 + } 215 218 return ret; 216 219 } 217 220 ··· 417 408 418 409 adata = dev_get_drvdata(dev); 419 410 if (adata->is_sdw_dev) { 411 + adata->acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN); 412 + adata->acp_pad_pulldown_ctrl = readl(adata->acp63_base + ACP_PAD_PULLDOWN_CTRL); 420 413 adata->sdw_en_stat = check_acp_sdw_enable_status(adata); 421 414 if (adata->sdw_en_stat) { 422 415 writel(1, adata->acp63_base + ACP_ZSC_DSP_CTRL); ··· 456 445 static int __maybe_unused snd_acp70_resume(struct device *dev) 457 446 { 458 447 struct acp63_dev_data *adata; 448 + u32 acp_sw_pad_keeper_en; 459 449 int ret; 460 450 461 451 adata = dev_get_drvdata(dev); ··· 471 459 if (ret) 472 460 dev_err(dev, "ACP init failed\n"); 473 461 462 + acp_sw_pad_keeper_en = readl(adata->acp63_base + ACP_SW0_PAD_KEEPER_EN); 463 + dev_dbg(dev, "ACP_SW0_PAD_KEEPER_EN:0x%x\n", acp_sw_pad_keeper_en); 464 + if (!acp_sw_pad_keeper_en) { 465 + writel(adata->acp_sw_pad_keeper_en, adata->acp63_base + ACP_SW0_PAD_KEEPER_EN); 466 + writel(adata->acp_pad_pulldown_ctrl, adata->acp63_base + ACP_PAD_PULLDOWN_CTRL); 467 + } 474 468 return ret; 475 469 } 476 470
+14
sound/soc/amd/yc/acp6x-mach.c
··· 356 356 { 357 357 .driver_data = &acp6x_card, 358 358 .matches = { 359 + DMI_MATCH(DMI_BOARD_VENDOR, "RB"), 360 + DMI_MATCH(DMI_PRODUCT_NAME, "Nitro ANV15-41"), 361 + } 362 + }, 363 + { 364 + .driver_data = &acp6x_card, 365 + .matches = { 359 366 DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 360 367 DMI_MATCH(DMI_PRODUCT_NAME, "83J2"), 368 + } 369 + }, 370 + { 371 + .driver_data = &acp6x_card, 372 + .matches = { 373 + DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"), 374 + DMI_MATCH(DMI_PRODUCT_NAME, "83J3"), 361 375 } 362 376 }, 363 377 {
+19 -4
sound/soc/codecs/rt721-sdca.c
··· 430 430 unsigned int read_l, read_r, ctl_l = 0, ctl_r = 0; 431 431 unsigned int adc_vol_flag = 0; 432 432 const unsigned int interval_offset = 0xc0; 433 + const unsigned int tendA = 0x200; 433 434 const unsigned int tendB = 0xa00; 434 435 435 436 if (strstr(ucontrol->id.name, "FU1E Capture Volume") || ··· 440 439 regmap_read(rt721->mbq_regmap, mc->reg, &read_l); 441 440 regmap_read(rt721->mbq_regmap, mc->rreg, &read_r); 442 441 443 - if (mc->shift == 8) /* boost gain */ 442 + if (mc->shift == 8) { 443 + /* boost gain */ 444 444 ctl_l = read_l / tendB; 445 - else { 445 + } else if (mc->shift == 1) { 446 + /* FU33 boost gain */ 447 + if (read_l == 0x8000 || read_l == 0xfe00) 448 + ctl_l = 0; 449 + else 450 + ctl_l = read_l / tendA + 1; 451 + } else { 446 452 if (adc_vol_flag) 447 453 ctl_l = mc->max - (((0x1e00 - read_l) & 0xffff) / interval_offset); 448 454 else ··· 457 449 } 458 450 459 451 if (read_l != read_r) { 460 - if (mc->shift == 8) /* boost gain */ 452 + if (mc->shift == 8) { 453 + /* boost gain */ 461 454 ctl_r = read_r / tendB; 462 - else { /* ADC/DAC gain */ 455 + } else if (mc->shift == 1) { 456 + /* FU33 boost gain */ 457 + if (read_r == 0x8000 || read_r == 0xfe00) 458 + ctl_r = 0; 459 + else 460 + ctl_r = read_r / tendA + 1; 461 + } else { /* ADC/DAC gain */ 463 462 if (adc_vol_flag) 464 463 ctl_r = mc->max - (((0x1e00 - read_r) & 0xffff) / interval_offset); 465 464 else
+1
sound/soc/qcom/Kconfig
··· 186 186 tristate "SoC Machine driver for SM8250 boards" 187 187 depends on QCOM_APR && SOUNDWIRE 188 188 depends on COMMON_CLK 189 + depends on SND_SOC_QCOM_OFFLOAD_UTILS || !SND_SOC_QCOM_OFFLOAD_UTILS 189 190 select SND_SOC_QDSP6 190 191 select SND_SOC_QCOM_COMMON 191 192 select SND_SOC_QCOM_SDW
+3 -3
sound/soc/sof/intel/hda.c
··· 1257 1257 return 0; 1258 1258 } 1259 1259 1260 - static char *remove_file_ext(const char *tplg_filename) 1260 + static char *remove_file_ext(struct device *dev, const char *tplg_filename) 1261 1261 { 1262 1262 char *filename, *tmp; 1263 1263 1264 - filename = kstrdup(tplg_filename, GFP_KERNEL); 1264 + filename = devm_kstrdup(dev, tplg_filename, GFP_KERNEL); 1265 1265 if (!filename) 1266 1266 return NULL; 1267 1267 ··· 1345 1345 */ 1346 1346 if (!sof_pdata->tplg_filename) { 1347 1347 /* remove file extension if it exists */ 1348 - tplg_filename = remove_file_ext(mach->sof_tplg_filename); 1348 + tplg_filename = remove_file_ext(sdev->dev, mach->sof_tplg_filename); 1349 1349 if (!tplg_filename) 1350 1350 return NULL; 1351 1351
+8 -8
sound/usb/qcom/qc_audio_offload.c
··· 759 759 subs = find_substream(pcm_card_num, info->pcm_dev_num, 760 760 info->direction); 761 761 if (!subs || !chip || atomic_read(&chip->shutdown)) { 762 - dev_err(&subs->dev->dev, 762 + dev_err(&uadev[idx].udev->dev, 763 763 "no sub for c#%u dev#%u dir%u\n", 764 764 info->pcm_card_num, 765 765 info->pcm_dev_num, ··· 1360 1360 1361 1361 if (!uadev[card_num].ctrl_intf) { 1362 1362 dev_err(&subs->dev->dev, "audio ctrl intf info not cached\n"); 1363 - ret = -ENODEV; 1364 - goto err; 1363 + return -ENODEV; 1365 1364 } 1366 1365 1367 1366 ret = uaudio_populate_uac_desc(subs, resp); 1368 1367 if (ret < 0) 1369 - goto err; 1368 + return ret; 1370 1369 1371 1370 resp->slot_id = subs->dev->slot_id; 1372 1371 resp->slot_id_valid = 1; 1373 1372 1374 1373 data = snd_soc_usb_find_priv_data(uaudio_qdev->auxdev->dev.parent); 1375 - if (!data) 1376 - goto err; 1374 + if (!data) { 1375 + dev_err(&subs->dev->dev, "No private data found\n"); 1376 + return -ENODEV; 1377 + } 1377 1378 1378 1379 uaudio_qdev->data = data; 1379 1380 ··· 1383 1382 &resp->xhci_mem_info.tr_data, 1384 1383 &resp->std_as_data_ep_desc); 1385 1384 if (ret < 0) 1386 - goto err; 1385 + return ret; 1387 1386 1388 1387 resp->std_as_data_ep_desc_valid = 1; 1389 1388 ··· 1501 1500 xhci_sideband_remove_endpoint(uadev[card_num].sb, 1502 1501 usb_pipe_endpoint(subs->dev, subs->data_endpoint->pipe)); 1503 1502 1504 - err: 1505 1503 return ret; 1506 1504 } 1507 1505
+2
sound/usb/stream.c
··· 987 987 * and request Cluster Descriptor 988 988 */ 989 989 wLength = le16_to_cpu(hc_header.wLength); 990 + if (wLength < sizeof(cluster)) 991 + return NULL; 990 992 cluster = kzalloc(wLength, GFP_KERNEL); 991 993 if (!cluster) 992 994 return ERR_PTR(-ENOMEM);