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

Pull sound fixes from Takashi Iwai:
"The majority of changes here are various fixes for Intel drivers,
and there is a change in ASoC PCM core for the format constraints.

In addition, a workaround for HD-audio HDMI regressions and usual
HD-audio quirks are found"

* tag 'sound-6.3-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
ALSA: hda/hdmi: Preserve the previous PCM device upon re-enablement
ALSA: hda/realtek: Add quirk for Clevo X370SNW
ALSA: hda/realtek: fix mute/micmute LEDs for a HP ProBook
ASoC: SOF: avoid a NULL dereference with unsupported widgets
ASoC: da7213.c: add missing pm_runtime_disable()
ASoC: hdac_hdmi: use set_stream() instead of set_tdm_slots()
ASoC: codecs: lpass: fix the order or clks turn off during suspend
ASoC: Intel: bytcr_rt5640: Add quirk for the Acer Iconia One 7 B1-750
ASoC: SOF: ipc4: Ensure DSP is in D0I0 during sof_ipc4_set_get_data()
ASoC: amd: yc: Add DMI entries to support Victus by HP Laptop 16-e1xxx (8A22)
ASoC: soc-pcm: fix hw->formats cleared by soc_pcm_hw_init() for dpcm
ASoC: Intel: soc-acpi: add table for Intel 'Rooks County' NUC M15
ASOC: Intel: sof_sdw: add quirk for Intel 'Rooks County' NUC M15

+106 -12
+11
sound/pci/hda/patch_hdmi.c
··· 81 81 struct delayed_work work; 82 82 struct hdmi_pcm *pcm; /* pointer to spec->pcm_rec[n] dynamically*/ 83 83 int pcm_idx; /* which pcm is attached. -1 means no pcm is attached */ 84 + int prev_pcm_idx; /* previously assigned pcm index */ 84 85 int repoll_count; 85 86 bool setup; /* the stream has been set up by prepare callback */ 86 87 bool silent_stream; ··· 1381 1380 /* pcm already be attached to the pin */ 1382 1381 if (per_pin->pcm) 1383 1382 return; 1383 + /* try the previously used slot at first */ 1384 + idx = per_pin->prev_pcm_idx; 1385 + if (idx >= 0) { 1386 + if (!test_bit(idx, &spec->pcm_bitmap)) 1387 + goto found; 1388 + per_pin->prev_pcm_idx = -1; /* no longer valid, clear it */ 1389 + } 1384 1390 idx = hdmi_find_pcm_slot(spec, per_pin); 1385 1391 if (idx == -EBUSY) 1386 1392 return; 1393 + found: 1387 1394 per_pin->pcm_idx = idx; 1388 1395 per_pin->pcm = get_hdmi_pcm(spec, idx); 1389 1396 set_bit(idx, &spec->pcm_bitmap); ··· 1407 1398 return; 1408 1399 idx = per_pin->pcm_idx; 1409 1400 per_pin->pcm_idx = -1; 1401 + per_pin->prev_pcm_idx = idx; /* remember the previous index */ 1410 1402 per_pin->pcm = NULL; 1411 1403 if (idx >= 0 && idx < spec->pcm_used) 1412 1404 clear_bit(idx, &spec->pcm_bitmap); ··· 1934 1924 1935 1925 per_pin->pcm = NULL; 1936 1926 per_pin->pcm_idx = -1; 1927 + per_pin->prev_pcm_idx = -1; 1937 1928 per_pin->pin_nid = pin_nid; 1938 1929 per_pin->pin_nid_idx = spec->num_nids; 1939 1930 per_pin->dev_id = i;
+2
sound/pci/hda/patch_realtek.c
··· 2624 2624 SND_PCI_QUIRK(0x1462, 0xda57, "MSI Z270-Gaming", ALC1220_FIXUP_GB_DUAL_CODECS), 2625 2625 SND_PCI_QUIRK_VENDOR(0x1462, "MSI", ALC882_FIXUP_GPIO3), 2626 2626 SND_PCI_QUIRK(0x147b, 0x107a, "Abit AW9D-MAX", ALC882_FIXUP_ABIT_AW9D_MAX), 2627 + SND_PCI_QUIRK(0x1558, 0x3702, "Clevo X370SN[VW]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2627 2628 SND_PCI_QUIRK(0x1558, 0x50d3, "Clevo PC50[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2628 2629 SND_PCI_QUIRK(0x1558, 0x65d1, "Clevo PB51[ER][CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), 2629 2630 SND_PCI_QUIRK(0x1558, 0x65d2, "Clevo PB51R[CDF]", ALC1220_FIXUP_CLEVO_PB51ED_PINS), ··· 9444 9443 SND_PCI_QUIRK(0x103c, 0x8b47, "HP", ALC245_FIXUP_CS35L41_SPI_2_HP_GPIO_LED), 9445 9444 SND_PCI_QUIRK(0x103c, 0x8b5d, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 9446 9445 SND_PCI_QUIRK(0x103c, 0x8b5e, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 9446 + SND_PCI_QUIRK(0x103c, 0x8b66, "HP", ALC236_FIXUP_HP_MUTE_LED_MICMUTE_VREF), 9447 9447 SND_PCI_QUIRK(0x103c, 0x8b7a, "HP", ALC236_FIXUP_HP_GPIO_LED), 9448 9448 SND_PCI_QUIRK(0x103c, 0x8b7d, "HP", ALC236_FIXUP_HP_GPIO_LED), 9449 9449 SND_PCI_QUIRK(0x103c, 0x8b87, "HP", ALC236_FIXUP_HP_GPIO_LED),
+7
sound/soc/amd/yc/acp6x-mach.c
··· 269 269 DMI_MATCH(DMI_BOARD_NAME, "8A43"), 270 270 } 271 271 }, 272 + { 273 + .driver_data = &acp6x_card, 274 + .matches = { 275 + DMI_MATCH(DMI_BOARD_VENDOR, "HP"), 276 + DMI_MATCH(DMI_BOARD_NAME, "8A22"), 277 + } 278 + }, 272 279 {} 273 280 }; 274 281
+6
sound/soc/codecs/da7213.c
··· 2022 2022 return ret; 2023 2023 } 2024 2024 2025 + static void da7213_i2c_remove(struct i2c_client *i2c) 2026 + { 2027 + pm_runtime_disable(&i2c->dev); 2028 + } 2029 + 2025 2030 static int __maybe_unused da7213_runtime_suspend(struct device *dev) 2026 2031 { 2027 2032 struct da7213_priv *da7213 = dev_get_drvdata(dev); ··· 2070 2065 .pm = &da7213_pm, 2071 2066 }, 2072 2067 .probe_new = da7213_i2c_probe, 2068 + .remove = da7213_i2c_remove, 2073 2069 .id_table = da7213_i2c_id, 2074 2070 }; 2075 2071
+11 -6
sound/soc/codecs/hdac_hdmi.c
··· 436 436 return 0; 437 437 } 438 438 439 - static int hdac_hdmi_set_tdm_slot(struct snd_soc_dai *dai, 440 - unsigned int tx_mask, unsigned int rx_mask, 441 - int slots, int slot_width) 439 + static int hdac_hdmi_set_stream(struct snd_soc_dai *dai, 440 + void *stream, int direction) 442 441 { 443 442 struct hdac_hdmi_priv *hdmi = snd_soc_dai_get_drvdata(dai); 444 443 struct hdac_device *hdev = hdmi->hdev; 445 444 struct hdac_hdmi_dai_port_map *dai_map; 446 445 struct hdac_hdmi_pcm *pcm; 446 + struct hdac_stream *hstream; 447 447 448 - dev_dbg(&hdev->dev, "%s: strm_tag: %d\n", __func__, tx_mask); 448 + if (!stream) 449 + return -EINVAL; 450 + 451 + hstream = (struct hdac_stream *)stream; 452 + 453 + dev_dbg(&hdev->dev, "%s: strm_tag: %d\n", __func__, hstream->stream_tag); 449 454 450 455 dai_map = &hdmi->dai_map[dai->id]; 451 456 452 457 pcm = hdac_hdmi_get_pcm_from_cvt(hdmi, dai_map->cvt); 453 458 454 459 if (pcm) 455 - pcm->stream_tag = (tx_mask << 4); 460 + pcm->stream_tag = (hstream->stream_tag << 4); 456 461 457 462 return 0; 458 463 } ··· 1549 1544 .startup = hdac_hdmi_pcm_open, 1550 1545 .shutdown = hdac_hdmi_pcm_close, 1551 1546 .hw_params = hdac_hdmi_set_hw_params, 1552 - .set_tdm_slot = hdac_hdmi_set_tdm_slot, 1547 + .set_stream = hdac_hdmi_set_stream, 1553 1548 }; 1554 1549 1555 1550 /*
+2 -2
sound/soc/codecs/lpass-rx-macro.c
··· 3670 3670 regcache_cache_only(rx->regmap, true); 3671 3671 regcache_mark_dirty(rx->regmap); 3672 3672 3673 - clk_disable_unprepare(rx->mclk); 3674 - clk_disable_unprepare(rx->npl); 3675 3673 clk_disable_unprepare(rx->fsgen); 3674 + clk_disable_unprepare(rx->npl); 3675 + clk_disable_unprepare(rx->mclk); 3676 3676 3677 3677 return 0; 3678 3678 }
+2 -2
sound/soc/codecs/lpass-tx-macro.c
··· 2098 2098 regcache_cache_only(tx->regmap, true); 2099 2099 regcache_mark_dirty(tx->regmap); 2100 2100 2101 - clk_disable_unprepare(tx->mclk); 2102 - clk_disable_unprepare(tx->npl); 2103 2101 clk_disable_unprepare(tx->fsgen); 2102 + clk_disable_unprepare(tx->npl); 2103 + clk_disable_unprepare(tx->mclk); 2104 2104 2105 2105 return 0; 2106 2106 }
+2 -2
sound/soc/codecs/lpass-wsa-macro.c
··· 2506 2506 regcache_cache_only(wsa->regmap, true); 2507 2507 regcache_mark_dirty(wsa->regmap); 2508 2508 2509 - clk_disable_unprepare(wsa->mclk); 2510 - clk_disable_unprepare(wsa->npl); 2511 2509 clk_disable_unprepare(wsa->fsgen); 2510 + clk_disable_unprepare(wsa->npl); 2511 + clk_disable_unprepare(wsa->mclk); 2512 2512 2513 2513 return 0; 2514 2514 }
+12
sound/soc/intel/boards/bytcr_rt5640.c
··· 533 533 534 534 /* Please keep this list alphabetically sorted */ 535 535 static const struct dmi_system_id byt_rt5640_quirk_table[] = { 536 + { /* Acer Iconia One 7 B1-750 */ 537 + .matches = { 538 + DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Insyde"), 539 + DMI_EXACT_MATCH(DMI_PRODUCT_NAME, "VESPA2"), 540 + }, 541 + .driver_data = (void *)(BYT_RT5640_DMIC1_MAP | 542 + BYT_RT5640_JD_SRC_JD1_IN4P | 543 + BYT_RT5640_OVCD_TH_1500UA | 544 + BYT_RT5640_OVCD_SF_0P75 | 545 + BYT_RT5640_SSP0_AIF1 | 546 + BYT_RT5640_MCLK_EN), 547 + }, 536 548 { /* Acer Iconia Tab 8 W1-810 */ 537 549 .matches = { 538 550 DMI_EXACT_MATCH(DMI_SYS_VENDOR, "Acer"),
+11
sound/soc/intel/boards/sof_sdw.c
··· 213 213 SOF_SDW_PCH_DMIC | 214 214 RT711_JD1), 215 215 }, 216 + { 217 + /* NUC15 'Rooks County' LAPRC510 and LAPRC710 skews */ 218 + .callback = sof_sdw_quirk_cb, 219 + .matches = { 220 + DMI_MATCH(DMI_SYS_VENDOR, "Intel(R) Client Systems"), 221 + DMI_MATCH(DMI_PRODUCT_NAME, "LAPRC"), 222 + }, 223 + .driver_data = (void *)(SOF_SDW_TGL_HDMI | 224 + SOF_SDW_PCH_DMIC | 225 + RT711_JD2_100K), 226 + }, 216 227 /* TigerLake-SDCA devices */ 217 228 { 218 229 .callback = sof_sdw_quirk_cb,
+20
sound/soc/intel/common/soc-acpi-intel-adl-match.c
··· 354 354 {} 355 355 }; 356 356 357 + static const struct snd_soc_acpi_link_adr adl_sdw_rt711_link0_rt1316_link2[] = { 358 + { 359 + .mask = BIT(0), 360 + .num_adr = ARRAY_SIZE(rt711_sdca_0_adr), 361 + .adr_d = rt711_sdca_0_adr, 362 + }, 363 + { 364 + .mask = BIT(2), 365 + .num_adr = ARRAY_SIZE(rt1316_2_single_adr), 366 + .adr_d = rt1316_2_single_adr, 367 + }, 368 + {} 369 + }; 370 + 357 371 static const struct snd_soc_acpi_adr_device mx8373_2_adr[] = { 358 372 { 359 373 .adr = 0x000223019F837300ull, ··· 637 623 .links = adl_sdw_rt711_link0_rt1316_link3, 638 624 .drv_name = "sof_sdw", 639 625 .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l3.tplg", 626 + }, 627 + { 628 + .link_mask = 0x5, /* 2 active links required */ 629 + .links = adl_sdw_rt711_link0_rt1316_link2, 630 + .drv_name = "sof_sdw", 631 + .sof_tplg_filename = "sof-adl-rt711-l0-rt1316-l2.tplg", 640 632 }, 641 633 { 642 634 .link_mask = 0x1, /* link0 required */
+4
sound/soc/soc-pcm.c
··· 1661 1661 struct snd_pcm_hardware *hw = &runtime->hw; 1662 1662 struct snd_soc_dai *dai; 1663 1663 int stream = substream->stream; 1664 + u64 formats = hw->formats; 1664 1665 int i; 1665 1666 1666 1667 soc_pcm_hw_init(hw); 1668 + 1669 + if (formats) 1670 + hw->formats &= formats; 1667 1671 1668 1672 for_each_rtd_cpu_dais(fe, i, dai) { 1669 1673 struct snd_soc_pcm_stream *cpu_stream;
+8
sound/soc/sof/ipc4-topology.c
··· 1805 1805 u32 header, extension; 1806 1806 int ret; 1807 1807 1808 + if (!src_fw_module || !sink_fw_module) { 1809 + /* The NULL module will print as "(efault)" */ 1810 + dev_err(sdev->dev, "source %s or sink %s widget weren't set up properly\n", 1811 + src_fw_module->man4_module_entry.name, 1812 + sink_fw_module->man4_module_entry.name); 1813 + return -ENODEV; 1814 + } 1815 + 1808 1816 sroute->src_queue_id = sof_ipc4_get_queue_id(src_widget, sink_widget, 1809 1817 SOF_PIN_TYPE_SOURCE); 1810 1818 if (sroute->src_queue_id < 0) {
+8
sound/soc/sof/ipc4.c
··· 405 405 static int sof_ipc4_set_get_data(struct snd_sof_dev *sdev, void *data, 406 406 size_t payload_bytes, bool set) 407 407 { 408 + const struct sof_dsp_power_state target_state = { 409 + .state = SOF_DSP_PM_D0, 410 + }; 408 411 size_t payload_limit = sdev->ipc->max_payload_size; 409 412 struct sof_ipc4_msg *ipc4_msg = data; 410 413 struct sof_ipc4_msg tx = {{ 0 }}; ··· 437 434 tx.extension |= SOF_IPC4_MOD_EXT_MSG_SIZE(payload_bytes); 438 435 439 436 tx.extension |= SOF_IPC4_MOD_EXT_MSG_FIRST_BLOCK(1); 437 + 438 + /* ensure the DSP is in D0i0 before sending IPC */ 439 + ret = snd_sof_dsp_set_power_state(sdev, &target_state); 440 + if (ret < 0) 441 + return ret; 440 442 441 443 /* Serialise IPC TX */ 442 444 mutex_lock(&sdev->ipc->tx_mutex);