public inbox for linux-sound@vger.kernel.org
 help / color / mirror / Atom feed
From: John Meyer <jmeyer@fdma.com>
To: linux-sound@vger.kernel.org
Cc: yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev,
	kai.vehmanen@linux.intel.com, ranjani.sridharan@linux.intel.com,
	peter.ujfalusi@linux.intel.com, John Meyer <jmeyer@fdma.com>
Subject: [PATCH 2/2] ASoC: intel: ptl: Add machine driver entry for Dell XPS 14 DA14260
Date: Wed,  1 Apr 2026 20:12:36 -0400	[thread overview]
Message-ID: <20260402001236.17086-2-jmeyer@fdma.com> (raw)
In-Reply-To: <20260402001236.17086-1-jmeyer@fdma.com>

The Dell XPS 14 DA14260 (Panther Lake) uses the following SoundWire
audio topology:

  Link 0: CS42L45 (mfr 0x01FA, part 0x4245) -- SDCA headset codec
            ADR 0x00003001FA424501
            Endpoints: UAJ (jack playback), SmartMic (DMIC), UAJ (jack
            capture)

  Link 2: Two CS35L57 speaker amps (mfr 0x01FA, part 0x3557)
            ADR 0x00023201FA355701 (left/AMP1)
            ADR 0x00023301FA355701 (AMP2)

  Link 3: Two CS35L57 speaker amps
            ADR 0x00033001FA355701 (right/AMP3)
            ADR 0x00033101FA355701 (AMP4)

ADR values were obtained from the platform ACPI DSDT.

Add the necessary ADR device arrays, endpoint descriptors, link array,
and machine table entry.  The CS42L45 uses three non-aggregated
endpoints (jack playback/capture and DMIC) matching the SDCA functions
advertised by the hardware.  The four CS35L57 amps use the existing
aggregated speaker endpoint descriptors (spk_l, spk_2, spk_r, spk_3).

The topology file name follows the established PTL naming convention.
Note: a PTL-specific topology file does not yet exist; users can
symlink sof-lnl-cs42l43-l0-cs35l56-l23.tplg as a workaround until
a dedicated PTL topology is submitted to linux-firmware.

Tested on Dell XPS 14 DA14260 (Panther Lake, kernel 6.18.20).

Signed-off-by: John Meyer <jmeyer@fdma.com>
---
 sound/soc/intel/common/soc-acpi-intel-ptl-match.c | 103 ++++++++++++++++++++++
 1 file changed, 103 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
--- a/sound/soc/intel/common/soc-acpi-intel-ptl-match.c
+++ b/sound/soc/intel/common/soc-acpi-intel-ptl-match.c
@@ -227,6 +227,66 @@
 	},
 };

+static const struct snd_soc_acpi_endpoint cs42l43_endpoints[] = {
+	{ /* Jack Playback Endpoint */
+		.num = 0,
+		.aggregated = 0,
+		.group_position = 0,
+		.group_id = 0,
+	},
+	{ /* DMIC Capture Endpoint */
+		.num = 1,
+		.aggregated = 0,
+		.group_position = 0,
+		.group_id = 0,
+	},
+	{ /* Jack Capture Endpoint */
+		.num = 2,
+		.aggregated = 0,
+		.group_position = 0,
+		.group_id = 0,
+	},
+};
+
+static const struct snd_soc_acpi_adr_device cs42l43_0_adr[] = {
+	{
+		.adr = 0x00003001FA424501ull,
+		.num_endpoints = ARRAY_SIZE(cs42l43_endpoints),
+		.endpoints = cs42l43_endpoints,
+		.name_prefix = "cs42l43"
+	}
+};
+
+static const struct snd_soc_acpi_adr_device cs35l56_2_lr_adr[] = {
+	{
+		.adr = 0x00023201FA355701ull,
+		.num_endpoints = 1,
+		.endpoints = &spk_l_endpoint,
+		.name_prefix = "AMP1"
+	},
+	{
+		.adr = 0x00023301FA355701ull,
+		.num_endpoints = 1,
+		.endpoints = &spk_2_endpoint,
+		.name_prefix = "AMP2"
+	}
+};
+
+static const struct snd_soc_acpi_adr_device cs35l56_3_lr_adr[] = {
+	{
+		.adr = 0x00033001FA355701ull,
+		.num_endpoints = 1,
+		.endpoints = &spk_r_endpoint,
+		.name_prefix = "AMP3"
+	},
+	{
+		.adr = 0x00033101FA355701ull,
+		.num_endpoints = 1,
+		.endpoints = &spk_3_endpoint,
+		.name_prefix = "AMP4"
+	}
+};
+
 static const struct snd_soc_acpi_adr_device cs42l43_2_adr[] = {
 	{
 		.adr = 0x00023001fa424301ull,
@@ -431,6 +491,25 @@
 	}
 };

+static const struct snd_soc_acpi_link_adr ptl_cs42l43_l0_cs35l56_l23[] = {
+	{
+		.mask = BIT(0),
+		.num_adr = ARRAY_SIZE(cs42l43_0_adr),
+		.adr_d = cs42l43_0_adr,
+	},
+	{
+		.mask = BIT(2),
+		.num_adr = ARRAY_SIZE(cs35l56_2_lr_adr),
+		.adr_d = cs35l56_2_lr_adr,
+	},
+	{
+		.mask = BIT(3),
+		.num_adr = ARRAY_SIZE(cs35l56_3_lr_adr),
+		.adr_d = cs35l56_3_lr_adr,
+	},
+	{}
+};
+
 static const struct snd_soc_acpi_link_adr ptl_cs42l43_l2_cs35l56x6_l13[] = {
 	{
 		.mask = BIT(2),
@@ -619,6 +698,12 @@
 		.get_function_tplg_files = sof_sdw_get_tplg_files,
 	},
 	{
+		.link_mask = BIT(0) | BIT(2) | BIT(3),
+		.links = ptl_cs42l43_l0_cs35l56_l23,
+		.drv_name = "sof_sdw",
+		.sof_tplg_filename = "sof-ptl-cs42l43-l0-cs35l56-l23.tplg",
+	},
+	{
 		.link_mask = BIT(1) | BIT(2) | BIT(3),
 		.links = ptl_cs42l43_l2_cs35l56x6_l13,
 		.drv_name = "sof_sdw",
--
2.49.0

  reply	other threads:[~2026-04-02  0:12 UTC|newest]

Thread overview: 4+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-04-02  0:12 [PATCH 1/2] ASoC: sdw_utils: Add CS42L45 and CS35L57 codec table entries John Meyer
2026-04-02  0:12 ` John Meyer [this message]
2026-04-02  9:12   ` [PATCH 2/2] ASoC: intel: ptl: Add machine driver entry for Dell XPS 14 DA14260 Richard Fitzgerald
2026-04-02  9:18 ` [PATCH 1/2] ASoC: sdw_utils: Add CS42L45 and CS35L57 codec table entries Richard Fitzgerald

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20260402001236.17086-2-jmeyer@fdma.com \
    --to=jmeyer@fdma.com \
    --cc=kai.vehmanen@linux.intel.com \
    --cc=linux-sound@vger.kernel.org \
    --cc=peter.ujfalusi@linux.intel.com \
    --cc=pierre-louis.bossart@linux.dev \
    --cc=ranjani.sridharan@linux.intel.com \
    --cc=yung-chuan.liao@linux.intel.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox