From f78d96c289da743d517f700d3fe7c6c43df667b5 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Tue, 11 Nov 2025 20:37:35 +0800 Subject: [PATCH] ASoC: Intel: sof_sdw: create BT dai link if bt_link_mask is set The bt_link_mask value is from NHLT. The BT dai link should be created if bt_link_mask is set. Besides, hda_machine_select() will look for the topology with BT BE. Suggested-by: Mac Chiang Reviewed-by: Ranjani Sridharan Signed-off-by: Bard Liao Link: https://patch.msgid.link/20251111123737.246626-5-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown --- sound/soc/intel/boards/sof_sdw.c | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c index a7f39b83bef7a..cb57c5b3a2dc7 100644 --- a/sound/soc/intel/boards/sof_sdw.c +++ b/sound/soc/intel/boards/sof_sdw.c @@ -1138,15 +1138,22 @@ static int create_bt_dailinks(struct snd_soc_card *card, struct snd_soc_dai_link **dai_links, int *be_id) { struct device *dev = card->dev; - int port = (sof_sdw_quirk & SOF_BT_OFFLOAD_SSP_MASK) >> - SOF_BT_OFFLOAD_SSP_SHIFT; - char *name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); - char *cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port); + struct snd_soc_acpi_mach *mach = dev_get_platdata(dev); + char *cpu_dai_name; + char *name; + int port; + int ret; + + if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT) + port = (sof_sdw_quirk & SOF_BT_OFFLOAD_SSP_MASK) >> SOF_BT_OFFLOAD_SSP_SHIFT; + else + port = fls(mach->mach_params.bt_link_mask) - 1; + + name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); + cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port); if (!name || !cpu_dai_name) return -ENOMEM; - int ret; - ret = asoc_sdw_init_simple_dai_link(dev, *dai_links, be_id, name, 1, 1, cpu_dai_name, "dummy", snd_soc_dummy_dlc.name, snd_soc_dummy_dlc.dai_name, @@ -1243,7 +1250,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card) mach_params->dmic_num = DMIC_DEFAULT_CHANNELS; } - if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT) + if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT || mach_params->bt_link_mask) bt_num = 1; dev_dbg(dev, "DAI link numbers: sdw %d, ssp %d, dmic %d, hdmi %d, bt: %d\n", @@ -1298,7 +1305,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card) goto err_end; /* BT */ - if (sof_sdw_quirk & SOF_SSP_BT_OFFLOAD_PRESENT) { + if (bt_num) { ret = create_bt_dailinks(card, &dai_links, &be_id); if (ret) goto err_end; -- 2.47.3