From 223512c8f97ba9108ae2de6e1f1ac822912acf88 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Wed, 4 Mar 2026 22:34:30 +0800 Subject: [PATCH 1/7] topology2: sdw-jack-generic: always create module-copier.1.12 This is a preparation commit for creating a stand alone echo reference topology. module-copier.1.12 is used by the echo reference, but it is harmless to create it and connect it to the no echo reference topology. And then we can connect the echo reference pipeline to module-copier.1.12 is echo reference is needed. Signed-off-by: Bard Liao --- .../platform/intel/sdw-jack-generic.conf | 102 +++++++----------- 1 file changed, 39 insertions(+), 63 deletions(-) diff --git a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf index 27d54ba9843f..b3670d1ecffb 100644 --- a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf @@ -514,6 +514,28 @@ Object.Pipeline.host-gateway-capture [ # Jack capture pipeline widgets Object.Widget { + module-copier."12" { + index 1 + num_input_pins 1 + num_output_pins 2 + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $JACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $JACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + alh-copier [ { stream_name $SDW_JACK_IN_STREAM @@ -655,54 +677,30 @@ Object.PCM.pcm [ IncludeByKey.PASSTHROUGH { "false" { - IncludeByKey.SDW_JACK_ECHO_REF { + IncludeByKey.USE_DAX { "true" { - IncludeByKey.USE_DAX { - "true" { - Object.Base.route [ - { - source "dolby-dax.1.1" - sink "module-copier.1.12" - } - { - source "module-copier.1.12" - sink "alh-copier.$SDW_JACK_OUT_STREAM.0" - } - ] + Object.Base.route [ + { + source "dolby-dax.1.1" + sink "module-copier.1.12" } - "false" { - Object.Base.route [ - { - source "gain.1.1" - sink "module-copier.1.12" - } - { - source "module-copier.1.12" - sink "alh-copier.$SDW_JACK_OUT_STREAM.0" - } - ] + { + source "module-copier.1.12" + sink "alh-copier.$SDW_JACK_OUT_STREAM.0" } - } + ] } "false" { - IncludeByKey.USE_DAX { - "true" { - Object.Base.route [ - { - source "dolby-dax.1.1" - sink "alh-copier.$SDW_JACK_OUT_STREAM.0" - } - ] + Object.Base.route [ + { + source "gain.1.1" + sink "module-copier.1.12" } - "false" { - Object.Base.route [ - { - source "gain.1.1" - sink "alh-copier.$SDW_JACK_OUT_STREAM.0" - } - ] + { + source "module-copier.1.12" + sink "alh-copier.$SDW_JACK_OUT_STREAM.0" } - } + ] } } @@ -741,28 +739,6 @@ IncludeByKey.PASSTHROUGH { IncludeByKey.SDW_JACK_ECHO_REF { "true" { - Object.Widget.module-copier."12" { - index 1 - num_input_pins 1 - num_output_pins 2 - num_input_audio_formats 1 - num_output_audio_formats 1 - Object.Base.input_audio_format [ - { - in_rate $JACK_RATE - in_bit_depth 32 - in_valid_bit_depth 32 - } - ] - Object.Base.output_audio_format [ - { - out_rate $JACK_RATE - out_bit_depth 32 - out_valid_bit_depth 32 - } - ] - } - Object.Pipeline { siggen-host-copier-capture [ { From 638ce084a9b1cc54f115a30b66b50d7cb2c182c6 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 5 Mar 2026 08:45:49 +0800 Subject: [PATCH 2/7] topology2: sdw-amp-generic: always create module-copier.1.22 This is a preparation commit for creating a stand alone echo reference topology. module-copier.1.22 is used by the echo reference, but it is harmless to create it and connect it to the no echo reference topology. And then we can connect the echo reference pipeline to module-copier.1.22 is echo reference is needed. Signed-off-by: Bard Liao --- .../platform/intel/sdw-amp-generic.conf | 114 ++++++------------ 1 file changed, 39 insertions(+), 75 deletions(-) diff --git a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf index ae01992bcad1..ac6ed42cc5cf 100644 --- a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf @@ -54,6 +54,26 @@ Object.Dai.ALH [ } ] +Object.Widget.module-copier."22" { + index 21 + num_input_pins 1 + num_output_pins 2 + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] +} + IncludeByKey.PASSTHROUGH { "false" { Object.Pipeline { @@ -737,41 +757,25 @@ Object.PCM.pcm [ IncludeByKey.PASSTHROUGH { "false" { - IncludeByKey.SDW_SPK_ECHO_REF { + IncludeByKey.SDW_SPK_ENHANCED_PLAYBACK { "true" { - IncludeByKey.SDW_SPK_ENHANCED_PLAYBACK { + IncludeByKey.USE_DAX { "true" { - IncludeByKey.USE_DAX { - "true" { - Object.Base.route [ - { - source "dolby-dax.21.1" - sink "module-copier.21.22" - } - { - source "module-copier.21.22" - sink "alh-copier.$SDW_SPK_STREAM.0" - } - ] + Object.Base.route [ + { + source "dolby-dax.21.1" + sink "module-copier.21.22" } - "false" { - Object.Base.route [ - { - source "drc.21.1" - sink "module-copier.21.22" - } - { - source "module-copier.21.22" - sink "alh-copier.$SDW_SPK_STREAM.0" - } - ] + { + source "module-copier.21.22" + sink "alh-copier.$SDW_SPK_STREAM.0" } - } + ] } "false" { Object.Base.route [ { - source "gain.21.1" + source "drc.21.1" sink "module-copier.21.22" } { @@ -783,36 +787,16 @@ IncludeByKey.PASSTHROUGH { } } "false" { - IncludeByKey.SDW_SPK_ENHANCED_PLAYBACK { - "true" { - IncludeByKey.USE_DAX { - "true" { - Object.Base.route [ - { - source "dolby-dax.21.1" - sink "alh-copier.$SDW_SPK_STREAM.0" - } - ] - } - "false" { - Object.Base.route [ - { - source "drc.21.1" - sink "alh-copier.$SDW_SPK_STREAM.0" - } - ] - } - } + Object.Base.route [ + { + source "gain.21.1" + sink "module-copier.21.22" } - "false" { - Object.Base.route [ - { - source "gain.21.1" - sink "alh-copier.$SDW_SPK_STREAM.0" - } - ] + { + source "module-copier.21.22" + sink "alh-copier.$SDW_SPK_STREAM.0" } - } + ] } } Object.Base.route [ @@ -1048,26 +1032,6 @@ IncludeByKey.SDW_AMP_FEEDBACK { IncludeByKey.SDW_SPK_ECHO_REF { "true" { - Object.Widget.module-copier."22" { - index 21 - num_input_pins 1 - num_output_pins 2 - num_input_audio_formats 1 - num_output_audio_formats 1 - Object.Base.input_audio_format [ - { - in_bit_depth 32 - in_valid_bit_depth 32 - } - ] - Object.Base.output_audio_format [ - { - out_bit_depth 32 - out_valid_bit_depth 32 - } - ] - } - Object.Pipeline { siggen-host-copier-capture [ { From 57c72b3c7b4df83bd22b86191ce887fe3c12d7ef Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 5 Mar 2026 20:41:56 +0800 Subject: [PATCH 3/7] topology2: sdw-amp-generic: change the spk echo refference pipeline ID The spk echo refference pipeline ID 22 is the same as 2nd spk pipeline ID. Follow the convention that route and pipeline index start from pcm id * 10 to set it to 120. Signed-off-by: Bard Liao --- .../topology2/platform/intel/sdw-amp-generic.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf index ac6ed42cc5cf..d774c28e2101 100644 --- a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf @@ -1036,7 +1036,7 @@ IncludeByKey.SDW_SPK_ECHO_REF { siggen-host-copier-capture [ { direction "capture" - index 22 + index 120 Object.Widget.host-copier."1" { stream_name "Speaker Echo Reference" pcm_id $SDW_SPK_ECHO_REF_PCM_ID @@ -1064,14 +1064,14 @@ IncludeByKey.SDW_SPK_ECHO_REF { Object.Base.route [ { source "alh-copier.Loopback_Virtual.25" - sink "siggen.22.1" + sink "siggen.120.1" } { source "module-copier.21.22" - sink "siggen.22.1" + sink "siggen.120.1" } { - source "siggen.22.1" + source "siggen.120.1" sink "host-copier.$SDW_SPK_ECHO_REF_PCM_ID.capture" } ] From b743f4dfe57e2b7910c07aa7431152a32cec31d3 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 5 Mar 2026 19:45:46 +0800 Subject: [PATCH 4/7] topology2: usa macro to define the echo reference pipeline id The Loopback_Virtual DAI's pipeline ID should be either spk echo reference pipeline or jack echo reference pipeline. Use macro to select one of them. Signed-off-by: Bard Liao --- tools/topology/topology2/cavs-sdw.conf | 5 ++++- .../topology2/platform/intel/sdw-amp-generic.conf | 9 +++++---- .../topology2/platform/intel/sdw-jack-generic.conf | 9 +++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/tools/topology/topology2/cavs-sdw.conf b/tools/topology/topology2/cavs-sdw.conf index a4d9375f5ff2..62d91277bb0e 100644 --- a/tools/topology/topology2/cavs-sdw.conf +++ b/tools/topology/topology2/cavs-sdw.conf @@ -146,7 +146,10 @@ IncludeByKey.SDW_ECHO_REF_DAI { stream_name "Loopback_Virtual" direction "capture" type "dai_out" - index 12 + IncludeByKey.SDW_SPK_ECHO_REF { + "true" {index $SDW_SPK_ECHO_REF_PIPELINE_ID} + "false" {index $SDW_JACK_ECHO_REF_PIPELINE_ID} + } dai_index 25 node_type $ALH_LINK_INPUT_CLASS num_input_audio_formats 1 diff --git a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf index d774c28e2101..85f75eb0a3e5 100644 --- a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf @@ -14,6 +14,7 @@ Define { SDW_AMP_FEEDBACK true AMP_PLAYBACK_NAME 'Speaker Playback' SDW_SPK_ECHO_REF_PCM_ID 12 + SDW_SPK_ECHO_REF_PIPELINE_ID 120 } # include deep buffer config if buffer size is in 1 - 1000 ms. @@ -1036,7 +1037,7 @@ IncludeByKey.SDW_SPK_ECHO_REF { siggen-host-copier-capture [ { direction "capture" - index 120 + index $SDW_SPK_ECHO_REF_PIPELINE_ID Object.Widget.host-copier."1" { stream_name "Speaker Echo Reference" pcm_id $SDW_SPK_ECHO_REF_PCM_ID @@ -1064,14 +1065,14 @@ IncludeByKey.SDW_SPK_ECHO_REF { Object.Base.route [ { source "alh-copier.Loopback_Virtual.25" - sink "siggen.120.1" + sink "siggen.$SDW_SPK_ECHO_REF_PCM_ID.1" } { source "module-copier.21.22" - sink "siggen.120.1" + sink "siggen.$SDW_SPK_ECHO_REF_PCM_ID.1" } { - source "siggen.120.1" + source "siggen.$SDW_SPK_ECHO_REF_PCM_ID.1" sink "host-copier.$SDW_SPK_ECHO_REF_PCM_ID.capture" } ] diff --git a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf index b3670d1ecffb..3862cf33c5b0 100644 --- a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf @@ -12,6 +12,7 @@ Define { JACK_CAPTURE_PCM_NAME "Jack In" JACK_RATE 48000 SDW_JACK_ECHO_REF_PCM_ID 11 + SDW_JACK_ECHO_REF_PIPELINE_ID 12 } # @@ -743,7 +744,7 @@ IncludeByKey.SDW_JACK_ECHO_REF { siggen-host-copier-capture [ { direction "capture" - index 12 + index $SDW_JACK_ECHO_REF_PIPELINE_ID Object.Widget.host-copier."1" { stream_name "Jack Echo Reference" pcm_id $SDW_JACK_ECHO_REF_PCM_ID @@ -827,14 +828,14 @@ IncludeByKey.SDW_JACK_ECHO_REF { Object.Base.route [ { source "alh-copier.Loopback_Virtual.25" - sink "siggen.12.1" + sink "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" } { source "module-copier.1.12" - sink "siggen.12.1" + sink "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" } { - source "siggen.12.1" + source "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" sink "host-copier.$SDW_JACK_ECHO_REF_PCM_ID.capture" } ] From 25d2712db529bbe3896d0209d91ee19f9fd62e13 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Thu, 5 Mar 2026 20:38:08 +0800 Subject: [PATCH 5/7] topology2: split echo reference part from sdw topologies Currently, we implement the echo reference pipeline, widgets, routes in the SoundWire config files. It is hard to create a stand alone echo reference topology for the function topology usages. This commit moves the echo reference part from the original config file and include the new echo reference in the original file. Signed-off-by: Bard Liao --- .../platform/intel/sdw-amp-echo-ref.conf | 52 +++++++++ .../platform/intel/sdw-amp-generic.conf | 48 +------- .../platform/intel/sdw-jack-echo-ref.conf | 108 ++++++++++++++++++ .../platform/intel/sdw-jack-generic.conf | 104 +---------------- 4 files changed, 162 insertions(+), 150 deletions(-) create mode 100644 tools/topology/topology2/platform/intel/sdw-amp-echo-ref.conf create mode 100644 tools/topology/topology2/platform/intel/sdw-jack-echo-ref.conf diff --git a/tools/topology/topology2/platform/intel/sdw-amp-echo-ref.conf b/tools/topology/topology2/platform/intel/sdw-amp-echo-ref.conf new file mode 100644 index 000000000000..abde20519f2e --- /dev/null +++ b/tools/topology/topology2/platform/intel/sdw-amp-echo-ref.conf @@ -0,0 +1,52 @@ +Define { + SDW_SPK_ECHO_REF_PCM_ID 12 + SDW_SPK_ECHO_REF_PIPELINE_ID 120 +} + +IncludeByKey.SDW_SPK_ECHO_REF { + "true" { + Object.Pipeline { + siggen-host-copier-capture [ + { + direction "capture" + index $SDW_SPK_ECHO_REF_PIPELINE_ID + Object.Widget.host-copier."1" { + stream_name "Speaker Echo Reference" + pcm_id $SDW_SPK_ECHO_REF_PCM_ID + } + Object.Widget.siggen."1" {} + } + ] + } + + Object.PCM.pcm [ + { + name "Speaker Echo Reference" + id $SDW_SPK_ECHO_REF_PCM_ID + direction "capture" + Object.Base.fe_dai.1 { + name "Speaker Echo Reference" + } + Object.PCM.pcm_caps.1 { + name "Speaker Echo Reference" + formats 'S16_LE,S24_LE,S32_LE' + } + } + ] + + Object.Base.route [ + { + source "alh-copier.Loopback_Virtual.25" + sink "siggen.$SDW_SPK_ECHO_REF_PIPELINE_ID.1" + } + { + source "module-copier.21.22" + sink "siggen.$SDW_SPK_ECHO_REF_PIPELINE_ID.1" + } + { + source "siggen.$SDW_SPK_ECHO_REF_PIPELINE_ID.1" + sink "host-copier.$SDW_SPK_ECHO_REF_PCM_ID.capture" + } + ] + } # SDW_SPK_ECHO_REF true +} diff --git a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf index 85f75eb0a3e5..f6e9b10dc37d 100644 --- a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf @@ -13,8 +13,6 @@ Define { AMP_FEEDBACK_CH_PER_LINK 2 SDW_AMP_FEEDBACK true AMP_PLAYBACK_NAME 'Speaker Playback' - SDW_SPK_ECHO_REF_PCM_ID 12 - SDW_SPK_ECHO_REF_PIPELINE_ID 120 } # include deep buffer config if buffer size is in 1 - 1000 ms. @@ -1032,49 +1030,5 @@ IncludeByKey.SDW_AMP_FEEDBACK { } IncludeByKey.SDW_SPK_ECHO_REF { - "true" { - Object.Pipeline { - siggen-host-copier-capture [ - { - direction "capture" - index $SDW_SPK_ECHO_REF_PIPELINE_ID - Object.Widget.host-copier."1" { - stream_name "Speaker Echo Reference" - pcm_id $SDW_SPK_ECHO_REF_PCM_ID - } - Object.Widget.siggen."1" {} - } - ] - } - - Object.PCM.pcm [ - { - name "Speaker Echo Reference" - id $SDW_SPK_ECHO_REF_PCM_ID - direction "capture" - Object.Base.fe_dai.1 { - name "Speaker Echo Reference" - } - Object.PCM.pcm_caps.1 { - name "Speaker Echo Reference" - formats 'S16_LE,S24_LE,S32_LE' - } - } - ] - - Object.Base.route [ - { - source "alh-copier.Loopback_Virtual.25" - sink "siggen.$SDW_SPK_ECHO_REF_PCM_ID.1" - } - { - source "module-copier.21.22" - sink "siggen.$SDW_SPK_ECHO_REF_PCM_ID.1" - } - { - source "siggen.$SDW_SPK_ECHO_REF_PCM_ID.1" - sink "host-copier.$SDW_SPK_ECHO_REF_PCM_ID.capture" - } - ] - } # SDW_SPK_ECHO_REF true + "true" "platform/intel/sdw-amp-echo-ref.conf" } diff --git a/tools/topology/topology2/platform/intel/sdw-jack-echo-ref.conf b/tools/topology/topology2/platform/intel/sdw-jack-echo-ref.conf new file mode 100644 index 000000000000..fa506c6b2d46 --- /dev/null +++ b/tools/topology/topology2/platform/intel/sdw-jack-echo-ref.conf @@ -0,0 +1,108 @@ +Define { + SDW_JACK_ECHO_REF_PCM_ID 11 + SDW_JACK_ECHO_REF_PIPELINE_ID 12 +} + +IncludeByKey.SDW_JACK_ECHO_REF { + "true" { + Object.Pipeline { + siggen-host-copier-capture [ + { + direction "capture" + index $SDW_JACK_ECHO_REF_PIPELINE_ID + Object.Widget.host-copier."1" { + stream_name "Jack Echo Reference" + pcm_id $SDW_JACK_ECHO_REF_PCM_ID + num_input_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $JACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + num_output_audio_formats 3 + Object.Base.output_audio_format [ + { + out_rate $JACK_RATE + out_bit_depth 16 + out_valid_bit_depth 16 + } + { + out_rate $JACK_RATE + out_bit_depth 32 + out_valid_bit_depth 24 + } + { + out_rate $JACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + Object.Widget.siggen."1" { + num_input_pins 1 + num_output_pins 1 + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $JACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $JACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + } + ] + } + + Object.PCM.pcm [ + { + name "Jack Echo Reference" + id $SDW_JACK_ECHO_REF_PCM_ID + direction "capture" + Object.Base.fe_dai.1 { + name "Jack Echo Reference" + } + Object.PCM.pcm_caps.1 { + name "Jack Echo Reference" + formats 'S16_LE,S24_LE,S32_LE' + } + IncludeByKey.JACK_RATE { + "48000" { + rates '48000' + } + "96000" { + rates '96000' + } + "192000" { + rates '192000' + } + } + } + ] + + Object.Base.route [ + { + source "alh-copier.Loopback_Virtual.25" + sink "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" + } + { + source "module-copier.1.12" + sink "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" + } + { + source "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" + sink "host-copier.$SDW_JACK_ECHO_REF_PCM_ID.capture" + } + ] + } # SDW_JACK_ECHO_REF true +} diff --git a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf index 3862cf33c5b0..f40592ea73a2 100644 --- a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf @@ -11,8 +11,6 @@ Define { JACK_PLAYBACK_PCM_NAME "Jack Out" JACK_CAPTURE_PCM_NAME "Jack In" JACK_RATE 48000 - SDW_JACK_ECHO_REF_PCM_ID 11 - SDW_JACK_ECHO_REF_PIPELINE_ID 12 } # @@ -739,105 +737,5 @@ IncludeByKey.PASSTHROUGH { } IncludeByKey.SDW_JACK_ECHO_REF { - "true" { - Object.Pipeline { - siggen-host-copier-capture [ - { - direction "capture" - index $SDW_JACK_ECHO_REF_PIPELINE_ID - Object.Widget.host-copier."1" { - stream_name "Jack Echo Reference" - pcm_id $SDW_JACK_ECHO_REF_PCM_ID - num_input_audio_formats 1 - Object.Base.input_audio_format [ - { - in_rate $JACK_RATE - in_bit_depth 32 - in_valid_bit_depth 32 - } - ] - num_output_audio_formats 3 - Object.Base.output_audio_format [ - { - out_rate $JACK_RATE - out_bit_depth 16 - out_valid_bit_depth 16 - } - { - out_rate $JACK_RATE - out_bit_depth 32 - out_valid_bit_depth 24 - } - { - out_rate $JACK_RATE - out_bit_depth 32 - out_valid_bit_depth 32 - } - ] - } - Object.Widget.siggen."1" { - num_input_pins 1 - num_output_pins 1 - num_input_audio_formats 1 - num_output_audio_formats 1 - Object.Base.input_audio_format [ - { - in_rate $JACK_RATE - in_bit_depth 32 - in_valid_bit_depth 32 - } - ] - Object.Base.output_audio_format [ - { - out_rate $JACK_RATE - out_bit_depth 32 - out_valid_bit_depth 32 - } - ] - } - } - ] - } - - Object.PCM.pcm [ - { - name "Jack Echo Reference" - id $SDW_JACK_ECHO_REF_PCM_ID - direction "capture" - Object.Base.fe_dai.1 { - name "Jack Echo Reference" - } - Object.PCM.pcm_caps.1 { - name "Jack Echo Reference" - formats 'S16_LE,S24_LE,S32_LE' - } - IncludeByKey.JACK_RATE { - "48000" { - rates '48000' - } - "96000" { - rates '96000' - } - "192000" { - rates '192000' - } - } - } - ] - - Object.Base.route [ - { - source "alh-copier.Loopback_Virtual.25" - sink "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" - } - { - source "module-copier.1.12" - sink "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" - } - { - source "siggen.$SDW_JACK_ECHO_REF_PIPELINE_ID.1" - sink "host-copier.$SDW_JACK_ECHO_REF_PCM_ID.capture" - } - ] - } # SDW_JACK_ECHO_REF true + "true" "platform/intel/sdw-jack-echo-ref.conf" } From a8d30c6fd9546a1bfc565789f93b870a4b5bdc9d Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Tue, 24 Feb 2026 21:12:16 +0800 Subject: [PATCH 6/7] topology2: cavs-sdw: include echo reference file in cavs-sdw.conf sdw-amp-echo-ref.conf and sdw-jack-echo-ref.conf are included in the sdw-amp-generic.conf and sdw-jack-generic.conf if needed. But for the function topology usages, we will create the jack/amp function topology and the corresponding echo reference topology separately. Move to cavs-sdw.conf allow us create he jack/amp function topology and the corresponding echo reference topology separately Signed-off-by: Bard Liao --- tools/topology/topology2/cavs-sdw.conf | 7 +++++++ .../topology/topology2/platform/intel/sdw-amp-generic.conf | 4 ---- .../topology2/platform/intel/sdw-jack-generic.conf | 4 ---- 3 files changed, 7 insertions(+), 8 deletions(-) diff --git a/tools/topology/topology2/cavs-sdw.conf b/tools/topology/topology2/cavs-sdw.conf index 62d91277bb0e..29d0f73987fd 100644 --- a/tools/topology/topology2/cavs-sdw.conf +++ b/tools/topology/topology2/cavs-sdw.conf @@ -194,3 +194,10 @@ IncludeByKey.SDW_JACK { "true" "platform/intel/sdw-jack-generic.conf" } +IncludeByKey.SDW_JACK_ECHO_REF { + "true" "platform/intel/sdw-jack-echo-ref.conf" +} + +IncludeByKey.SDW_SPK_ECHO_REF { + "true" "platform/intel/sdw-amp-echo-ref.conf" +} diff --git a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf index f6e9b10dc37d..6a69c56cb557 100644 --- a/tools/topology/topology2/platform/intel/sdw-amp-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-amp-generic.conf @@ -1028,7 +1028,3 @@ IncludeByKey.SDW_AMP_FEEDBACK { ] } } - -IncludeByKey.SDW_SPK_ECHO_REF { - "true" "platform/intel/sdw-amp-echo-ref.conf" -} diff --git a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf index f40592ea73a2..583a91e86f87 100644 --- a/tools/topology/topology2/platform/intel/sdw-jack-generic.conf +++ b/tools/topology/topology2/platform/intel/sdw-jack-generic.conf @@ -735,7 +735,3 @@ IncludeByKey.PASSTHROUGH { ] } } - -IncludeByKey.SDW_JACK_ECHO_REF { - "true" "platform/intel/sdw-jack-echo-ref.conf" -} From 0b9fa7b70b8070f74a9d19d1ec339404efa3c5a9 Mon Sep 17 00:00:00 2001 From: Bard Liao Date: Tue, 24 Feb 2026 16:30:21 +0800 Subject: [PATCH 7/7] topology2: add SDW echo reference function topologies Add SoundWire echo reference function topologies. Signed-off-by: Bard Liao --- .../topology2/production/tplg-targets-sdca-generic.cmake | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tools/topology/topology2/production/tplg-targets-sdca-generic.cmake b/tools/topology/topology2/production/tplg-targets-sdca-generic.cmake index 5327b23aaf4e..79e2c2bed5d4 100644 --- a/tools/topology/topology2/production/tplg-targets-sdca-generic.cmake +++ b/tools/topology/topology2/production/tplg-targets-sdca-generic.cmake @@ -30,6 +30,15 @@ DEEP_BUF_SPK=true" "cavs-sdw\;sof-sdca-mic-id4\;SDW_JACK=false,SDW_DMIC=1,NUM_HDMIS=0,\ SDW_DMIC_STREAM=Capture-SmartMic" +"cavs-sdw\;sof-sdca-amp-ref\;SDW_JACK=false,NUM_HDMIS=0,JACK_RATE=48000,\ +SDW_AMP_FEEDBACK=false,SDW_SPK_ECHO_REF=true,SDW_SPK_ECHO_REF_PCM_ID=12" + +"cavs-sdw\;sof-sdca-amp-ref-dai\;SDW_JACK=false,NUM_HDMIS=0,JACK_RATE=48000,\ +SDW_AMP_FEEDBACK=false,SDW_ECHO_REF_DAI=true,SDW_SPK_ECHO_REF=true,SDW_SPK_ECHO_REF_PCM_ID=12" + +"cavs-sdw\;sof-sdca-jack-ref-dai\;SDW_JACK=false,NUM_HDMIS=0,JACK_RATE=48000,\ +SDW_ECHO_REF_DAI=true,SDW_JACK_ECHO_REF=true,SDW_JACK_ECHO_REF_PCM_ID=11" + "cavs-sdw\;sof-hdmi-pcm5-id2\;SDW_JACK=false,HDMI1_ID=2,HDMI2_ID=3,HDMI3_ID=4" "cavs-sdw\;sof-hdmi-pcm5-id3\;SDW_JACK=false,HDMI1_ID=3,HDMI2_ID=4,HDMI3_ID=5" "cavs-sdw\;sof-hdmi-pcm5-id4\;SDW_JACK=false,HDMI1_ID=4,HDMI2_ID=5,HDMI3_ID=6"