From: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
To: vkoul@kernel.org, perex@perex.cz, tiwai@suse.com,
lgirdwood@gmail.com, broonie@kernel.org,
srinivas.kandagatla@oss.qualcomm.com
Cc: linux-sound@vger.kernel.org, kai.vehmanen@linux.intel.com,
yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev,
daniel.baluta@nxp.com
Subject: [PATCH v4 08/26] ASoC: SOF: compress: Rename compress ops with ipc3 prefix
Date: Wed, 16 Sep 2026 15:03:02 +0300 [thread overview]
Message-ID: <20260916120320.18318-9-peter.ujfalusi@linux.intel.com> (raw)
In-Reply-To: <20260916120320.18318-1-peter.ujfalusi@linux.intel.com>
From: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
In preparation for adding support for compressed offload support for
IPC4, rename the current compress implementation with the IPC3 prefix
and rename the compress.c file to ipc3-compress.c
Introduce a new field in struct sof_ipc_pcm_ops to save the
IPC-specific compressed ops pointer, which is assigned to the component
driver ops during SOF device probe. As this now depends on the IPC ops,
move snd_sof_new_platform_drv() after the IPC ops are initialized.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Liam Girdwood <liam.r.girdwood@intel.com>
---
sound/soc/sof/Makefile | 2 +-
sound/soc/sof/core.c | 10 ++-
sound/soc/sof/{compress.c => ipc3-compress.c} | 63 ++++++++++---------
sound/soc/sof/ipc3-pcm.c | 3 +
sound/soc/sof/ipc3-priv.h | 3 +
sound/soc/sof/pcm.c | 5 +-
sound/soc/sof/sof-audio.h | 2 +
7 files changed, 52 insertions(+), 36 deletions(-)
rename sound/soc/sof/{compress.c => ipc3-compress.c} (82%)
diff --git a/sound/soc/sof/Makefile b/sound/soc/sof/Makefile
index b0b22e6ebc03..3d52f8c4d173 100644
--- a/sound/soc/sof/Makefile
+++ b/sound/soc/sof/Makefile
@@ -19,7 +19,7 @@ ifneq ($(CONFIG_SND_SOC_SOF_CLIENT),)
snd-sof-y += sof-client.o
endif
-snd-sof-$(CONFIG_SND_SOC_SOF_COMPRESS) += compress.o
+snd-sof-$(CONFIG_SND_SOC_SOF_COMPRESS) += ipc3-compress.o
snd-sof-pci-y := sof-pci-dev.o
snd-sof-acpi-y := sof-acpi-dev.o
diff --git a/sound/soc/sof/core.c b/sound/soc/sof/core.c
index 2d394389c945..41747ef0e432 100644
--- a/sound/soc/sof/core.c
+++ b/sound/soc/sof/core.c
@@ -463,11 +463,12 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
sof_set_fw_state(sdev, SOF_FW_BOOT_PREPARE);
- /* set up platform component driver */
- snd_sof_new_platform_drv(sdev);
-
if (sdev->dspless_mode_selected) {
sof_set_fw_state(sdev, SOF_DSPLESS_MODE);
+
+ /* set up platform component driver */
+ snd_sof_new_platform_drv(sdev);
+
goto skip_dsp_init;
}
@@ -492,6 +493,9 @@ static int sof_probe_continue(struct snd_sof_dev *sdev)
goto ipc_err;
}
+ /* set up platform component driver after initializing the IPC ops */
+ snd_sof_new_platform_drv(sdev);
+
/* load the firmware */
ret = snd_sof_load_firmware(sdev);
if (ret < 0) {
diff --git a/sound/soc/sof/compress.c b/sound/soc/sof/ipc3-compress.c
similarity index 82%
rename from sound/soc/sof/compress.c
rename to sound/soc/sof/ipc3-compress.c
index 76d03faaafc4..115d454bcaf5 100644
--- a/sound/soc/sof/compress.c
+++ b/sound/soc/sof/ipc3-compress.c
@@ -12,8 +12,8 @@
#include "sof-utils.h"
#include "ops.h"
-static int sof_compr_open(struct snd_soc_component *component,
- struct snd_compr_stream *cstream)
+static int sof_ipc3_compr_open(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream)
{
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
struct snd_compr_runtime *crtd = cstream->runtime;
@@ -48,8 +48,8 @@ static int sof_compr_open(struct snd_soc_component *component,
return 0;
}
-static int sof_compr_free(struct snd_soc_component *component,
- struct snd_compr_stream *cstream)
+static int sof_ipc3_compr_free(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream)
{
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
struct sof_compr_stream *sstream = cstream->runtime->private_data;
@@ -79,8 +79,9 @@ static int sof_compr_free(struct snd_soc_component *component,
return ret;
}
-static int sof_compr_set_params(struct snd_soc_component *component,
- struct snd_compr_stream *cstream, struct snd_compr_params *params)
+static int sof_ipc3_compr_set_params(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream,
+ struct snd_compr_params *params)
{
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
@@ -185,8 +186,9 @@ static int sof_compr_set_params(struct snd_soc_component *component,
return ret;
}
-static int sof_compr_get_params(struct snd_soc_component *component,
- struct snd_compr_stream *cstream, struct snd_codec *params)
+static int sof_ipc3_compr_get_params(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream,
+ struct snd_codec *params)
{
struct sof_compr_stream *sstream = cstream->runtime->private_data;
@@ -195,8 +197,8 @@ static int sof_compr_get_params(struct snd_soc_component *component,
return 0;
}
-static int sof_compr_trigger(struct snd_soc_component *component,
- struct snd_compr_stream *cstream, int cmd)
+static int sof_ipc3_compr_trigger(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream, int cmd)
{
struct snd_sof_dev *sdev = snd_soc_component_get_drvdata(component);
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
@@ -232,8 +234,8 @@ static int sof_compr_trigger(struct snd_soc_component *component,
return sof_ipc_tx_message_no_reply(sdev->ipc, &stream, sizeof(stream));
}
-static int sof_compr_copy_playback(struct snd_compr_runtime *rtd,
- char __user *buf, size_t count)
+static int sof_ipc3_compr_copy_playback(struct snd_compr_runtime *rtd,
+ char __user *buf, size_t count)
{
void *ptr;
unsigned int offset, n;
@@ -253,8 +255,8 @@ static int sof_compr_copy_playback(struct snd_compr_runtime *rtd,
return count - ret;
}
-static int sof_compr_copy_capture(struct snd_compr_runtime *rtd,
- char __user *buf, size_t count)
+static int sof_ipc3_compr_copy_capture(struct snd_compr_runtime *rtd,
+ char __user *buf, size_t count)
{
void *ptr;
unsigned int offset, n;
@@ -274,9 +276,9 @@ static int sof_compr_copy_capture(struct snd_compr_runtime *rtd,
return count - ret;
}
-static int sof_compr_copy(struct snd_soc_component *component,
- struct snd_compr_stream *cstream,
- char __user *buf, size_t count)
+static int sof_ipc3_compr_copy(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream,
+ char __user *buf, size_t count)
{
struct snd_compr_runtime *rtd = cstream->runtime;
@@ -284,14 +286,14 @@ static int sof_compr_copy(struct snd_soc_component *component,
count = rtd->buffer_size;
if (cstream->direction == SND_COMPRESS_PLAYBACK)
- return sof_compr_copy_playback(rtd, buf, count);
+ return sof_ipc3_compr_copy_playback(rtd, buf, count);
else
- return sof_compr_copy_capture(rtd, buf, count);
+ return sof_ipc3_compr_copy_capture(rtd, buf, count);
}
-static int sof_compr_pointer(struct snd_soc_component *component,
- struct snd_compr_stream *cstream,
- struct snd_compr_tstamp64 *tstamp)
+static int sof_ipc3_compr_pointer(struct snd_soc_component *component,
+ struct snd_compr_stream *cstream,
+ struct snd_compr_tstamp64 *tstamp)
{
struct snd_sof_pcm *spcm;
struct snd_soc_pcm_runtime *rtd = cstream->private_data;
@@ -312,13 +314,12 @@ static int sof_compr_pointer(struct snd_soc_component *component,
return 0;
}
-struct snd_compress_ops sof_compressed_ops = {
- .open = sof_compr_open,
- .free = sof_compr_free,
- .set_params = sof_compr_set_params,
- .get_params = sof_compr_get_params,
- .trigger = sof_compr_trigger,
- .pointer = sof_compr_pointer,
- .copy = sof_compr_copy,
+const struct snd_compress_ops sof_ipc3_compressed_ops = {
+ .open = sof_ipc3_compr_open,
+ .free = sof_ipc3_compr_free,
+ .set_params = sof_ipc3_compr_set_params,
+ .get_params = sof_ipc3_compr_get_params,
+ .trigger = sof_ipc3_compr_trigger,
+ .pointer = sof_ipc3_compr_pointer,
+ .copy = sof_ipc3_compr_copy,
};
-EXPORT_SYMBOL(sof_compressed_ops);
diff --git a/sound/soc/sof/ipc3-pcm.c b/sound/soc/sof/ipc3-pcm.c
index 143bf0fe8dd9..1d0c80466f6a 100644
--- a/sound/soc/sof/ipc3-pcm.c
+++ b/sound/soc/sof/ipc3-pcm.c
@@ -442,4 +442,7 @@ const struct sof_ipc_pcm_ops ipc3_pcm_ops = {
.dai_link_fixup = sof_ipc3_pcm_dai_link_fixup,
.reset_hw_params_during_stop = true,
.d0i3_supported_in_s0ix = true,
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMPRESS)
+ .compress_ops = &sof_ipc3_compressed_ops,
+#endif
};
diff --git a/sound/soc/sof/ipc3-priv.h b/sound/soc/sof/ipc3-priv.h
index 866c5f67b91a..f95957453ab8 100644
--- a/sound/soc/sof/ipc3-priv.h
+++ b/sound/soc/sof/ipc3-priv.h
@@ -17,6 +17,9 @@ extern const struct sof_ipc_tplg_ops ipc3_tplg_ops;
extern const struct sof_ipc_tplg_control_ops tplg_ipc3_control_ops;
extern const struct sof_ipc_fw_loader_ops ipc3_loader_ops;
extern const struct sof_ipc_fw_tracing_ops ipc3_dtrace_ops;
+#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMPRESS)
+extern const struct snd_compress_ops sof_ipc3_compressed_ops;
+#endif
/* helpers for fw_ready and ext_manifest parsing */
int sof_ipc3_get_ext_windows(struct snd_sof_dev *sdev,
diff --git a/sound/soc/sof/pcm.c b/sound/soc/sof/pcm.c
index f748d072109a..941baa48b275 100644
--- a/sound/soc/sof/pcm.c
+++ b/sound/soc/sof/pcm.c
@@ -847,7 +847,10 @@ void snd_sof_new_platform_drv(struct snd_sof_dev *sdev)
pd->delay = sof_pcm_delay;
#if IS_ENABLED(CONFIG_SND_SOC_SOF_COMPRESS)
- pd->compress_ops = &sof_compressed_ops;
+ const struct sof_ipc_pcm_ops *pcm_ops = sof_ipc_get_ops(sdev, pcm);
+
+ if (pcm_ops)
+ pd->compress_ops = pcm_ops->compress_ops;
#endif
pd->pcm_new = sof_pcm_new;
diff --git a/sound/soc/sof/sof-audio.h b/sound/soc/sof/sof-audio.h
index c09099f30378..bd5bbaf9ae44 100644
--- a/sound/soc/sof/sof-audio.h
+++ b/sound/soc/sof/sof-audio.h
@@ -119,6 +119,7 @@ struct snd_sof_dai_config_data {
* therefore the host must do the same and should stop the DMA during
* hw_free.
* @d0i3_supported_in_s0ix: Allow DSP D0I3 during S0iX
+ * @compress_ops: Pointer to ops for compressed streams
*/
struct sof_ipc_pcm_ops {
int (*hw_params)(struct snd_soc_component *component, struct snd_pcm_substream *substream,
@@ -139,6 +140,7 @@ struct sof_ipc_pcm_ops {
bool ipc_first_on_start;
bool platform_stop_during_hw_free;
bool d0i3_supported_in_s0ix;
+ const struct snd_compress_ops *compress_ops;
};
/**
--
2.55.0
next prev parent reply other threads:[~2026-09-16 12:03 UTC|newest]
Thread overview: 34+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-16 12:02 [PATCH v4 00/26] ALSA compress / ASoC compress / SOF: Compressed audio support with IPC4 Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 01/26] ALSA: compress: pin card module while stream is open Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 02/26] ALSA: compress: register the open file with the card Peter Ujfalusi
2026-10-06 10:35 ` Mark Brown
2026-10-06 10:59 ` Péter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 03/26] ALSA: compress: stop active streams on disconnect Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 04/26] ASoC: soc-compress: Provide a runtime for the compressed FE substream Peter Ujfalusi
2026-09-16 12:02 ` [PATCH v4 05/26] ASoC: soc-compress: Implement trigger FE-BE sequencing as with normal PCMs Peter Ujfalusi
2026-10-06 9:12 ` Mark Brown
2026-10-06 9:50 ` Péter Ujfalusi
2026-10-06 10:11 ` Mark Brown
2026-09-16 12:03 ` [PATCH v4 06/26] ASoC: soc-compress: Stop running dpcm on free Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 07/26] ASoC: SOF: compress: Move the IPC agnostic helpers to sof-audio.c Peter Ujfalusi
2026-09-16 12:03 ` Peter Ujfalusi [this message]
2026-09-16 12:03 ` [PATCH v4 09/26] ASoC: SOF: sof-audio: Fix the pipeline_list population Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 10/26] ASoC: SOF: ipc4-pcm: Serialize the PCM free with the pipeline triggers Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 11/26] ASoC: SOF: sof-audio: do not dereference swidget->spipe unconditionally on free Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 12/26] ASoC: SOF: sof-audio: Expose a couple of functions Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 13/26] ASoC: SOF: pcm: Modify the signature of a couple of PCM IPC ops Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 14/26] ASoC: SOF: intel: hda-stream: Clear the current position when releasing stream Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 15/26] ASoC: SOF: ipc4: Add definition of module data in init_ext object type Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 16/26] ASoC: SOF: ipc4-topology: Support init_ext_module_data for process modules Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 17/26] ASoC: SOF: ipc4-pcm: Make the timestamp info usable outside of ipc4-pcm.c Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 18/26] ASoC: SOF: ipc4/ipc4-loader: Add SOF_INFO and CODEC_INFO to fw_config_params Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 19/26] ASoC: SOF: ipc4-pcm: Handle COMPR DRAIN triggers as EOS pipeline state Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 20/26] ASoC: SOF: ipc4-topology: Set FAST_MODE for host copier in compr mode Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 21/26] ASoC: SOF: ops: Add new platform-specific ops for compress Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 22/26] ASoC: SOF: Add support for IPC4 compressed Peter Ujfalusi
2026-10-06 9:37 ` Mark Brown
2026-10-06 11:32 ` Péter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 23/26] ASoC: SOF: ipc4: Handle compressed drain done notification from firmware Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 24/26] ASoC: SOF: Intel: Kconfig: Remove redundant IPC version selects Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 25/26] ASoC: SOF: Intel: Kconfig: Select compress support for TGL+ platforms Peter Ujfalusi
2026-09-16 12:03 ` [PATCH v4 26/26] ASoC: SOF: topology: Add support for decoder and encoder widgets Peter Ujfalusi
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=20260916120320.18318-9-peter.ujfalusi@linux.intel.com \
--to=peter.ujfalusi@linux.intel.com \
--cc=broonie@kernel.org \
--cc=daniel.baluta@nxp.com \
--cc=kai.vehmanen@linux.intel.com \
--cc=lgirdwood@gmail.com \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=pierre-louis.bossart@linux.dev \
--cc=srinivas.kandagatla@oss.qualcomm.com \
--cc=tiwai@suse.com \
--cc=vkoul@kernel.org \
--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