alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5
@ 2024-04-26 15:21 Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 01/12] ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically Pierre-Louis Bossart
                   ` (12 more replies)
  0 siblings, 13 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound; +Cc: alsa-devel, tiwai, broonie, Pierre-Louis Bossart

This patchset corrects a couple of mistakes corrected, improves
snd_soc_card allocation.  The new functionality is mostly for
SoundWire platforms, with new SKUs for Dell and Acer, and support for
the Cirrus Logic bridge/sidecar amplifier topology.

Bard Liao (1):
  ASoC: Intel: sof_sdw: add a space before cfg-amp in components

Charles Keepax (2):
  ASoC: Intel: sof_sdw: Delay update of the codec_conf array
  ASoC: Intel: sof_sdw: Add callbacks to register sidecar devices

Mac Chiang (1):
  ASoC: Intel: soc-acpi-intel-lnl-match: adds RT714 and RT1318 support

Maciej Strozek (1):
  ASoC: intel: sof_sdw: Add support for cs42l43-cs35l56 sidecar amps

Peter Ujfalusi (3):
  ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically
  ASoC: Intel: skl_hda_dsp_generic: Use devm_kasprintf for the
    components string
  ASoC: Intel: sof_sdw: Allocate snd_soc_card dynamically

Pierre-Louis Bossart (4):
  ASoC: Intel: soc-acpi: mtl: add Dell SKU 0C64 and 0CC6
  ASoC: Intel: soc-acpi: mtl: add support for Acer Swift Go 14
  ASoC: Intel: sof-sdw: don't set card long_name
  ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk

 sound/soc/intel/boards/Kconfig                |   1 +
 sound/soc/intel/boards/Makefile               |   1 +
 sound/soc/intel/boards/bridge_cs35l56.c       | 137 ++++++++++++++++++
 sound/soc/intel/boards/skl_hda_dsp_common.h   |   1 +
 sound/soc/intel/boards/skl_hda_dsp_generic.c  |  50 +++----
 sound/soc/intel/boards/sof_sdw.c              | 106 ++++++++------
 sound/soc/intel/boards/sof_sdw_common.h       |  27 ++++
 sound/soc/intel/boards/sof_sdw_cs42l43.c      |  14 +-
 .../intel/common/soc-acpi-intel-lnl-match.c   |  52 +++++++
 .../intel/common/soc-acpi-intel-mtl-match.c   |  83 ++++++++++-
 10 files changed, 397 insertions(+), 75 deletions(-)
 create mode 100644 sound/soc/intel/boards/bridge_cs35l56.c

-- 
2.40.1


^ permalink raw reply	[flat|nested] 14+ messages in thread

* [PATCH 01/12] ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 02/12] ASoC: Intel: skl_hda_dsp_generic: Use devm_kasprintf for the components string Pierre-Louis Bossart
                   ` (11 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Peter Ujfalusi, Bard Liao,
	Ranjani Sridharan, Kai Vehmanen, Pierre-Louis Bossart

From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>

The static hda_soc_card might be modified during runtime which might cause
issues on next time when the card is created.
For example if the dmic_num was set with module parameter then removed for
the next module loading then the card's components will still going to
point to the previous boot's cfg-dmics:X string.

There might be other places where devm allocated memory have been freed but
the hda_soc_card still pointing to the now unallocated memory (the memory
is freed when the platform device is removed).

Fix this issue by moving the snd_soc_card into skl_hda_private and use it
for the card registration to ensure that it is correctly initialized every
time.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/skl_hda_dsp_common.h  |  1 +
 sound/soc/intel/boards/skl_hda_dsp_generic.c | 42 ++++++++++----------
 2 files changed, 22 insertions(+), 21 deletions(-)

diff --git a/sound/soc/intel/boards/skl_hda_dsp_common.h b/sound/soc/intel/boards/skl_hda_dsp_common.h
index 4b0b3959182e..19b814dee4ad 100644
--- a/sound/soc/intel/boards/skl_hda_dsp_common.h
+++ b/sound/soc/intel/boards/skl_hda_dsp_common.h
@@ -28,6 +28,7 @@ struct skl_hda_hdmi_pcm {
 };
 
 struct skl_hda_private {
+	struct snd_soc_card card;
 	struct list_head hdmi_pcm_list;
 	int pcm_count;
 	int dai_index;
diff --git a/sound/soc/intel/boards/skl_hda_dsp_generic.c b/sound/soc/intel/boards/skl_hda_dsp_generic.c
index 4aa7fd2a05e4..208395872d8b 100644
--- a/sound/soc/intel/boards/skl_hda_dsp_generic.c
+++ b/sound/soc/intel/boards/skl_hda_dsp_generic.c
@@ -92,17 +92,6 @@ skl_hda_add_dai_link(struct snd_soc_card *card, struct snd_soc_dai_link *link)
 	return ret;
 }
 
-static struct snd_soc_card hda_soc_card = {
-	.name = "hda-dsp",
-	.owner = THIS_MODULE,
-	.dai_link = skl_hda_be_dai_links,
-	.dapm_widgets = skl_hda_widgets,
-	.dapm_routes = skl_hda_map,
-	.add_dai_link = skl_hda_add_dai_link,
-	.fully_routed = true,
-	.late_probe = skl_hda_card_late_probe,
-};
-
 static char hda_soc_components[30];
 
 #define IDISP_DAI_COUNT		3
@@ -115,9 +104,9 @@ static char hda_soc_components[30];
 
 #define HDA_CODEC_AUTOSUSPEND_DELAY_MS 1000
 
-static int skl_hda_fill_card_info(struct snd_soc_acpi_mach_params *mach_params)
+static int skl_hda_fill_card_info(struct snd_soc_card *card,
+				  struct snd_soc_acpi_mach_params *mach_params)
 {
-	struct snd_soc_card *card = &hda_soc_card;
 	struct skl_hda_private *ctx = snd_soc_card_get_drvdata(card);
 	struct snd_soc_dai_link *dai_link;
 	u32 codec_count, codec_mask;
@@ -199,6 +188,7 @@ static int skl_hda_audio_probe(struct platform_device *pdev)
 {
 	struct snd_soc_acpi_mach *mach;
 	struct skl_hda_private *ctx;
+	struct snd_soc_card *card;
 	int ret;
 
 	dev_dbg(&pdev->dev, "entry\n");
@@ -213,32 +203,42 @@ static int skl_hda_audio_probe(struct platform_device *pdev)
 	if (!mach)
 		return -EINVAL;
 
-	snd_soc_card_set_drvdata(&hda_soc_card, ctx);
+	card = &ctx->card;
+	card->name = "hda-dsp",
+	card->owner = THIS_MODULE,
+	card->dai_link = skl_hda_be_dai_links,
+	card->dapm_widgets = skl_hda_widgets,
+	card->dapm_routes = skl_hda_map,
+	card->add_dai_link = skl_hda_add_dai_link,
+	card->fully_routed = true,
+	card->late_probe = skl_hda_card_late_probe,
 
-	ret = skl_hda_fill_card_info(&mach->mach_params);
+	snd_soc_card_set_drvdata(card, ctx);
+
+	ret = skl_hda_fill_card_info(card, &mach->mach_params);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "Unsupported HDAudio/iDisp configuration found\n");
 		return ret;
 	}
 
-	ctx->pcm_count = hda_soc_card.num_links;
+	ctx->pcm_count = card->num_links;
 	ctx->dai_index = 1; /* hdmi codec dai name starts from index 1 */
 	ctx->platform_name = mach->mach_params.platform;
 	ctx->common_hdmi_codec_drv = mach->mach_params.common_hdmi_codec_drv;
 
-	hda_soc_card.dev = &pdev->dev;
+	card->dev = &pdev->dev;
 	if (!snd_soc_acpi_sof_parent(&pdev->dev))
-		hda_soc_card.disable_route_checks = true;
+		card->disable_route_checks = true;
 
 	if (mach->mach_params.dmic_num > 0) {
 		snprintf(hda_soc_components, sizeof(hda_soc_components),
 				"cfg-dmics:%d", mach->mach_params.dmic_num);
-		hda_soc_card.components = hda_soc_components;
+		card->components = hda_soc_components;
 	}
 
-	ret = devm_snd_soc_register_card(&pdev->dev, &hda_soc_card);
+	ret = devm_snd_soc_register_card(&pdev->dev, card);
 	if (!ret)
-		skl_set_hda_codec_autosuspend_delay(&hda_soc_card);
+		skl_set_hda_codec_autosuspend_delay(card);
 
 	return ret;
 }
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 02/12] ASoC: Intel: skl_hda_dsp_generic: Use devm_kasprintf for the components string
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 01/12] ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 03/12] ASoC: Intel: soc-acpi: mtl: add Dell SKU 0C64 and 0CC6 Pierre-Louis Bossart
                   ` (10 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Peter Ujfalusi, Bard Liao,
	Ranjani Sridharan, Kai Vehmanen, Pierre-Louis Bossart

From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>

Instead of using a global char array, allocate the string with
devm_kasprintf if needed.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/skl_hda_dsp_generic.c | 10 +++++-----
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/sound/soc/intel/boards/skl_hda_dsp_generic.c b/sound/soc/intel/boards/skl_hda_dsp_generic.c
index 208395872d8b..88d91c0280bb 100644
--- a/sound/soc/intel/boards/skl_hda_dsp_generic.c
+++ b/sound/soc/intel/boards/skl_hda_dsp_generic.c
@@ -92,8 +92,6 @@ skl_hda_add_dai_link(struct snd_soc_card *card, struct snd_soc_dai_link *link)
 	return ret;
 }
 
-static char hda_soc_components[30];
-
 #define IDISP_DAI_COUNT		3
 #define HDAC_DAI_COUNT		2
 #define DMIC_DAI_COUNT		2
@@ -231,9 +229,11 @@ static int skl_hda_audio_probe(struct platform_device *pdev)
 		card->disable_route_checks = true;
 
 	if (mach->mach_params.dmic_num > 0) {
-		snprintf(hda_soc_components, sizeof(hda_soc_components),
-				"cfg-dmics:%d", mach->mach_params.dmic_num);
-		card->components = hda_soc_components;
+		card->components = devm_kasprintf(card->dev, GFP_KERNEL,
+						  "cfg-dmics:%d",
+						  mach->mach_params.dmic_num);
+		if (!card->components)
+			return -ENOMEM;
 	}
 
 	ret = devm_snd_soc_register_card(&pdev->dev, card);
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 03/12] ASoC: Intel: soc-acpi: mtl: add Dell SKU 0C64 and 0CC6
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 01/12] ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 02/12] ASoC: Intel: skl_hda_dsp_generic: Use devm_kasprintf for the components string Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 04/12] ASoC: Intel: soc-acpi: mtl: add support for Acer Swift Go 14 Pierre-Louis Bossart
                   ` (9 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound; +Cc: alsa-devel, tiwai, broonie, Pierre-Louis Bossart, Bard Liao

SKU 0C64 relies on rt713 (jack codec) on link0, rt1318 (single
amplifier) on link1 and rt1713 (dmic) on link3.

SKU 0CC6 relies on rt713 (jack codec) on link0, rt1318 (two
amplifiers) on link 1-2 and rt1713 (dmic) on link3.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 .../intel/common/soc-acpi-intel-mtl-match.c   | 64 +++++++++++++++++++
 1 file changed, 64 insertions(+)

diff --git a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
index f95490a16b55..8c1c430f5482 100644
--- a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
@@ -312,6 +312,15 @@ static const struct snd_soc_acpi_adr_device rt1316_3_single_adr[] = {
 	}
 };
 
+static const struct snd_soc_acpi_adr_device rt1318_1_single_adr[] = {
+	{
+		.adr = 0x000130025D131801,
+		.num_endpoints = 1,
+		.endpoints = &single_endpoint,
+		.name_prefix = "rt1318"
+	}
+};
+
 static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
 	{
 		.adr = 0x000130025D131801ull,
@@ -559,6 +568,49 @@ static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12_rt1713_l3[] =
 	{}
 };
 
+static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l1_rt1713_l3[] = {
+	{
+		.mask = BIT(0),
+		.num_adr = ARRAY_SIZE(rt713_0_single_adr),
+		.adr_d = rt713_0_single_adr,
+	},
+	{
+		.mask = BIT(1),
+		.num_adr = ARRAY_SIZE(rt1318_1_single_adr),
+		.adr_d = rt1318_1_single_adr,
+	},
+	{
+		.mask = BIT(3),
+		.num_adr = ARRAY_SIZE(rt1713_3_single_adr),
+		.adr_d = rt1713_3_single_adr,
+	},
+	{}
+};
+
+static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1318_l12_rt1713_l3[] = {
+	{
+		.mask = BIT(0),
+		.num_adr = ARRAY_SIZE(rt713_0_single_adr),
+		.adr_d = rt713_0_single_adr,
+	},
+	{
+		.mask = BIT(1),
+		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
+		.adr_d = rt1318_1_group1_adr,
+	},
+	{
+		.mask = BIT(2),
+		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
+		.adr_d = rt1318_2_group1_adr,
+	},
+	{
+		.mask = BIT(3),
+		.num_adr = ARRAY_SIZE(rt1713_3_single_adr),
+		.adr_d = rt1713_3_single_adr,
+	},
+	{}
+};
+
 static const struct snd_soc_acpi_link_adr mtl_rt713_l0_rt1316_l12[] = {
 	{
 		.mask = BIT(0),
@@ -697,6 +749,18 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {
 		.drv_name = "sof_sdw",
 		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1316-l12-rt1713-l3.tplg",
 	},
+	{
+		.link_mask = GENMASK(3, 0),
+		.links = mtl_rt713_l0_rt1318_l12_rt1713_l3,
+		.drv_name = "sof_sdw",
+		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l12-rt1713-l3.tplg",
+	},
+	{
+		.link_mask = BIT(0) | BIT(1) | BIT(3),
+		.links = mtl_rt713_l0_rt1318_l1_rt1713_l3,
+		.drv_name = "sof_sdw",
+		.sof_tplg_filename = "sof-mtl-rt713-l0-rt1318-l1-rt1713-l3.tplg",
+	},
 	{
 		.link_mask = GENMASK(2, 0),
 		.links = mtl_rt713_l0_rt1316_l12,
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 04/12] ASoC: Intel: soc-acpi: mtl: add support for Acer Swift Go 14
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (2 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 03/12] ASoC: Intel: soc-acpi: mtl: add Dell SKU 0C64 and 0CC6 Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 05/12] ASoC: Intel: soc-acpi-intel-lnl-match: adds RT714 and RT1318 support Pierre-Louis Bossart
                   ` (8 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Pierre-Louis Bossart, Bard Liao,
	Péter Ujfalusi

This device has an RT712 on link0, but does not rely on RT1712 for the
DMIC. PCH-attached DMICs are used instead.

Closes: https://github.com/thesofproject/linux/issues/4923
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 .../intel/common/soc-acpi-intel-mtl-match.c   | 19 +++++++++++++++++--
 1 file changed, 17 insertions(+), 2 deletions(-)

diff --git a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
index 8c1c430f5482..4eeec0bc92dc 100644
--- a/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-mtl-match.c
@@ -357,7 +357,7 @@ static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {
 	}
 };
 
-static const struct snd_soc_acpi_link_adr mtl_712_only[] = {
+static const struct snd_soc_acpi_link_adr mtl_712_l0_1712_l3[] = {
 	{
 		.mask = BIT(0),
 		.num_adr = ARRAY_SIZE(rt712_0_single_adr),
@@ -371,6 +371,15 @@ static const struct snd_soc_acpi_link_adr mtl_712_only[] = {
 	{}
 };
 
+static const struct snd_soc_acpi_link_adr mtl_712_l0[] = {
+	{
+		.mask = BIT(0),
+		.num_adr = ARRAY_SIZE(rt712_0_single_adr),
+		.adr_d = rt712_0_single_adr,
+	},
+	{}
+};
+
 static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
 	{ /* Jack Playback Endpoint */
 		.num = 0,
@@ -769,10 +778,16 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_mtl_sdw_machines[] = {
 	},
 	{
 		.link_mask = BIT(3) | BIT(0),
-		.links = mtl_712_only,
+		.links = mtl_712_l0_1712_l3,
 		.drv_name = "sof_sdw",
 		.sof_tplg_filename = "sof-mtl-rt712-l0-rt1712-l3.tplg",
 	},
+	{
+		.link_mask = BIT(0),
+		.links = mtl_712_l0,
+		.drv_name = "sof_sdw",
+		.sof_tplg_filename = "sof-mtl-rt712-l0.tplg",
+	},
 	{
 		.link_mask = GENMASK(2, 0),
 		.links = mtl_sdw_rt1318_l12_rt714_l0,
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 05/12] ASoC: Intel: soc-acpi-intel-lnl-match: adds RT714 and RT1318 support
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (3 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 04/12] ASoC: Intel: soc-acpi: mtl: add support for Acer Swift Go 14 Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 06/12] ASoC: Intel: sof_sdw: Allocate snd_soc_card dynamically Pierre-Louis Bossart
                   ` (7 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Mac Chiang, Bard Liao,
	Péter Ujfalusi, Pierre-Louis Bossart

From: Mac Chiang <mac.chiang@intel.com>

This patch adds support for corresponding codecs on LNL hardware
configuration:

SDW0: RT714 DMIC
SDW1: RT1318 Left Speaker
SDW2: RT1318 Right Speaker

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Mac Chiang <mac.chiang@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 .../intel/common/soc-acpi-intel-lnl-match.c   | 52 +++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/sound/soc/intel/common/soc-acpi-intel-lnl-match.c b/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
index 74d6dcd7471f..0318c1a46f3c 100644
--- a/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-lnl-match.c
@@ -130,6 +130,33 @@ static const struct snd_soc_acpi_adr_device rt1316_3_group1_adr[] = {
 	}
 };
 
+static const struct snd_soc_acpi_adr_device rt1318_1_group1_adr[] = {
+	{
+		.adr = 0x000130025D131801ull,
+		.num_endpoints = 1,
+		.endpoints = &spk_l_endpoint,
+		.name_prefix = "rt1318-1"
+	}
+};
+
+static const struct snd_soc_acpi_adr_device rt1318_2_group1_adr[] = {
+	{
+		.adr = 0x000232025D131801ull,
+		.num_endpoints = 1,
+		.endpoints = &spk_r_endpoint,
+		.name_prefix = "rt1318-2"
+	}
+};
+
+static const struct snd_soc_acpi_adr_device rt714_0_adr[] = {
+	{
+		.adr = 0x000030025D071401ull,
+		.num_endpoints = 1,
+		.endpoints = &single_endpoint,
+		.name_prefix = "rt714"
+	}
+};
+
 static const struct snd_soc_acpi_adr_device rt714_1_adr[] = {
 	{
 		.adr = 0x000130025D071401ull,
@@ -195,6 +222,25 @@ static const struct snd_soc_acpi_link_adr lnl_3_in_1_sdca[] = {
 	{}
 };
 
+static const struct snd_soc_acpi_link_adr lnl_sdw_rt1318_l12_rt714_l0[] = {
+	{
+		.mask = BIT(1),
+		.num_adr = ARRAY_SIZE(rt1318_1_group1_adr),
+		.adr_d = rt1318_1_group1_adr,
+	},
+	{
+		.mask = BIT(2),
+		.num_adr = ARRAY_SIZE(rt1318_2_group1_adr),
+		.adr_d = rt1318_2_group1_adr,
+	},
+	{
+		.mask = BIT(0),
+		.num_adr = ARRAY_SIZE(rt714_0_adr),
+		.adr_d = rt714_0_adr,
+	},
+	{}
+};
+
 /* this table is used when there is no I2S codec present */
 struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_sdw_machines[] = {
 	/* mockup tests need to be first */
@@ -240,6 +286,12 @@ struct snd_soc_acpi_mach snd_soc_acpi_intel_lnl_sdw_machines[] = {
 		.drv_name = "sof_sdw",
 		.sof_tplg_filename = "sof-lnl-rt722-l0.tplg",
 	},
+	{
+		.link_mask = GENMASK(2, 0),
+		.links = lnl_sdw_rt1318_l12_rt714_l0,
+		.drv_name = "sof_sdw",
+		.sof_tplg_filename = "sof-lnl-rt1318-l12-rt714-l0.tplg"
+	},
 	{},
 };
 EXPORT_SYMBOL_GPL(snd_soc_acpi_intel_lnl_sdw_machines);
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 06/12] ASoC: Intel: sof_sdw: Allocate snd_soc_card dynamically
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (4 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 05/12] ASoC: Intel: soc-acpi-intel-lnl-match: adds RT714 and RT1318 support Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 07/12] ASoC: Intel: sof-sdw: don't set card long_name Pierre-Louis Bossart
                   ` (6 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Peter Ujfalusi, Bard Liao,
	Ranjani Sridharan, Kai Vehmanen, Pierre-Louis Bossart

From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>

The static card_sof_sdw struct is modified during runtime and in case the
module is not removed, but the card is, then the next time the card is
created the card_sof_sdw will contain information from the previous card
which might lead to hard to debug issues, side effects.

Move the snd_soc_card into mc_private and use that to make sure that the
card is initialized correctly.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/sof_sdw.c        | 20 +++++++++-----------
 sound/soc/intel/boards/sof_sdw_common.h |  1 +
 2 files changed, 10 insertions(+), 11 deletions(-)

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index d65c5da49000..384c3d41a9ad 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -1882,12 +1882,6 @@ static int sof_sdw_card_late_probe(struct snd_soc_card *card)
 /* SoC card */
 static const char sdw_card_long_name[] = "Intel Soundwire SOF";
 
-static struct snd_soc_card card_sof_sdw = {
-	.name = "soundwire",
-	.owner = THIS_MODULE,
-	.late_probe = sof_sdw_card_late_probe,
-};
-
 /* helper to get the link that the codec DAI is used */
 static struct snd_soc_dai_link *mc_find_codec_dai_used(struct snd_soc_card *card,
 						       const char *dai_name)
@@ -1939,20 +1933,24 @@ static void mc_dailink_exit_loop(struct snd_soc_card *card)
 
 static int mc_probe(struct platform_device *pdev)
 {
-	struct snd_soc_card *card = &card_sof_sdw;
 	struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
+	struct snd_soc_card *card;
 	struct mc_private *ctx;
 	int amp_num = 0, i;
 	int ret;
 
-	card->dev = &pdev->dev;
+	dev_dbg(&pdev->dev, "Entry\n");
 
-	dev_dbg(card->dev, "Entry\n");
-
-	ctx = devm_kzalloc(card->dev, sizeof(*ctx), GFP_KERNEL);
+	ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
 	if (!ctx)
 		return -ENOMEM;
 
+	card = &ctx->card;
+	card->dev = &pdev->dev;
+	card->name = "soundwire",
+	card->owner = THIS_MODULE,
+	card->late_probe = sof_sdw_card_late_probe,
+
 	snd_soc_card_set_drvdata(card, ctx);
 
 	dmi_check_system(sof_sdw_quirk_table);
diff --git a/sound/soc/intel/boards/sof_sdw_common.h b/sound/soc/intel/boards/sof_sdw_common.h
index 89253938ebaa..853278c6e525 100644
--- a/sound/soc/intel/boards/sof_sdw_common.h
+++ b/sound/soc/intel/boards/sof_sdw_common.h
@@ -101,6 +101,7 @@ struct sof_sdw_codec_info {
 };
 
 struct mc_private {
+	struct snd_soc_card card;
 	struct snd_soc_jack sdw_headset;
 	struct sof_hdmi_private hdmi;
 	struct device *headset_codec_dev; /* only one headset per card */
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 07/12] ASoC: Intel: sof-sdw: don't set card long_name
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (5 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 06/12] ASoC: Intel: sof_sdw: Allocate snd_soc_card dynamically Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 08/12] ASoC: Intel: sof_sdw: add a space before cfg-amp in components Pierre-Louis Bossart
                   ` (5 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Pierre-Louis Bossart,
	Ranjani Sridharan, Péter Ujfalusi, Bard Liao

UCM can load a board-specific file based on the card long_name. Remove
the constant "Intel Soundwire SOF" long_name so that the ASoC core can
set the long_name based on DMI information.

Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/sof_sdw.c | 5 -----
 1 file changed, 5 deletions(-)

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index 384c3d41a9ad..b9a5fcb42847 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -1879,9 +1879,6 @@ static int sof_sdw_card_late_probe(struct snd_soc_card *card)
 	return ret;
 }
 
-/* SoC card */
-static const char sdw_card_long_name[] = "Intel Soundwire SOF";
-
 /* helper to get the link that the codec DAI is used */
 static struct snd_soc_dai_link *mc_find_codec_dai_used(struct snd_soc_card *card,
 						       const char *dai_name)
@@ -1999,8 +1996,6 @@ static int mc_probe(struct platform_device *pdev)
 			return -ENOMEM;
 	}
 
-	card->long_name = sdw_card_long_name;
-
 	/* Register the card */
 	ret = devm_snd_soc_register_card(card->dev, card);
 	if (ret) {
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 08/12] ASoC: Intel: sof_sdw: add a space before cfg-amp in components
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (6 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 07/12] ASoC: Intel: sof-sdw: don't set card long_name Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 09/12] ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk Pierre-Louis Bossart
                   ` (4 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound; +Cc: alsa-devel, tiwai, broonie, Bard Liao, Pierre-Louis Bossart

From: Bard Liao <yung-chuan.liao@linux.intel.com>

UCM parse amp with Regex " cfg-amp:([0-9]+)". The "ASoC: Intel: sof_sdw:
remove FOUR_SPEAKER quirks" patch removed "cfg-spk:%d " from components
which removed the necessary space as well and cause UCM can't parse the
amp number properly.

Fixes: 744866d28fe6 ("ASoC: Intel: sof_sdw: remove FOUR_SPEAKER quirks")
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/sof_sdw.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index b9a5fcb42847..f0622aa1b748 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -1983,7 +1983,7 @@ static int mc_probe(struct platform_device *pdev)
 		amp_num += codec_info_list[i].amp_num;
 
 	card->components = devm_kasprintf(card->dev, GFP_KERNEL,
-					  "cfg-amp:%d", amp_num);
+					  " cfg-amp:%d", amp_num);
 	if (!card->components)
 		return -ENOMEM;
 
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 09/12] ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (7 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 08/12] ASoC: Intel: sof_sdw: add a space before cfg-amp in components Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 10/12] ASoC: Intel: sof_sdw: Delay update of the codec_conf array Pierre-Louis Bossart
                   ` (3 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound; +Cc: alsa-devel, tiwai, broonie, Pierre-Louis Bossart, Bard Liao

Two independent GitHub PRs let to the addition of one quirk after it
was removed..

Fixes: b10cb955c6c0 ("ASoC: Intel: sof_sdw: add quirk for Dell SKU 0C0F")
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/sof_sdw.c | 3 +--
 1 file changed, 1 insertion(+), 2 deletions(-)

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index f0622aa1b748..86bbf1c66ce8 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -421,8 +421,7 @@ static const struct dmi_system_id sof_sdw_quirk_table[] = {
 			DMI_EXACT_MATCH(DMI_PRODUCT_SKU, "0C0F")
 		},
 		.driver_data = (void *)(SOF_SDW_TGL_HDMI |
-					RT711_JD2 |
-					SOF_SDW_FOUR_SPK),
+					RT711_JD2),
 	},
 	{
 		.callback = sof_sdw_quirk_cb,
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 10/12] ASoC: Intel: sof_sdw: Delay update of the codec_conf array
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (8 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 09/12] ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 11/12] ASoC: Intel: sof_sdw: Add callbacks to register sidecar devices Pierre-Louis Bossart
                   ` (2 subsequent siblings)
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Charles Keepax, Bard Liao,
	Pierre-Louis Bossart

From: Charles Keepax <ckeepax@opensource.cirrus.com>

Move the population of the codec_conf array from endpoint parsing
time to link creation time. This is slightly cleaner as the
population is done whilst the DAI links are also being populated,
putting all population together. However, primarily this facilitates
allowing additional non-SoundWire devices to be easily added into
the array in future feature additions.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/sof_sdw.c | 48 ++++++++++++++++++--------------
 1 file changed, 27 insertions(+), 21 deletions(-)

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index 86bbf1c66ce8..bf5f46a4c4aa 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -1279,6 +1279,7 @@ struct sof_sdw_endpoint {
 
 	u32 link_mask;
 	const char *codec_name;
+	const char *name_prefix;
 
 	struct sof_sdw_codec_info *codec_info;
 	const struct sof_sdw_dai_info *dai_info;
@@ -1340,7 +1341,6 @@ static int parse_sdw_endpoints(struct snd_soc_card *card,
 	struct mc_private *ctx = snd_soc_card_get_drvdata(card);
 	struct snd_soc_acpi_mach *mach = dev_get_platdata(dev);
 	struct snd_soc_acpi_mach_params *mach_params = &mach->mach_params;
-	struct snd_soc_codec_conf *codec_conf = card->codec_conf;
 	const struct snd_soc_acpi_link_adr *adr_link;
 	struct sof_sdw_endpoint *sof_end = sof_ends;
 	int num_dais = 0;
@@ -1376,13 +1376,11 @@ static int parse_sdw_endpoints(struct snd_soc_card *card,
 			if (!codec_name)
 				return -ENOMEM;
 
-			codec_conf->dlc.name = codec_name;
-			codec_conf->name_prefix = adr_dev->name_prefix;
-			codec_conf++;
-
 			dev_dbg(dev, "Adding prefix %s for %s\n",
 				adr_dev->name_prefix, codec_name);
 
+			sof_end->name_prefix = adr_dev->name_prefix;
+
 			for (j = 0; j < adr_dev->num_endpoints; j++) {
 				const struct snd_soc_acpi_endpoint *adr_end;
 				const struct sof_sdw_dai_info *dai_info;
@@ -1443,21 +1441,27 @@ static int parse_sdw_endpoints(struct snd_soc_card *card,
 		ctx->append_dai_type |= (num_link_dailinks > 1);
 	}
 
-	WARN_ON(codec_conf != card->codec_conf + card->num_configs);
-
 	return num_dais;
 }
 
 static int create_sdw_dailink(struct snd_soc_card *card,
 			      struct sof_sdw_dailink *sof_dai,
 			      struct snd_soc_dai_link **dai_links,
-			      int *be_id)
+			      int *be_id, struct snd_soc_codec_conf **codec_conf)
 {
 	struct device *dev = card->dev;
 	struct mc_private *ctx = snd_soc_card_get_drvdata(card);
 	struct sof_sdw_endpoint *sof_end;
 	int stream;
 
+	list_for_each_entry(sof_end, &sof_dai->endpoints, list) {
+		if (sof_end->name_prefix) {
+			(*codec_conf)->dlc.name = sof_end->codec_name;
+			(*codec_conf)->name_prefix = sof_end->name_prefix;
+			(*codec_conf)++;
+		}
+	}
+
 	for_each_pcm_streams(stream) {
 		static const char * const sdw_stream_name[] = {
 			"SDW%d-Playback",
@@ -1569,7 +1573,8 @@ static int create_sdw_dailink(struct snd_soc_card *card,
 
 static int create_sdw_dailinks(struct snd_soc_card *card,
 			       struct snd_soc_dai_link **dai_links, int *be_id,
-			       struct sof_sdw_dailink *sof_dais)
+			       struct sof_sdw_dailink *sof_dais,
+			       struct snd_soc_codec_conf **codec_conf)
 {
 	struct mc_private *ctx = snd_soc_card_get_drvdata(card);
 	int ret, i;
@@ -1581,7 +1586,8 @@ static int create_sdw_dailinks(struct snd_soc_card *card,
 	while (sof_dais->initialised) {
 		int current_be_id;
 
-		ret = create_sdw_dailink(card, sof_dais, dai_links, &current_be_id);
+		ret = create_sdw_dailink(card, sof_dais, dai_links,
+					 &current_be_id, codec_conf);
 		if (ret)
 			return ret;
 
@@ -1751,16 +1757,6 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 		goto err_dai;
 	}
 
-	/* will be populated when acpi endpoints are parsed */
-	codec_conf = devm_kcalloc(dev, num_devs, sizeof(*codec_conf), GFP_KERNEL);
-	if (!codec_conf) {
-		ret = -ENOMEM;
-		goto err_end;
-	}
-
-	card->codec_conf = codec_conf;
-	card->num_configs = num_devs;
-
 	ret = parse_sdw_endpoints(card, sof_dais, sof_ends);
 	if (ret < 0)
 		goto err_end;
@@ -1798,6 +1794,12 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 		sdw_be_num, ssp_num, dmic_num,
 		ctx->hdmi.idisp_codec ? hdmi_num : 0, bt_num);
 
+	codec_conf = devm_kcalloc(dev, num_devs, sizeof(*codec_conf), GFP_KERNEL);
+	if (!codec_conf) {
+		ret = -ENOMEM;
+		goto err_end;
+	}
+
 	/* allocate BE dailinks */
 	num_links = sdw_be_num + ssp_num + dmic_num + hdmi_num + bt_num;
 	dai_links = devm_kcalloc(dev, num_links, sizeof(*dai_links), GFP_KERNEL);
@@ -1806,12 +1808,15 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 		goto err_end;
 	}
 
+	card->codec_conf = codec_conf;
+	card->num_configs = num_devs;
 	card->dai_link = dai_links;
 	card->num_links = num_links;
 
 	/* SDW */
 	if (sdw_be_num) {
-		ret = create_sdw_dailinks(card, &dai_links, &be_id, sof_dais);
+		ret = create_sdw_dailinks(card, &dai_links, &be_id,
+					  sof_dais, &codec_conf);
 		if (ret)
 			goto err_end;
 	}
@@ -1847,6 +1852,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 			goto err_end;
 	}
 
+	WARN_ON(codec_conf != card->codec_conf + card->num_configs);
 	WARN_ON(dai_links != card->dai_link + card->num_links);
 
 err_end:
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 11/12] ASoC: Intel: sof_sdw: Add callbacks to register sidecar devices
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (9 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 10/12] ASoC: Intel: sof_sdw: Delay update of the codec_conf array Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-04-26 15:21 ` [PATCH 12/12] ASoC: intel: sof_sdw: Add support for cs42l43-cs35l56 sidecar amps Pierre-Louis Bossart
  2024-05-01 13:43 ` [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Mark Brown
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Charles Keepax, Bard Liao,
	Pierre-Louis Bossart

From: Charles Keepax <ckeepax@opensource.cirrus.com>

Add support for systems that have additional non-SoundWire devices
(sidecars) connected to one of the SoundWire devices in the
system. This is done through the addition of two callbacks, one used
at endpoint parsing time that will return the number of devices and
DAI links to be added, and another called later as the DAI links are
created that will populate those devices into the appropriate arrays.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/sof_sdw.c        | 22 ++++++++++++++++++++--
 sound/soc/intel/boards/sof_sdw_common.h |  6 ++++++
 2 files changed, 26 insertions(+), 2 deletions(-)

diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index bf5f46a4c4aa..eaa79e29f5c2 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -1280,6 +1280,7 @@ struct sof_sdw_endpoint {
 	u32 link_mask;
 	const char *codec_name;
 	const char *name_prefix;
+	bool include_sidecar;
 
 	struct sof_sdw_codec_info *codec_info;
 	const struct sof_sdw_dai_info *dai_info;
@@ -1335,7 +1336,8 @@ static struct sof_sdw_dailink *find_dailink(struct sof_sdw_dailink *dailinks,
 
 static int parse_sdw_endpoints(struct snd_soc_card *card,
 			       struct sof_sdw_dailink *sof_dais,
-			       struct sof_sdw_endpoint *sof_ends)
+			       struct sof_sdw_endpoint *sof_ends,
+			       int *num_devs)
 {
 	struct device *dev = card->dev;
 	struct mc_private *ctx = snd_soc_card_get_drvdata(card);
@@ -1345,6 +1347,7 @@ static int parse_sdw_endpoints(struct snd_soc_card *card,
 	struct sof_sdw_endpoint *sof_end = sof_ends;
 	int num_dais = 0;
 	int i, j;
+	int ret;
 
 	for (adr_link = mach_params->links; adr_link->num_adr; adr_link++) {
 		int num_link_dailinks = 0;
@@ -1381,6 +1384,14 @@ static int parse_sdw_endpoints(struct snd_soc_card *card,
 
 			sof_end->name_prefix = adr_dev->name_prefix;
 
+			if (codec_info->count_sidecar && codec_info->add_sidecar) {
+				ret = codec_info->count_sidecar(card, &num_dais, num_devs);
+				if (ret)
+					return ret;
+
+				sof_end->include_sidecar = true;
+			}
+
 			for (j = 0; j < adr_dev->num_endpoints; j++) {
 				const struct snd_soc_acpi_endpoint *adr_end;
 				const struct sof_sdw_dai_info *dai_info;
@@ -1453,6 +1464,7 @@ static int create_sdw_dailink(struct snd_soc_card *card,
 	struct mc_private *ctx = snd_soc_card_get_drvdata(card);
 	struct sof_sdw_endpoint *sof_end;
 	int stream;
+	int ret;
 
 	list_for_each_entry(sof_end, &sof_dai->endpoints, list) {
 		if (sof_end->name_prefix) {
@@ -1460,6 +1472,12 @@ static int create_sdw_dailink(struct snd_soc_card *card,
 			(*codec_conf)->name_prefix = sof_end->name_prefix;
 			(*codec_conf)++;
 		}
+
+		if (sof_end->include_sidecar) {
+			ret = sof_end->codec_info->add_sidecar(card, dai_links, codec_conf);
+			if (ret)
+				return ret;
+		}
 	}
 
 	for_each_pcm_streams(stream) {
@@ -1757,7 +1775,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 		goto err_dai;
 	}
 
-	ret = parse_sdw_endpoints(card, sof_dais, sof_ends);
+	ret = parse_sdw_endpoints(card, sof_dais, sof_ends, &num_devs);
 	if (ret < 0)
 		goto err_end;
 
diff --git a/sound/soc/intel/boards/sof_sdw_common.h b/sound/soc/intel/boards/sof_sdw_common.h
index 853278c6e525..9dd42a8da8d7 100644
--- a/sound/soc/intel/boards/sof_sdw_common.h
+++ b/sound/soc/intel/boards/sof_sdw_common.h
@@ -98,6 +98,12 @@ struct sof_sdw_codec_info {
 	const int dai_num;
 
 	int (*codec_card_late_probe)(struct snd_soc_card *card);
+
+	int  (*count_sidecar)(struct snd_soc_card *card,
+			      int *num_dais, int *num_devs);
+	int  (*add_sidecar)(struct snd_soc_card *card,
+			    struct snd_soc_dai_link **dai_links,
+			    struct snd_soc_codec_conf **codec_conf);
 };
 
 struct mc_private {
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* [PATCH 12/12] ASoC: intel: sof_sdw: Add support for cs42l43-cs35l56 sidecar amps
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (10 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 11/12] ASoC: Intel: sof_sdw: Add callbacks to register sidecar devices Pierre-Louis Bossart
@ 2024-04-26 15:21 ` Pierre-Louis Bossart
  2024-05-01 13:43 ` [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Mark Brown
  12 siblings, 0 replies; 14+ messages in thread
From: Pierre-Louis Bossart @ 2024-04-26 15:21 UTC (permalink / raw)
  To: linux-sound
  Cc: alsa-devel, tiwai, broonie, Maciej Strozek, Bard Liao,
	Charles Keepax, Pierre-Louis Bossart

From: Maciej Strozek <mstrozek@opensource.cirrus.com>

The cs42l43 has both a SPI master and an I2S interface, these can
be used to populate 2 cs35l56 amplifiers as sidecar devices along
side the cs42l43. Giving a system that looks like:

  +-----+           +---------+ <- SPI -> +---------+
  | CPU | <- SDW -> | CS42L43 |           | CS35L56 |
  +-----+           +---------+ <- I2S -> +---------+

Add a quirk to specify this feature is present and use it to add
codec to codec DAI link to connect the amplifiers into the sound
card, add appropriate widgets, and setup clocking on the
amplifiers.

Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>
Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
---
 sound/soc/intel/boards/Kconfig           |   1 +
 sound/soc/intel/boards/Makefile          |   1 +
 sound/soc/intel/boards/bridge_cs35l56.c  | 137 +++++++++++++++++++++++
 sound/soc/intel/boards/sof_sdw.c         |   6 +-
 sound/soc/intel/boards/sof_sdw_common.h  |  20 ++++
 sound/soc/intel/boards/sof_sdw_cs42l43.c |  14 ++-
 6 files changed, 173 insertions(+), 6 deletions(-)
 create mode 100644 sound/soc/intel/boards/bridge_cs35l56.c

diff --git a/sound/soc/intel/boards/Kconfig b/sound/soc/intel/boards/Kconfig
index 0ad7b0a1e237..b122b8aedd9a 100644
--- a/sound/soc/intel/boards/Kconfig
+++ b/sound/soc/intel/boards/Kconfig
@@ -690,6 +690,7 @@ config SND_SOC_INTEL_SOUNDWIRE_SOF_MACH
 	select SND_SOC_CS42L43_SDW
 	select MFD_CS42L43
 	select MFD_CS42L43_SDW
+	select SND_SOC_CS35L56_SPI
 	select SND_SOC_CS35L56_SDW
 	select SND_SOC_DMIC
 	select SND_SOC_INTEL_HDA_DSP_COMMON
diff --git a/sound/soc/intel/boards/Makefile b/sound/soc/intel/boards/Makefile
index 119413c262de..1c099e717eca 100644
--- a/sound/soc/intel/boards/Makefile
+++ b/sound/soc/intel/boards/Makefile
@@ -37,6 +37,7 @@ snd-soc-ehl-rt5660-objs := ehl_rt5660.o
 snd-soc-sof-ssp-amp-objs := sof_ssp_amp.o
 snd-soc-sof-sdw-objs += sof_sdw.o				\
 			sof_sdw_maxim.o sof_sdw_rt_amp.o	\
+			bridge_cs35l56.o			\
 			sof_sdw_rt5682.o sof_sdw_rt700.o	\
 			sof_sdw_rt711.o sof_sdw_rt_sdca_jack_common.o	\
 			sof_sdw_rt712_sdca.o sof_sdw_rt722_sdca.o	\
diff --git a/sound/soc/intel/boards/bridge_cs35l56.c b/sound/soc/intel/boards/bridge_cs35l56.c
new file mode 100644
index 000000000000..c3995e724aed
--- /dev/null
+++ b/sound/soc/intel/boards/bridge_cs35l56.c
@@ -0,0 +1,137 @@
+// SPDX-License-Identifier: GPL-2.0-only
+//
+// Intel SOF Machine Driver with Cirrus Logic CS35L56 Smart Amp
+
+#include <linux/module.h>
+#include <linux/platform_device.h>
+#include <sound/core.h>
+#include <sound/pcm.h>
+#include <sound/pcm_params.h>
+#include <sound/soc.h>
+#include <sound/soc-acpi.h>
+#include "sof_sdw_common.h"
+
+static const struct snd_soc_dapm_widget bridge_widgets[] = {
+	SND_SOC_DAPM_SPK("Bridge Speaker", NULL),
+};
+
+static const struct snd_soc_dapm_route bridge_map[] = {
+	{"Bridge Speaker", NULL, "AMPL SPK"},
+	{"Bridge Speaker", NULL, "AMPR SPK"},
+};
+
+static const char * const bridge_cs35l56_name_prefixes[] = {
+	"AMPL",
+	"AMPR",
+};
+
+static int bridge_cs35l56_asp_init(struct snd_soc_pcm_runtime *rtd)
+{
+	struct snd_soc_card *card = rtd->card;
+	int i, ret;
+	unsigned int rx_mask = 3; // ASP RX1, RX2
+	unsigned int tx_mask = 3; // ASP TX1, TX2
+	struct snd_soc_dai *codec_dai;
+	struct snd_soc_dai *cpu_dai;
+
+	card->components = devm_kasprintf(card->dev, GFP_KERNEL,
+					  "%s spk:cs35l56-bridge",
+					  card->components);
+	if (!card->components)
+		return -ENOMEM;
+
+	ret = snd_soc_dapm_new_controls(&card->dapm, bridge_widgets,
+					ARRAY_SIZE(bridge_widgets));
+	if (ret) {
+		dev_err(card->dev, "widgets addition failed: %d\n", ret);
+		return ret;
+	}
+
+	ret = snd_soc_dapm_add_routes(&card->dapm, bridge_map, ARRAY_SIZE(bridge_map));
+	if (ret) {
+		dev_err(card->dev, "map addition failed: %d\n", ret);
+		return ret;
+	}
+
+	/* 4 x 16-bit sample slots and FSYNC=48000, BCLK=3.072 MHz */
+	for_each_rtd_codec_dais(rtd, i, codec_dai) {
+		ret = snd_soc_dai_set_tdm_slot(codec_dai, tx_mask, rx_mask, 4, 16);
+		if (ret < 0)
+			return ret;
+
+		ret = snd_soc_dai_set_sysclk(codec_dai, 0, 3072000, SND_SOC_CLOCK_IN);
+		if (ret < 0)
+			return ret;
+	}
+
+	for_each_rtd_cpu_dais(rtd, i, cpu_dai) {
+		ret = snd_soc_dai_set_tdm_slot(cpu_dai, tx_mask, rx_mask, 4, 16);
+		if (ret < 0)
+			return ret;
+	}
+
+	return 0;
+}
+
+static const struct snd_soc_pcm_stream bridge_params = {
+	.formats = SNDRV_PCM_FMTBIT_S16_LE,
+	.rate_min = 48000,
+	.rate_max = 48000,
+	.channels_min = 2,
+	.channels_max = 2,
+};
+
+SND_SOC_DAILINK_DEFS(bridge_dai,
+		     DAILINK_COMP_ARRAY(COMP_CODEC("cs42l43-codec", "cs42l43-asp")),
+		     DAILINK_COMP_ARRAY(COMP_CODEC("spi-cs35l56-left", "cs35l56-asp1"),
+					COMP_CODEC("spi-cs35l56-right", "cs35l56-asp1")),
+		     DAILINK_COMP_ARRAY(COMP_PLATFORM("cs42l43-codec")));
+
+static const struct snd_soc_dai_link bridge_dai_template = {
+	.name = "cs42l43-cs35l56",
+	.init = bridge_cs35l56_asp_init,
+	.c2c_params = &bridge_params,
+	.dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_IB_IF | SND_SOC_DAIFMT_CBC_CFC,
+	SND_SOC_DAILINK_REG(bridge_dai),
+};
+
+int bridge_cs35l56_count_sidecar(struct snd_soc_card *card,
+				 int *num_dais, int *num_devs)
+{
+	if (sof_sdw_quirk & SOF_SIDECAR_AMPS) {
+		(*num_dais)++;
+		(*num_devs) += ARRAY_SIZE(bridge_cs35l56_name_prefixes);
+	}
+
+	return 0;
+}
+
+int bridge_cs35l56_add_sidecar(struct snd_soc_card *card,
+			       struct snd_soc_dai_link **dai_links,
+			       struct snd_soc_codec_conf **codec_conf)
+{
+	if (sof_sdw_quirk & SOF_SIDECAR_AMPS) {
+		**dai_links = bridge_dai_template;
+
+		for (int i = 0; i < ARRAY_SIZE(bridge_cs35l56_name_prefixes); i++) {
+			(*codec_conf)->dlc.name = (*dai_links)->codecs[i].name;
+			(*codec_conf)->name_prefix = bridge_cs35l56_name_prefixes[i];
+			(*codec_conf)++;
+		}
+
+		(*dai_links)++;
+	}
+
+	return 0;
+}
+
+int bridge_cs35l56_spk_init(struct snd_soc_card *card,
+			    struct snd_soc_dai_link *dai_links,
+			    struct sof_sdw_codec_info *info,
+			    bool playback)
+{
+	if (sof_sdw_quirk & SOF_SIDECAR_AMPS)
+		info->amp_num += ARRAY_SIZE(bridge_cs35l56_name_prefixes);
+
+	return 0;
+}
diff --git a/sound/soc/intel/boards/sof_sdw.c b/sound/soc/intel/boards/sof_sdw.c
index eaa79e29f5c2..b1595fdb500d 100644
--- a/sound/soc/intel/boards/sof_sdw.c
+++ b/sound/soc/intel/boards/sof_sdw.c
@@ -39,6 +39,8 @@ static void log_quirks(struct device *dev)
 		dev_err(dev, "quirk SOF_SDW_NO_AGGREGATION enabled but no longer supported\n");
 	if (sof_sdw_quirk & SOF_CODEC_SPKR)
 		dev_dbg(dev, "quirk SOF_CODEC_SPKR enabled\n");
+	if (sof_sdw_quirk & SOF_SIDECAR_AMPS)
+		dev_dbg(dev, "quirk SOF_SIDECAR_AMPS enabled\n");
 }
 
 static int sof_sdw_quirk_cb(const struct dmi_system_id *id)
@@ -995,6 +997,8 @@ static struct sof_sdw_codec_info codec_info_list[] = {
 	{
 		.part_id = 0x4243,
 		.codec_name = "cs42l43-codec",
+		.count_sidecar = bridge_cs35l56_count_sidecar,
+		.add_sidecar = bridge_cs35l56_add_sidecar,
 		.dais = {
 			{
 				.direction = {true, false},
@@ -1023,7 +1027,7 @@ static struct sof_sdw_codec_info codec_info_list[] = {
 				.dailink = {SDW_AMP_OUT_DAI_ID, SDW_UNUSED_DAI_ID},
 				.init = sof_sdw_cs42l43_spk_init,
 				.rtd_init = cs42l43_spk_rtd_init,
-				.quirk = SOF_CODEC_SPKR,
+				.quirk = SOF_CODEC_SPKR | SOF_SIDECAR_AMPS,
 			},
 		},
 		.dai_num = 4,
diff --git a/sound/soc/intel/boards/sof_sdw_common.h b/sound/soc/intel/boards/sof_sdw_common.h
index 9dd42a8da8d7..94657dd210f5 100644
--- a/sound/soc/intel/boards/sof_sdw_common.h
+++ b/sound/soc/intel/boards/sof_sdw_common.h
@@ -55,6 +55,16 @@ enum {
 #define SOF_SDW_NO_AGGREGATION		BIT(14)
 /* If a CODEC has an optional speaker output, this quirk will enable it */
 #define SOF_CODEC_SPKR			BIT(15)
+/*
+ * If the CODEC has additional devices attached directly to it.
+ *
+ * For the cs42l43:
+ *   - 0 - No speaker output
+ *   - SOF_CODEC_SPKR - CODEC internal speaker
+ *   - SOF_SIDECAR_AMPS - 2x Sidecar amplifiers + CODEC internal speaker
+ *   - SOF_CODEC_SPKR | SOF_SIDECAR_AMPS - Not currently supported
+ */
+#define SOF_SIDECAR_AMPS		BIT(16)
 
 /* BT audio offload: reserve 3 bits for future */
 #define SOF_BT_OFFLOAD_SSP_SHIFT	15
@@ -177,6 +187,16 @@ int sof_sdw_cs42l43_spk_init(struct snd_soc_card *card,
 			     bool playback);
 
 /* CS AMP support */
+int bridge_cs35l56_count_sidecar(struct snd_soc_card *card,
+				 int *num_dais, int *num_devs);
+int bridge_cs35l56_add_sidecar(struct snd_soc_card *card,
+			       struct snd_soc_dai_link **dai_links,
+			       struct snd_soc_codec_conf **codec_conf);
+int bridge_cs35l56_spk_init(struct snd_soc_card *card,
+			    struct snd_soc_dai_link *dai_links,
+			    struct sof_sdw_codec_info *info,
+			    bool playback);
+
 int sof_sdw_cs_amp_init(struct snd_soc_card *card,
 			struct snd_soc_dai_link *dai_links,
 			struct sof_sdw_codec_info *info,
diff --git a/sound/soc/intel/boards/sof_sdw_cs42l43.c b/sound/soc/intel/boards/sof_sdw_cs42l43.c
index 5361249f0f53..0fd5e099bb1a 100644
--- a/sound/soc/intel/boards/sof_sdw_cs42l43.c
+++ b/sound/soc/intel/boards/sof_sdw_cs42l43.c
@@ -124,10 +124,14 @@ int cs42l43_spk_rtd_init(struct snd_soc_pcm_runtime *rtd)
 	struct snd_soc_card *card = rtd->card;
 	int ret;
 
-	card->components = devm_kasprintf(card->dev, GFP_KERNEL, "%s spk:cs42l43-spk",
-					  card->components);
-	if (!card->components)
-		return -ENOMEM;
+	if (!(sof_sdw_quirk & SOF_SIDECAR_AMPS)) {
+		/* Will be set by the bridge code in this case */
+		card->components = devm_kasprintf(card->dev, GFP_KERNEL,
+						  "%s spk:cs42l43-spk",
+						  card->components);
+		if (!card->components)
+			return -ENOMEM;
+	}
 
 	ret = snd_soc_dapm_new_controls(&card->dapm, cs42l43_spk_widgets,
 					ARRAY_SIZE(cs42l43_spk_widgets));
@@ -155,7 +159,7 @@ int sof_sdw_cs42l43_spk_init(struct snd_soc_card *card,
 
 	info->amp_num++;
 
-	return 0;
+	return bridge_cs35l56_spk_init(card, dai_links, info, playback);
 }
 
 int cs42l43_dmic_rtd_init(struct snd_soc_pcm_runtime *rtd)
-- 
2.40.1


^ permalink raw reply related	[flat|nested] 14+ messages in thread

* Re: [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5
  2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
                   ` (11 preceding siblings ...)
  2024-04-26 15:21 ` [PATCH 12/12] ASoC: intel: sof_sdw: Add support for cs42l43-cs35l56 sidecar amps Pierre-Louis Bossart
@ 2024-05-01 13:43 ` Mark Brown
  12 siblings, 0 replies; 14+ messages in thread
From: Mark Brown @ 2024-05-01 13:43 UTC (permalink / raw)
  To: linux-sound, Pierre-Louis Bossart; +Cc: alsa-devel, tiwai

On Fri, 26 Apr 2024 10:21:11 -0500, Pierre-Louis Bossart wrote:
> This patchset corrects a couple of mistakes corrected, improves
> snd_soc_card allocation.  The new functionality is mostly for
> SoundWire platforms, with new SKUs for Dell and Acer, and support for
> the Cirrus Logic bridge/sidecar amplifier topology.
> 
> Bard Liao (1):
>   ASoC: Intel: sof_sdw: add a space before cfg-amp in components
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[01/12] ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically
        commit: 33e59e50ee7610473c85030edca73ad3df60b5c1
[02/12] ASoC: Intel: skl_hda_dsp_generic: Use devm_kasprintf for the components string
        commit: 69d0f88b9aebb5749ab0dbaead7414d718994380
[03/12] ASoC: Intel: soc-acpi: mtl: add Dell SKU 0C64 and 0CC6
        commit: 02e6f7cb487f18e1171ae6d12ad1066fbd25176d
[04/12] ASoC: Intel: soc-acpi: mtl: add support for Acer Swift Go 14
        commit: 64bfd26d982ec29123c65949229fa12c15f7df8f
[05/12] ASoC: Intel: soc-acpi-intel-lnl-match: adds RT714 and RT1318 support
        commit: 6d339113df3ab510ce075a18ccb10a20cb325d4e
[06/12] ASoC: Intel: sof_sdw: Allocate snd_soc_card dynamically
        commit: 38068d91cf3948ffa220d45f738505cc9f6e13d0
[07/12] ASoC: Intel: sof-sdw: don't set card long_name
        commit: 2086b55fd6ddcaa92e473ba7017f6a986870337e
[08/12] ASoC: Intel: sof_sdw: add a space before cfg-amp in components
        commit: 6be269d274353d2604bf49b92f703610cb4734e9
[09/12] ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk
        commit: 0bab4cfd7c1560095e29919e2ebe01783b9096dc
[10/12] ASoC: Intel: sof_sdw: Delay update of the codec_conf array
        commit: 628cc5d0c4bd6a3f70c793968f8e2546afc8c3a3
[11/12] ASoC: Intel: sof_sdw: Add callbacks to register sidecar devices
        commit: da5244180281a18c4c7859674fec308514aaf629
[12/12] ASoC: intel: sof_sdw: Add support for cs42l43-cs35l56 sidecar amps
        commit: b831b4dca48dbe0f1f7705b44460dd9ca7f2f940

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark


^ permalink raw reply	[flat|nested] 14+ messages in thread

end of thread, other threads:[~2024-05-01 13:44 UTC | newest]

Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-04-26 15:21 [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 01/12] ASoC: Intel: skl_hda_dsp_generic: Allocate snd_soc_card dynamically Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 02/12] ASoC: Intel: skl_hda_dsp_generic: Use devm_kasprintf for the components string Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 03/12] ASoC: Intel: soc-acpi: mtl: add Dell SKU 0C64 and 0CC6 Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 04/12] ASoC: Intel: soc-acpi: mtl: add support for Acer Swift Go 14 Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 05/12] ASoC: Intel: soc-acpi-intel-lnl-match: adds RT714 and RT1318 support Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 06/12] ASoC: Intel: sof_sdw: Allocate snd_soc_card dynamically Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 07/12] ASoC: Intel: sof-sdw: don't set card long_name Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 08/12] ASoC: Intel: sof_sdw: add a space before cfg-amp in components Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 09/12] ASoC: Intel: sof-sdw: really remove FOUR_SPEAKER quirk Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 10/12] ASoC: Intel: sof_sdw: Delay update of the codec_conf array Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 11/12] ASoC: Intel: sof_sdw: Add callbacks to register sidecar devices Pierre-Louis Bossart
2024-04-26 15:21 ` [PATCH 12/12] ASoC: intel: sof_sdw: Add support for cs42l43-cs35l56 sidecar amps Pierre-Louis Bossart
2024-05-01 13:43 ` [PATCH 00/12] ASoC: Intel: updates for 6.10 - part5 Mark Brown

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).