From 1b669e8c96085d098439d6638033464774457d6f Mon Sep 17 00:00:00 2001 From: Mac Chiang Date: Tue, 23 Sep 2025 14:56:06 +0800 Subject: [PATCH 1/4] fixup! ASoC: Intel: sof_sdw: shift SSP BT mask bits. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The SSP BT mask bits overlapped with SOC_SDW_CODEC_SPKR, SOC_SDW_SIDECAR_AMPS, and SOC_SDW_CODEC_MIC BIT[15–17] in sdw_utils.h. Shift the SSP BT mask bits to a higher range to eliminate the conflict. Signed-off-by: Mac Chiang --- sound/soc/intel/boards/sof_sdw_common.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sound/soc/intel/boards/sof_sdw_common.h b/sound/soc/intel/boards/sof_sdw_common.h index 3aa1dcec5172ca..5390f0a749d6d3 100644 --- a/sound/soc/intel/boards/sof_sdw_common.h +++ b/sound/soc/intel/boards/sof_sdw_common.h @@ -46,11 +46,11 @@ enum { #define SOC_SDW_NO_AGGREGATION BIT(14) /* BT audio offload: reserve 3 bits for future */ -#define SOF_BT_OFFLOAD_SSP_SHIFT 15 -#define SOF_BT_OFFLOAD_SSP_MASK (GENMASK(17, 15)) +#define SOF_BT_OFFLOAD_SSP_SHIFT 18 +#define SOF_BT_OFFLOAD_SSP_MASK (GENMASK(20, 18)) #define SOF_BT_OFFLOAD_SSP(quirk) \ (((quirk) << SOF_BT_OFFLOAD_SSP_SHIFT) & SOF_BT_OFFLOAD_SSP_MASK) -#define SOF_SSP_BT_OFFLOAD_PRESENT BIT(18) +#define SOF_SSP_BT_OFFLOAD_PRESENT BIT(21) struct intel_mc_ctx { struct sof_hdmi_private hdmi; From c598773e176ae69e6d55282a4e9379a4bf05aa31 Mon Sep 17 00:00:00 2001 From: Mac Chiang Date: Thu, 28 Aug 2025 10:29:59 +0800 Subject: [PATCH 2/4] ASoC: Intel: soc-acpi-intel-ptl-match: Add support for rt722_l0_rt1320_l23 This patch adds support for the RT722 codec on SoundWire link 0, and RT1320 left and right amplifiers on links 2 and 3, respectively. Signed-off-by: Mac Chiang --- .../intel/common/soc-acpi-intel-ptl-match.c | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c index 3c8b10e21ceb83..a1dee6a37612d9 100644 --- a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c +++ b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c @@ -458,6 +458,15 @@ static const struct snd_soc_acpi_adr_device rt1320_2_group2_adr[] = { } }; +static const struct snd_soc_acpi_adr_device rt1320_2_group2_l_adr[] = { + { + .adr = 0x000230025D132001ull, + .num_endpoints = 1, + .endpoints = &spk_l_endpoint, + .name_prefix = "rt1320-1" + } +}; + static const struct snd_soc_acpi_adr_device rt1320_3_group2_adr[] = { { .adr = 0x000330025D132001ull, @@ -531,6 +540,25 @@ static const struct snd_soc_acpi_link_adr ptl_rt722_l3[] = { {} }; +static const struct snd_soc_acpi_link_adr ptl_rt722_l0_rt1320_l23[] = { + { + .mask = BIT(0), + .num_adr = ARRAY_SIZE(rt722_0_single_adr), + .adr_d = rt722_0_single_adr, + }, + { + .mask = BIT(2), + .num_adr = ARRAY_SIZE(rt1320_2_group2_l_adr), + .adr_d = rt1320_2_group2_l_adr, + }, + { + .mask = BIT(3), + .num_adr = ARRAY_SIZE(rt1320_3_group2_adr), + .adr_d = rt1320_3_group2_adr, + }, + {} +}; + static const struct snd_soc_acpi_link_adr ptl_rvp[] = { { .mask = BIT(0), @@ -669,6 +697,13 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_ptl_sdw_machines[] = { .drv_name = "sof_sdw", .sof_tplg_filename = "sof-ptl-cs42l43-l2-cs35l56x6-l13.tplg", }, + { + .link_mask = BIT(0) | BIT(2) | BIT(3), + .links = ptl_rt722_l0_rt1320_l23, + .drv_name = "sof_sdw", + .sof_tplg_filename = "sof-ptl-rt722-l0-rt1320-l23.tplg", + .get_function_tplg_files = sof_sdw_get_tplg_files, + }, { .link_mask = BIT(1) | BIT(2), .links = ptl_sdw_rt712_vb_l2_rt1320_l1, From 576e368efce13f2273e7d6fc8fd666ced68e7fd3 Mon Sep 17 00:00:00 2001 From: Mac Chiang Date: Fri, 29 Aug 2025 17:32:19 +0800 Subject: [PATCH 3/4] ASoC: Intel: sof_sdw: Add quirk to exclude RT722 speaker This SKU does not use the RT722 internal speaker. Add SOC_SDW_CODEC_SPKR to prevent DAI being created via codec_info_list.dais.quirk_exclude. Other SKUs continue to check higher-priority sdca_functions when the BIOS SDCA property is present. Signed-off-by: Mac Chiang --- sound/soc/intel/boards/sof_sdw.c | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c index 5edd0acd335c97..d7ec67ce184c67 100644 --- a/sound/soc/intel/boards/sof_sdw.c +++ b/sound/soc/intel/boards/sof_sdw.c @@ -776,6 +776,17 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = { }, .driver_data = (void *)(SOC_SDW_PCH_DMIC), }, + { + .callback = sof_sdw_quirk_cb, + .matches = { + DMI_MATCH(DMI_SYS_VENDOR, "Google"), + DMI_MATCH(DMI_PRODUCT_NAME, "Francka"), + }, + .driver_data = (void *)(SOC_SDW_CODEC_SPKR | + SOC_SDW_PCH_DMIC | + SOF_BT_OFFLOAD_SSP(2) | + SOF_SSP_BT_OFFLOAD_PRESENT), + }, { .callback = sof_sdw_quirk_cb, .matches = { From 00acb4ad3522408ddc5012bcb9d90aab28c42192 Mon Sep 17 00:00:00 2001 From: Mac Chiang Date: Thu, 18 Sep 2025 15:40:09 +0800 Subject: [PATCH 4/4] ASoC: Intel: sof_sdw: create SSP BT DAI if bt_link_mask sets This patch adds support for selecting the SSP DAI for Bluetooth offload based on the machine parameter `bt_link_mask` when provided and on ACE4 or newer Intel SoCs. This allows platform data to override which SSP port is used for BT offload topologies, typically named: sof_tplg_filename"-%dch"-ssp%d-bt.tplg Signed-off-by: Mac Chiang --- sound/soc/intel/boards/sof_sdw.c | 24 +++++++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c index d7ec67ce184c67..36cf7e51b72dfa 100644 --- a/sound/soc/intel/boards/sof_sdw.c +++ b/sound/soc/intel/boards/sof_sdw.c @@ -15,8 +15,10 @@ #include #include #include + #include "sof_sdw_common.h" #include "../../codecs/rt711.h" +#include "../../sof/intel/hda.h" static unsigned long sof_sdw_quirk = RT711_JD1; static int quirk_override = -1; @@ -1143,8 +1145,28 @@ 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) >> + struct snd_soc_acpi_mach *mach = dev_get_platdata(dev); + const struct sof_intel_dsp_desc *chip = get_chip_info(snd_soc_card_get_drvdata(card)); + int port; + + if (!mach || !chip) + return -EINVAL; + + port = (sof_sdw_quirk & SOF_BT_OFFLOAD_SSP_MASK) >> SOF_BT_OFFLOAD_SSP_SHIFT; + + /* Use the bt_link_mask from module parameters if provided + * and if the SoC hardware IP version is ACE4 or newer. + * This allows platform data to override which SSP is used + * for Bluetooth offload. + */ + if (mach->mach_params.bt_link_mask && + chip->hw_ip_version >= SOF_INTEL_ACE_4_0) { + port = __ffs(mach->mach_params.bt_link_mask); + dev_info(dev, "BT: using bt_link_mask override, SSP%d selected (ACE4+)\n", + port); + } + char *name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d-BT", port); char *cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL, "SSP%d Pin", port); if (!name || !cpu_dai_name)