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

Pull sound fixes from Takashi Iwai:
"Slightly bigger than I wished, but here we go, a collection of fixes
for 6.5.

The only change in the core side is the ease for repeated ASoC error
messages, and the rest are all pretty device-specific small fixes
(including regression fixes) for ASoC Intel and HD-audio / USB-audio
quirks"

* tag 'sound-6.5-rc7' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda/realtek - Remodified 3k pull low procedure
ASoC: rt1308-sdw: fix random louder sound
ALSA: hda/cs8409: Support new Dell Dolphin Variants
ALSA: hda/realtek: Switch Dell Oasis models to use SPI
ALSA: hda/realtek: Add quirks for HP G11 Laptops
ASoC: meson: axg-tdm-formatter: fix channel slot allocation
ASoC: SOF: ipc4-topology: Update the basecfg for copier earlier
ASoC: SOF: intel: hda: Clean up link DMA for IPC3 during stop
ASoC: Intel: sof-sdw-cs42142: fix for codec button mapping
ASoC: Intel: sof-sdw: update jack detection quirk for LunarLake RVP
ASoC: SOF: Fix incorrect use of sizeof in sof_ipc3_do_rx_work()
ASoC: lower "no backend DAIs enabled for ... Port" log severity
ASoC: rt5665: add missed regulator_bulk_disable
ASoC: max98363: don't return on success reading revision ID
ALSA: usb-audio: Add support for Mythware XA001AU capture and playback interfaces.
ASoC: fsl: micfil: Use dual license micfil code

+125 -46
+4
sound/pci/hda/patch_cs8409-tables.c
··· 550 550 SND_PCI_QUIRK(0x1028, 0x0C50, "Dolphin", CS8409_DOLPHIN), 551 551 SND_PCI_QUIRK(0x1028, 0x0C51, "Dolphin", CS8409_DOLPHIN), 552 552 SND_PCI_QUIRK(0x1028, 0x0C52, "Dolphin", CS8409_DOLPHIN), 553 + SND_PCI_QUIRK(0x1028, 0x0C73, "Dolphin", CS8409_DOLPHIN), 554 + SND_PCI_QUIRK(0x1028, 0x0C75, "Dolphin", CS8409_DOLPHIN), 555 + SND_PCI_QUIRK(0x1028, 0x0C7D, "Dolphin", CS8409_DOLPHIN), 556 + SND_PCI_QUIRK(0x1028, 0x0C7F, "Dolphin", CS8409_DOLPHIN), 553 557 {} /* terminator */ 554 558 }; 555 559
+16 -8
sound/pci/hda/patch_realtek.c
··· 9422 9422 SND_PCI_QUIRK(0x1028, 0x0cbd, "Dell Oasis 13 CS MTL-U", ALC245_FIXUP_CS35L41_SPI_2), 9423 9423 SND_PCI_QUIRK(0x1028, 0x0cbe, "Dell Oasis 13 2-IN-1 MTL-U", ALC245_FIXUP_CS35L41_SPI_2), 9424 9424 SND_PCI_QUIRK(0x1028, 0x0cbf, "Dell Oasis 13 Low Weight MTU-L", ALC245_FIXUP_CS35L41_SPI_2), 9425 - SND_PCI_QUIRK(0x1028, 0x0cc1, "Dell Oasis 14 MTL-H/U", ALC287_FIXUP_CS35L41_I2C_2), 9426 - SND_PCI_QUIRK(0x1028, 0x0cc2, "Dell Oasis 14 2-in-1 MTL-H/U", ALC287_FIXUP_CS35L41_I2C_2), 9427 - SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC287_FIXUP_CS35L41_I2C_2), 9428 - SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC287_FIXUP_CS35L41_I2C_2), 9429 - SND_PCI_QUIRK(0x1028, 0x0cc5, "Dell Oasis MLK 14 RPL-P", ALC287_FIXUP_CS35L41_I2C_2), 9425 + SND_PCI_QUIRK(0x1028, 0x0cc1, "Dell Oasis 14 MTL-H/U", ALC245_FIXUP_CS35L41_SPI_2), 9426 + SND_PCI_QUIRK(0x1028, 0x0cc2, "Dell Oasis 14 2-in-1 MTL-H/U", ALC245_FIXUP_CS35L41_SPI_2), 9427 + SND_PCI_QUIRK(0x1028, 0x0cc3, "Dell Oasis 14 Low Weight MTL-U", ALC245_FIXUP_CS35L41_SPI_2), 9428 + SND_PCI_QUIRK(0x1028, 0x0cc4, "Dell Oasis 16 MTL-H/U", ALC245_FIXUP_CS35L41_SPI_2), 9430 9429 SND_PCI_QUIRK(0x1028, 0x164a, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 9431 9430 SND_PCI_QUIRK(0x1028, 0x164b, "Dell", ALC293_FIXUP_DELL1_MIC_NO_PRESENCE), 9432 9431 SND_PCI_QUIRK(0x103c, 0x1586, "HP", ALC269_FIXUP_HP_MUTE_LED_MIC2), ··· 9616 9617 SND_PCI_QUIRK(0x103c, 0x8b96, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 9617 9618 SND_PCI_QUIRK(0x103c, 0x8b97, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 9618 9619 SND_PCI_QUIRK(0x103c, 0x8bf0, "HP", ALC236_FIXUP_HP_GPIO_LED), 9619 - SND_PCI_QUIRK(0x103c, 0x8c26, "HP HP EliteBook 800G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 9620 + SND_PCI_QUIRK(0x103c, 0x8c46, "HP EliteBook 830 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 9621 + SND_PCI_QUIRK(0x103c, 0x8c47, "HP EliteBook 840 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 9622 + SND_PCI_QUIRK(0x103c, 0x8c48, "HP EliteBook 860 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 9623 + SND_PCI_QUIRK(0x103c, 0x8c49, "HP Elite x360 830 2-in-1 G11", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 9624 + SND_PCI_QUIRK(0x103c, 0x8c70, "HP EliteBook 835 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), 9625 + SND_PCI_QUIRK(0x103c, 0x8c71, "HP EliteBook 845 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), 9626 + SND_PCI_QUIRK(0x103c, 0x8c72, "HP EliteBook 865 G11", ALC287_FIXUP_CS35L41_I2C_2_HP_GPIO_LED), 9620 9627 SND_PCI_QUIRK(0x1043, 0x103e, "ASUS X540SA", ALC256_FIXUP_ASUS_MIC), 9621 9628 SND_PCI_QUIRK(0x1043, 0x103f, "ASUS TX300", ALC282_FIXUP_ASUS_TX300), 9622 9629 SND_PCI_QUIRK(0x1043, 0x106d, "Asus K53BE", ALC269_FIXUP_LIMIT_INT_MIC_BOOST), ··· 10643 10638 spec = codec->spec; 10644 10639 spec->gen.shared_mic_vref_pin = 0x18; 10645 10640 codec->power_save_node = 0; 10641 + spec->en_3kpull_low = true; 10646 10642 10647 10643 #ifdef CONFIG_PM 10648 10644 codec->patch_ops.suspend = alc269_suspend; ··· 10726 10720 spec->shutup = alc256_shutup; 10727 10721 spec->init_hook = alc256_init; 10728 10722 spec->gen.mixer_nid = 0; /* ALC256 does not have any loopback mixer path */ 10729 - if (codec->bus->pci->vendor == PCI_VENDOR_ID_AMD) 10730 - spec->en_3kpull_low = true; 10723 + if (codec->core.vendor_id == 0x10ec0236 && 10724 + codec->bus->pci->vendor != PCI_VENDOR_ID_AMD) 10725 + spec->en_3kpull_low = false; 10731 10726 break; 10732 10727 case 0x10ec0257: 10733 10728 spec->codec_variant = ALC269_TYPE_ALC257; 10734 10729 spec->shutup = alc256_shutup; 10735 10730 spec->init_hook = alc256_init; 10736 10731 spec->gen.mixer_nid = 0; 10732 + spec->en_3kpull_low = false; 10737 10733 break; 10738 10734 case 0x10ec0215: 10739 10735 case 0x10ec0245:
+5 -4
sound/soc/codecs/max98363.c
··· 185 185 pm_runtime_get_noresume(dev); 186 186 187 187 ret = regmap_read(max98363->regmap, MAX98363_R21FF_REV_ID, &reg); 188 - if (!ret) { 188 + if (!ret) 189 189 dev_info(dev, "Revision ID: %X\n", reg); 190 - return ret; 191 - } 190 + else 191 + goto out; 192 192 193 193 if (max98363->first_hw_init) { 194 194 regcache_cache_bypass(max98363->regmap, false); ··· 198 198 max98363->first_hw_init = true; 199 199 max98363->hw_init = true; 200 200 201 + out: 201 202 pm_runtime_mark_last_busy(dev); 202 203 pm_runtime_put_autosuspend(dev); 203 204 204 - return 0; 205 + return ret; 205 206 } 206 207 207 208 #define MAX98363_RATES SNDRV_PCM_RATE_8000_192000
+12 -1
sound/soc/codecs/rt1308-sdw.c
··· 52 52 case 0x300a: 53 53 case 0xc000: 54 54 case 0xc710: 55 + case 0xcf01: 55 56 case 0xc860 ... 0xc863: 56 57 case 0xc870 ... 0xc873: 57 58 return true; ··· 214 213 { 215 214 struct rt1308_sdw_priv *rt1308 = dev_get_drvdata(dev); 216 215 int ret = 0; 217 - unsigned int tmp; 216 + unsigned int tmp, hibernation_flag; 218 217 219 218 if (rt1308->hw_init) 220 219 return 0; ··· 242 241 } 243 242 244 243 pm_runtime_get_noresume(&slave->dev); 244 + 245 + regmap_read(rt1308->regmap, 0xcf01, &hibernation_flag); 246 + if ((hibernation_flag != 0x00) && rt1308->first_hw_init) 247 + goto _preset_ready_; 245 248 246 249 /* sw reset */ 247 250 regmap_write(rt1308->regmap, RT1308_SDW_RESET, 0); ··· 287 282 regmap_write(rt1308->regmap, 0xc100, 0xd7); 288 283 regmap_write(rt1308->regmap, 0xc101, 0xd7); 289 284 285 + /* apply BQ params */ 286 + rt1308_apply_bq_params(rt1308); 287 + 288 + regmap_write(rt1308->regmap, 0xcf01, 0x01); 289 + 290 + _preset_ready_: 290 291 if (rt1308->first_hw_init) { 291 292 regcache_cache_bypass(rt1308->regmap, false); 292 293 regcache_mark_dirty(rt1308->regmap);
+2
sound/soc/codecs/rt5665.c
··· 4472 4472 struct rt5665_priv *rt5665 = snd_soc_component_get_drvdata(component); 4473 4473 4474 4474 regmap_write(rt5665->regmap, RT5665_RESET, 0); 4475 + 4476 + regulator_bulk_disable(ARRAY_SIZE(rt5665->supplies), rt5665->supplies); 4475 4477 } 4476 4478 4477 4479 #ifdef CONFIG_PM
+2 -2
sound/soc/fsl/fsl_micfil.c
··· 1 - // SPDX-License-Identifier: GPL-2.0 1 + // SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause 2 2 // Copyright 2018 NXP 3 3 4 4 #include <linux/bitfield.h> ··· 1254 1254 1255 1255 MODULE_AUTHOR("Cosmin-Gabriel Samoila <cosmin.samoila@nxp.com>"); 1256 1256 MODULE_DESCRIPTION("NXP PDM Microphone Interface (MICFIL) driver"); 1257 - MODULE_LICENSE("GPL v2"); 1257 + MODULE_LICENSE("Dual BSD/GPL");
+1 -1
sound/soc/fsl/fsl_micfil.h
··· 1 - /* SPDX-License-Identifier: GPL-2.0 */ 1 + /* SPDX-License-Identifier: GPL-2.0 OR BSD-3-Clause */ 2 2 /* 3 3 * PDM Microphone Interface for the NXP i.MX SoC 4 4 * Copyright 2018 NXP
+1 -1
sound/soc/intel/boards/sof_sdw.c
··· 476 476 DMI_MATCH(DMI_SYS_VENDOR, "Intel Corporation"), 477 477 DMI_MATCH(DMI_PRODUCT_NAME, "Lunar Lake Client Platform"), 478 478 }, 479 - .driver_data = (void *)(RT711_JD2_100K), 479 + .driver_data = (void *)(RT711_JD2), 480 480 }, 481 481 {} 482 482 };
+3 -3
sound/soc/intel/boards/sof_sdw_cs42l42.c
··· 99 99 jack = &ctx->sdw_headset; 100 100 101 101 snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_PLAYPAUSE); 102 - snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND); 103 - snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP); 104 - snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN); 102 + snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP); 103 + snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN); 104 + snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND); 105 105 106 106 ret = snd_soc_component_set_jack(component, jack, NULL); 107 107
+26 -16
sound/soc/meson/axg-tdm-formatter.c
··· 30 30 struct axg_tdm_stream *ts, 31 31 unsigned int offset) 32 32 { 33 - unsigned int val, ch = ts->channels; 34 - unsigned long mask; 35 - int i, j; 33 + unsigned int ch = ts->channels; 34 + u32 val[AXG_TDM_NUM_LANES]; 35 + int i, j, k; 36 + 37 + /* 38 + * We need to mimick the slot distribution used by the HW to keep the 39 + * channel placement consistent regardless of the number of channel 40 + * in the stream. This is why the odd algorithm below is used. 41 + */ 42 + memset(val, 0, sizeof(*val) * AXG_TDM_NUM_LANES); 36 43 37 44 /* 38 45 * Distribute the channels of the stream over the available slots 39 - * of each TDM lane 46 + * of each TDM lane. We need to go over the 32 slots ... 40 47 */ 41 - for (i = 0; i < AXG_TDM_NUM_LANES; i++) { 42 - val = 0; 43 - mask = ts->mask[i]; 44 - 45 - for (j = find_first_bit(&mask, 32); 46 - (j < 32) && ch; 47 - j = find_next_bit(&mask, 32, j + 1)) { 48 - val |= 1 << j; 49 - ch -= 1; 48 + for (i = 0; (i < 32) && ch; i += 2) { 49 + /* ... of all the lanes ... */ 50 + for (j = 0; j < AXG_TDM_NUM_LANES; j++) { 51 + /* ... then distribute the channels in pairs */ 52 + for (k = 0; k < 2; k++) { 53 + if ((BIT(i + k) & ts->mask[j]) && ch) { 54 + val[j] |= BIT(i + k); 55 + ch -= 1; 56 + } 57 + } 50 58 } 51 - 52 - regmap_write(map, offset, val); 53 - offset += regmap_get_reg_stride(map); 54 59 } 55 60 56 61 /* ··· 66 61 if (WARN_ON(ch != 0)) { 67 62 pr_err("channel mask error\n"); 68 63 return -EINVAL; 64 + } 65 + 66 + for (i = 0; i < AXG_TDM_NUM_LANES; i++) { 67 + regmap_write(map, offset, val[i]); 68 + offset += regmap_get_reg_stride(map); 69 69 } 70 70 71 71 return 0;
+6 -2
sound/soc/soc-pcm.c
··· 38 38 switch (ret) { 39 39 case -EPROBE_DEFER: 40 40 case -ENOTSUPP: 41 + case -EINVAL: 41 42 break; 42 43 default: 43 44 dev_err(rtd->dev, ··· 2467 2466 2468 2467 /* there is no point preparing this FE if there are no BEs */ 2469 2468 if (list_empty(&fe->dpcm[stream].be_clients)) { 2470 - dev_err(fe->dev, "ASoC: no backend DAIs enabled for %s\n", 2471 - fe->dai_link->name); 2469 + /* dev_err_once() for visibility, dev_dbg() for debugging UCM profiles */ 2470 + dev_err_once(fe->dev, "ASoC: no backend DAIs enabled for %s, possibly missing ALSA mixer-based routing or UCM profile\n", 2471 + fe->dai_link->name); 2472 + dev_dbg(fe->dev, "ASoC: no backend DAIs enabled for %s\n", 2473 + fe->dai_link->name); 2472 2474 ret = -EINVAL; 2473 2475 goto out; 2474 2476 }
+10 -1
sound/soc/sof/intel/hda-dai-ops.c
··· 372 372 static int hda_ipc3_post_trigger(struct snd_sof_dev *sdev, struct snd_soc_dai *cpu_dai, 373 373 struct snd_pcm_substream *substream, int cmd) 374 374 { 375 + struct hdac_ext_stream *hext_stream = hda_get_hext_stream(sdev, cpu_dai, substream); 375 376 struct snd_soc_dapm_widget *w = snd_soc_dai_get_widget(cpu_dai, substream->stream); 376 377 377 378 switch (cmd) { ··· 380 379 case SNDRV_PCM_TRIGGER_STOP: 381 380 { 382 381 struct snd_sof_dai_config_data data = { 0 }; 382 + int ret; 383 383 384 384 data.dai_data = DMA_CHAN_INVALID; 385 - return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data); 385 + ret = hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_HW_FREE, &data); 386 + if (ret < 0) 387 + return ret; 388 + 389 + if (cmd == SNDRV_PCM_TRIGGER_STOP) 390 + return hda_link_dma_cleanup(substream, hext_stream, cpu_dai); 391 + 392 + break; 386 393 } 387 394 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 388 395 return hda_dai_config(w, SOF_DAI_CONFIG_FLAGS_PAUSE, NULL);
+2 -3
sound/soc/sof/intel/hda-dai.c
··· 107 107 return sdai->platform_private; 108 108 } 109 109 110 - static int hda_link_dma_cleanup(struct snd_pcm_substream *substream, 111 - struct hdac_ext_stream *hext_stream, 112 - struct snd_soc_dai *cpu_dai) 110 + int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream, 111 + struct snd_soc_dai *cpu_dai) 113 112 { 114 113 const struct hda_dai_widget_dma_ops *ops = hda_dai_get_ops(substream, cpu_dai); 115 114 struct sof_intel_hda_stream *hda_stream;
+2
sound/soc/sof/intel/hda.h
··· 963 963 hda_select_dai_widget_ops(struct snd_sof_dev *sdev, struct snd_sof_widget *swidget); 964 964 int hda_dai_config(struct snd_soc_dapm_widget *w, unsigned int flags, 965 965 struct snd_sof_dai_config_data *data); 966 + int hda_link_dma_cleanup(struct snd_pcm_substream *substream, struct hdac_ext_stream *hext_stream, 967 + struct snd_soc_dai *cpu_dai); 966 968 967 969 #endif
+1 -1
sound/soc/sof/ipc3.c
··· 1001 1001 1002 1002 ipc3_log_header(sdev->dev, "ipc rx", hdr->cmd); 1003 1003 1004 - if (hdr->size < sizeof(hdr) || hdr->size > SOF_IPC_MSG_MAX_SIZE) { 1004 + if (hdr->size < sizeof(*hdr) || hdr->size > SOF_IPC_MSG_MAX_SIZE) { 1005 1005 dev_err(sdev->dev, "The received message size is invalid: %u\n", 1006 1006 hdr->size); 1007 1007 return;
+3 -3
sound/soc/sof/ipc4-topology.c
··· 1731 1731 1732 1732 *ipc_config_size = ipc_size; 1733 1733 1734 + /* update pipeline memory usage */ 1735 + sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config); 1736 + 1734 1737 /* copy IPC data */ 1735 1738 memcpy(*ipc_config_data, (void *)copier_data, sizeof(*copier_data)); 1736 1739 if (gtw_cfg_config_length) ··· 1745 1742 memcpy(*ipc_config_data + sizeof(*copier_data) + 1746 1743 gtw_cfg_config_length, 1747 1744 &ipc4_copier->dma_config_tlv, dma_config_tlv_size); 1748 - 1749 - /* update pipeline memory usage */ 1750 - sof_ipc4_update_resource_usage(sdev, swidget, &copier_data->base_config); 1751 1745 1752 1746 return 0; 1753 1747 }
+29
sound/usb/quirks-table.h
··· 4507 4507 } 4508 4508 } 4509 4509 }, 4510 + { 4511 + /* Advanced modes of the Mythware XA001AU. 4512 + * For the standard mode, Mythware XA001AU has ID ffad:a001 4513 + */ 4514 + USB_DEVICE_VENDOR_SPEC(0xffad, 0xa001), 4515 + .driver_info = (unsigned long) &(const struct snd_usb_audio_quirk) { 4516 + .vendor_name = "Mythware", 4517 + .product_name = "XA001AU", 4518 + .ifnum = QUIRK_ANY_INTERFACE, 4519 + .type = QUIRK_COMPOSITE, 4520 + .data = (const struct snd_usb_audio_quirk[]) { 4521 + { 4522 + .ifnum = 0, 4523 + .type = QUIRK_IGNORE_INTERFACE, 4524 + }, 4525 + { 4526 + .ifnum = 1, 4527 + .type = QUIRK_AUDIO_STANDARD_INTERFACE, 4528 + }, 4529 + { 4530 + .ifnum = 2, 4531 + .type = QUIRK_AUDIO_STANDARD_INTERFACE, 4532 + }, 4533 + { 4534 + .ifnum = -1 4535 + } 4536 + } 4537 + } 4538 + }, 4510 4539 4511 4540 #undef USB_DEVICE_VENDOR_SPEC 4512 4541 #undef USB_AUDIO_DEVICE