]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: Intel: sof_sdw: create BT dai link if bt_link_mask is set
authorBard Liao <yung-chuan.liao@linux.intel.com>
Tue, 11 Nov 2025 12:37:35 +0000 (20:37 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 11 Nov 2025 12:41:12 +0000 (12:41 +0000)
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 <mac.chiang@intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://patch.msgid.link/20251111123737.246626-5-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/intel/boards/sof_sdw.c

index a7f39b83bef7ad0fdfd9c910813b5c76f43dc9c1..cb57c5b3a2dc76783e0ed0c8d3d541b2be282230 100644 (file)
@@ -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;