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.

ASoC: add support for some new Lenovo laptops with

Merge series from Bard Liao <yung-chuan.liao@linux.intel.com>:

Some SKUs are using host DMICs rather than the cs42l43 DMICs, update the
endpoint structure for these SKUs to remove the DMIC endpoint.

Charles Keepax (4):
ASoC: sdw_utils: Add support for exclusion DAI quirks
ASoC: sdw_utils: Add a quirk to allow the cs42l43 mic DAI to be
ignored
ASoC: Intel: sof_sdw: Add quirk for cs42l43 system using host DMICs
ASoC: Intel: sof_sdw: Add quirks for some new Lenovo laptops

include/sound/soc_sdw_utils.h | 2 ++
sound/soc/intel/boards/sof_sdw.c | 41 +++++++++++++++++++++++++++++
sound/soc/sdw_utils/soc_sdw_utils.c | 5 +++-
3 files changed, 47 insertions(+), 1 deletion(-)

--
2.43.0

+47 -1
+2
include/sound/soc_sdw_utils.h
··· 28 28 * - SOC_SDW_CODEC_SPKR | SOF_SIDECAR_AMPS - Not currently supported 29 29 */ 30 30 #define SOC_SDW_SIDECAR_AMPS BIT(16) 31 + #define SOC_SDW_CODEC_MIC BIT(17) 31 32 32 33 #define SOC_SDW_UNUSED_DAI_ID -1 33 34 #define SOC_SDW_JACK_OUT_DAI_ID 0 ··· 60 59 int (*rtd_init)(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai); 61 60 bool rtd_init_done; /* Indicate that the rtd_init callback is done */ 62 61 unsigned long quirk; 62 + bool quirk_exclude; 63 63 }; 64 64 65 65 struct asoc_sdw_codec_info {
+41
sound/soc/intel/boards/sof_sdw.c
··· 580 580 }, 581 581 .driver_data = (void *)(SOC_SDW_CODEC_SPKR), 582 582 }, 583 + { 584 + .callback = sof_sdw_quirk_cb, 585 + .matches = { 586 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 587 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "3838") 588 + }, 589 + .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS), 590 + }, 591 + { 592 + .callback = sof_sdw_quirk_cb, 593 + .matches = { 594 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 595 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "3832") 596 + }, 597 + .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS), 598 + }, 599 + { 600 + .callback = sof_sdw_quirk_cb, 601 + .matches = { 602 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 603 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "380E") 604 + }, 605 + .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS), 606 + }, 607 + { 608 + .callback = sof_sdw_quirk_cb, 609 + .matches = { 610 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 611 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "233C") 612 + }, 613 + /* Note this quirk excludes the CODEC mic */ 614 + .driver_data = (void *)(SOC_SDW_CODEC_MIC), 615 + }, 616 + { 617 + .callback = sof_sdw_quirk_cb, 618 + .matches = { 619 + DMI_MATCH(DMI_SYS_VENDOR, "LENOVO"), 620 + DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "233B") 621 + }, 622 + .driver_data = (void *)(SOC_SDW_SIDECAR_AMPS), 623 + }, 583 624 584 625 /* ArrowLake devices */ 585 626 {
+4 -1
sound/soc/sdw_utils/soc_sdw_utils.c
··· 528 528 .rtd_init = asoc_sdw_cs42l43_dmic_rtd_init, 529 529 .widgets = generic_dmic_widgets, 530 530 .num_widgets = ARRAY_SIZE(generic_dmic_widgets), 531 + .quirk = SOC_SDW_CODEC_MIC, 532 + .quirk_exclude = true, 531 533 }, 532 534 { 533 535 .direction = {false, true}, ··· 1155 1153 dai_info = &codec_info->dais[adr_end->num]; 1156 1154 soc_dai = asoc_sdw_find_dailink(soc_dais, adr_end); 1157 1155 1158 - if (dai_info->quirk && !(dai_info->quirk & ctx->mc_quirk)) 1156 + if (dai_info->quirk && 1157 + !(dai_info->quirk_exclude ^ !!(dai_info->quirk & ctx->mc_quirk))) 1159 1158 continue; 1160 1159 1161 1160 dev_dbg(dev,