]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
ASoC: SOF: Intel: hda-sdw-bpt: support simultaneous audio and BPT streams
authorBard Liao <yung-chuan.liao@linux.intel.com>
Tue, 3 Feb 2026 11:40:27 +0000 (19:40 +0800)
committerMark Brown <broonie@kernel.org>
Tue, 3 Feb 2026 13:47:21 +0000 (13:47 +0000)
Currently the SoundWire BPT stream uses the paired link DMA but not
reserve it. It works without any issue because we assume the SoundWire
BPT will not run with audio streams simultaneously.
To support simultaneous audio and BPT streams, we need to use the
hda_dma_prepare/cleanup helpers to reserve the pair link host DMA.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com>
Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.dev>
Link: https://patch.msgid.link/20260203114027.3742558-4-yung-chuan.liao@linux.intel.com
Signed-off-by: Mark Brown <broonie@kernel.org>
sound/soc/sof/intel/hda-sdw-bpt.c

index ae2f8d55dbd087e6cecf8079739bd92b210d687e..728ffe7ae54d8574f8e70234c665e0bd43b9fcbb 100644 (file)
@@ -118,7 +118,8 @@ static int hda_sdw_bpt_dma_prepare(struct device *dev, struct hdac_ext_stream **
 
        dev_dbg(dev, "direction %d format_val %#x\n", direction, format);
 
-       bpt_stream = hda_cl_prepare(dev, format, bpt_num_bytes, dmab_bdl, false, direction, false);
+       bpt_stream = hda_data_stream_prepare(dev, format, bpt_num_bytes, dmab_bdl,
+                                            false, direction, false, true);
        if (IS_ERR(bpt_stream)) {
                dev_err(sdev->dev, "%s: SDW BPT DMA prepare failed: dir %d\n",
                        __func__, direction);
@@ -162,7 +163,7 @@ static int hda_sdw_bpt_dma_deprepare(struct device *dev, struct hdac_ext_stream
        u32 mask;
        int ret;
 
-       ret = hda_cl_cleanup(sdev->dev, dmab_bdl, false, sdw_bpt_stream);
+       ret = hda_data_stream_cleanup(sdev->dev, dmab_bdl, false, sdw_bpt_stream, true);
        if (ret < 0) {
                dev_err(sdev->dev, "%s: SDW BPT DMA cleanup failed\n",
                        __func__);