Skip to content

Commit b2fc849

Browse files
committed
topology2: dmic-wov-multi: remove redundant mixin and mixout between ECNS, KPB, and host copier
Remove redundant mixin and mixout components between ECNS output pins and downstream consumers: - ECNS Output Pin 0 (16 kHz mono clean) connects directly to KPB (kpb.116.1 / kpb.106.1). - ECNS Output Pin 1 (48 kHz stereo clean) connects directly to the Host Copier capture endpoint (host-copier.11.capture / host-copier.10.capture). - Remove mixin.115.1, mixin.115.2, mixout.116.1, and mixout.117.1 from dmic-wov-multi.conf. - Remove mixin.105.1, mixin.105.2, mixout.106.1, and mixout.107.1 from standalone 4ch manifests (PTL, WCL, TGL). - Update prebuilt topology binaries and README topology diagrams and PCM tables. - Validated on Aphid hardware across 10x S0 and 10x D0i3 WoV capture tests (20/20 PASS). Signed-off-by: Liam Girdwood <liam.r.girdwood@linux.intel.com>
1 parent 5a254da commit b2fc849

8 files changed

Lines changed: 57 additions & 528 deletions
-2.41 KB
Binary file not shown.
-2.41 KB
Binary file not shown.
-2.41 KB
Binary file not shown.

‎tools/topology/topology2/README.md‎

Lines changed: 5 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -485,18 +485,12 @@ graph TD
485485
subgraph P105["Pipeline 105 — ECNS DP Processing (Core 0, DP 20ms)"]
486486
MO105["mixout 105.1\n(4ch input)"]
487487
ECNS["ecns.105.1\n(ECNS DP Module, 20ms = 320 frames)\nCh 0,1: Mic | Ch 2,3: Echo Ref"]
488-
MIX105_1["mixin 105.1\nPin 0: Ch 0 Mono Clean"]
489-
MIX105_2["mixin 105.2\nPin 1: Ch 0,1 Stereo Clean"]
490488
MO105 --> ECNS
491-
ECNS -- "Pin 0 (Mono)" --> MIX105_1
492-
ECNS -- "Pin 1 (Stereo)" --> MIX105_2
493489
end
494490
495491
subgraph P106["Pipeline 106 — KPB History Buffer (Core 0, DP 20ms)"]
496-
MO106["mixout 106.1\n(1ch mono)"]
497492
KPB["kpb.106.1\n(2.0s mono history = 64 KB)\n16 kHz · 1ch · S16_LE\nPin 0: sel_sink | Pin 1: host_sink"]
498493
MIX106["mixin 106.1\n(3-way fanout mixin)"]
499-
MO106 --> KPB
500494
KPB -- "Pin 0 (sel_sink)" --> MIX106
501495
end
502496
@@ -528,14 +522,12 @@ graph TD
528522
end
529523
530524
subgraph P107["Pipeline 107 — ECNS Host PCM Capture (Core 0, LL 1ms)"]
531-
MO107["mixout 107.1\n(2ch stereo)"]
532525
HC10["host-copier.10\n(hw:0,10 · PCM 10)\n2ch · 16 kHz · S16_LE / S32_LE"]
533-
MO107 --> HC10
534526
end
535527
536528
MIX100 --> MO105
537-
MIX105_1 --> MO106
538-
MIX105_2 --> MO107
529+
ECNS -- "Pin 0 (Mono Clean direct)" --> KPB
530+
ECNS -- "Pin 1 (Stereo Clean direct)" --> HC10
539531
MIX106 --> MO101
540532
MIX106 --> MO102
541533
MIX106 --> MO103
@@ -742,31 +734,23 @@ graph TD
742734
MO115_1["mixout.115.1\n(Pin 1 In: 48 kHz · 2ch stereo)"]
743735
MO115_2["mixout.115.2\n(Pin 0 In: 16 kHz · 2ch stereo)"]
744736
ECNS115["ecns.115.1\n(Dual-Rate DP Module · 20ms period)\nPin 0: Extract Left Ch -> 16k Mono Clean\nPin 1: 1-to-1 Stereo Copy -> 48k Stereo Clean"]
745-
MIX115_1["mixin.115.1\n('KPB mixin' · Pin 0 Out: 16 kHz mono)"]
746-
MIX115_2["mixin.115.2\n('Host mixin' · Pin 1 Out: 48 kHz stereo)"]
747737
MO115_2 -->|"Pin 0 In"| ECNS115
748738
MO115_1 -->|"Pin 1 In"| ECNS115
749-
ECNS115 -- "Pin 0 (Mono 16k)" --> MIX115_1
750-
ECNS115 -- "Pin 1 (Stereo 48k)" --> MIX115_2
751739
end
752740
MIX110 --> MO115_1
753741
MIX119 --> MO115_2
754742
755743
subgraph P117["Pipeline 117 — ECNS Clean Host Capture (Core 0, LL 1ms)"]
756-
MO117["mixout.117.1\n(2ch clean stereo · 48 kHz)"]
757744
HC11["host-copier.11.capture\n(PCM 11: 'DMIC ECNS Capture')\n2ch · 48 kHz · S16/S32_LE\ncapture_compatible_d0i3 = true"]
758-
MO117 --> HC11
759745
end
760-
MIX115_2 --> MO117
746+
ECNS115 -- "Pin 1 (Stereo 48k Clean direct)" --> HC11
761747
762748
subgraph P116["Pipeline 116 — 20ms DP KPB History Buffer (Core 0, DP 20ms)"]
763-
MO116["mixout.116.1\n(1ch mono input · 16 kHz)"]
764749
KPB116["kpb.116.1\n(Key Phrase Buffer · 2000ms = 64 KB)\nPin 0: sel_sink (Real-time live feed)\nPin 1: host_sink (Drain History)"]
765750
MIX116["mixin.116.1\n(3-way detector fanout)"]
766-
MO116 --> KPB116
767751
KPB116 -- "Pin 0 (sel_sink)" --> MIX116
768752
end
769-
MIX115_1 --> MO116
753+
ECNS115 -- "Pin 0 (Mono 16k Clean direct)" --> KPB116
770754
771755
subgraph P111["Pipeline 111 — Slot 0 Detector (Core 0, DP 10ms)"]
772756
MO111["mixout.111.1"]
@@ -846,7 +830,7 @@ graph TD
846830
| **PCM 5** | `HDMI1` | Playback | 2–8 | 48 kHz | S16_LE, S32_LE | P50, P51 | Intel Display Audio HDMI/DP 1 (`host-copier.5.playback` -> `dai-copier.HDA.iDisp1.playback`) | No |
847831
| **PCM 6** | `HDMI2` | Playback | 2–8 | 48 kHz | S16_LE, S32_LE | P60, P61 | Intel Display Audio HDMI/DP 2 (`host-copier.6.playback` -> `dai-copier.HDA.iDisp2.playback`) | No |
848832
| **PCM 7** | `HDMI3` | Playback | 2–8 | 48 kHz | S16_LE, S32_LE | P70, P71 | Intel Display Audio HDMI/DP 3 (`host-copier.7.playback` -> `dai-copier.HDA.iDisp3.playback`) | No |
849-
| **PCM 11** | `DMIC ECNS Capture` | Capture | 2 | 48 kHz | S16_LE, S32_LE | P110, P115, P117 | Continuous clean stereo audio capture processed through 20ms DP ECNS module (`dai-copier.DMIC.dmic01.capture` -> `mixin.110.1` -> `mixout.115.1` -> `ecns.115.1` Pin 1 -> `mixin.115.2` -> `mixout.117.1` -> `host-copier.11.capture`) | **Yes** (`capture_compatible_d0i3 true`) |
833+
| **PCM 11** | `DMIC ECNS Capture` | Capture | 2 | 48 kHz | S16_LE, S32_LE | P110, P115, P117 | Continuous clean stereo audio capture processed through 20ms DP ECNS module (`dai-copier.DMIC.dmic01.capture` -> `mixin.110.1` -> `mixout.115.1` -> `ecns.115.1` Pin 1 -> `host-copier.11.capture`) | **Yes** (`capture_compatible_d0i3 true`) |
850834
| **PCM 12** | `DMIC Multi-WOV` | Capture | 1 | 16 kHz | S16_LE, S32_LE | P119, P115, P116, P111-113, P114 | Gated mono Wake-on-Voice capture stream from 4-pin WOV Arbiter (`dai-copier.DMIC.dmic16k.capture` -> `mixin.119.1` -> `mixout.115.2` -> `ecns.115.1` Pin 0 mono clean -> `kpb.116.1` -> `wov-arbiter.114.1` -> `host-copier.12.capture`). Supports S0 keyword detection and D0i3 platform suspend/wake via AudioDSP MSI IRQ. | **Yes** (`capture_compatible_d0i3 true`) |
851835
| **PCM 31** | `Deepbuffer Jack Out` | Playback | 2 | 48 kHz | S16_LE, S24_LE, S32_LE | P15, P1 | Low-power deep-buffer playback to headphone jack (`host-copier.31.playback` -> `gain.15.1` -> `mixin.15.1` -> `mixout.1.1`) | No |
852836
| **PCM 35** | `Deepbuffer Speaker` | Playback | 2 | 48 kHz | S16_LE, S24_LE, S32_LE | P16, P21 | Low-power deep-buffer playback to SmartAmp speakers (`host-copier.35.playback` -> `gain.16.1` -> `mixin.16.1` -> `mixout.21.1`) | No |

‎tools/topology/topology2/dmic-wov-multi-4ch-manifest.conf‎

Lines changed: 14 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -198,8 +198,8 @@ Object.Pipeline."custom-capture" [
198198
# ---------------------------------------------------------------------------
199199
# Pipeline 105 — ECNS DP Pipeline (Core 0, 20ms DP, Static)
200200
# Mixout.105.1 -> ECNS.105.1
201-
# Output Pin 0: Ch 0 mono (16k) -> Mixin.105.1 ("KPB mixin")
202-
# Output Pin 1: Ch 0,1 stereo (16k) -> Mixin.105.2 ("Host mixin")
201+
# Output Pin 0: Ch 0 mono (16k) -> KPB.106.1
202+
# Output Pin 1: Ch 0,1 stereo (16k) -> Host-Copier.10 (ALSA PCM 10)
203203
# ---------------------------------------------------------------------------
204204
Object.Pipeline."custom-dp-capture" [
205205
{
@@ -277,64 +277,13 @@ Object.Pipeline."custom-dp-capture" [
277277
obs 1280
278278
}
279279
]
280-
}
281-
282-
# Mixin 105.1: Mono clean output (Pin 0) to KPB
283-
Object.Widget.mixin.1 {
284-
num_input_pins 1
285-
num_output_pins 1
286-
num_input_audio_formats 1
287-
num_output_audio_formats 1
288-
289-
Object.Base.input_audio_format [
290-
{
291-
in_rate 16000
292-
in_channels 1
293-
in_ch_cfg $CHANNEL_CONFIG_MONO
294-
in_ch_map $CHANNEL_MAP_MONO
295-
in_bit_depth 16
296-
in_valid_bit_depth 16
297-
}
298-
]
299-
Object.Base.output_audio_format [
300-
{
301-
out_rate 16000
302-
out_channels 1
303-
out_ch_cfg $CHANNEL_CONFIG_MONO
304-
out_ch_map $CHANNEL_MAP_MONO
305-
out_bit_depth 16
306-
out_valid_bit_depth 16
307-
}
308-
]
309-
}
310280

311-
# Mixin 105.2: Stereo clean output (Pin 1) to Host Copier
312-
Object.Widget.mixin.2 {
313-
num_input_pins 1
314-
num_output_pins 1
315-
num_input_audio_formats 1
316-
num_output_audio_formats 1
317-
318-
Object.Base.input_audio_format [
319-
{
320-
in_rate 16000
321-
in_channels 2
322-
in_ch_cfg $CHANNEL_CONFIG_STEREO
323-
in_ch_map $CHANNEL_MAP_STEREO
324-
in_bit_depth 16
325-
in_valid_bit_depth 16
326-
}
327-
]
328-
Object.Base.output_audio_format [
329-
{
330-
out_rate 16000
331-
out_channels 2
332-
out_ch_cfg $CHANNEL_CONFIG_STEREO
333-
out_ch_map $CHANNEL_MAP_STEREO
334-
out_bit_depth 16
335-
out_valid_bit_depth 16
336-
}
337-
]
281+
Object.Base.output_pin_binding.1 {
282+
output_pin_binding_name "kpb.106.1"
283+
}
284+
Object.Base.output_pin_binding.2 {
285+
output_pin_binding_name "host-copier.$ECNS_PCM_ID.capture"
286+
}
338287
}
339288

340289
Object.Widget.pipeline.1 {
@@ -347,42 +296,14 @@ Object.Pipeline."custom-dp-capture" [
347296

348297
# ---------------------------------------------------------------------------
349298
# Pipeline 107 — ECNS Host Capture Pipeline (Core 0, LL 1ms)
350-
# Mixout.107.1 (2ch stereo) -> Host-Copier.10 (ALSA PCM 10)
299+
# ECNS.105.1 Pin 1 (2ch stereo clean) -> Host-Copier.10 (ALSA PCM 10)
351300
# ---------------------------------------------------------------------------
352301
Object.Pipeline."custom-capture" [
353302
{
354303
index 107
355304
format $FORMAT
356305
rate 16000
357306

358-
Object.Widget.mixout.1 {
359-
num_input_pins 1
360-
num_output_pins 1
361-
num_input_audio_formats 1
362-
num_output_audio_formats 1
363-
364-
Object.Base.input_audio_format [
365-
{
366-
in_rate 16000
367-
in_channels 2
368-
in_ch_cfg $CHANNEL_CONFIG_STEREO
369-
in_ch_map $CHANNEL_MAP_STEREO
370-
in_bit_depth 16
371-
in_valid_bit_depth 16
372-
}
373-
]
374-
Object.Base.output_audio_format [
375-
{
376-
out_rate 16000
377-
out_channels 2
378-
out_ch_cfg $CHANNEL_CONFIG_STEREO
379-
out_ch_map $CHANNEL_MAP_STEREO
380-
out_bit_depth 16
381-
out_valid_bit_depth 16
382-
}
383-
]
384-
}
385-
386307
Object.Widget.host-copier.1 {
387308
stream_name $ECNS_PCM_CAPS
388309
pcm_id $ECNS_PCM_ID
@@ -434,42 +355,14 @@ Object.Pipeline."custom-capture" [
434355

435356
# ---------------------------------------------------------------------------
436357
# Pipeline 106 — KPB & WOV Fanout (Core 0, LL 1ms)
437-
# Mixout.106.1 -> KPB.106.1 (1ch mono, 2000ms) -> Mixin.106.1 (fanout 1 -> 3)
358+
# ECNS.105.1 Pin 0 (1ch mono clean) -> KPB.106.1 (2000ms) -> Mixin.106.1 (fanout 1 -> 3)
438359
# ---------------------------------------------------------------------------
439360
Object.Pipeline."custom-capture" [
440361
{
441362
index 106
442363
format $FORMAT
443364
rate 16000
444365

445-
Object.Widget.mixout.1 {
446-
num_input_pins 1
447-
num_output_pins 1
448-
num_input_audio_formats 1
449-
num_output_audio_formats 1
450-
451-
Object.Base.input_audio_format [
452-
{
453-
in_rate 16000
454-
in_channels 1
455-
in_ch_cfg $CHANNEL_CONFIG_MONO
456-
in_ch_map $CHANNEL_MAP_MONO
457-
in_bit_depth 16
458-
in_valid_bit_depth 16
459-
}
460-
]
461-
Object.Base.output_audio_format [
462-
{
463-
out_rate 16000
464-
out_channels 1
465-
out_ch_cfg $CHANNEL_CONFIG_MONO
466-
out_ch_map $CHANNEL_MAP_MONO
467-
out_bit_depth 16
468-
out_valid_bit_depth 16
469-
}
470-
]
471-
}
472-
473366
Object.Widget.kpb.1 {
474367
history_depth_ms 2000
475368
num_input_pins 1
@@ -1047,16 +940,12 @@ Object.Base.route [
1047940
{ source "mixin.100.1" sink "mixout.105.1" }
1048941
{ source "mixout.105.1" sink "ecns.105.1" }
1049942

1050-
# ECNS Output Pin 0 (mono) to KPB mixin
1051-
{ source "ecns.105.1" sink "mixin.105.1" }
1052-
{ source "mixin.105.1" sink "mixout.106.1" }
1053-
{ source "mixout.106.1" sink "kpb.106.1" }
943+
# ECNS Output Pin 0 (mono) direct to KPB
944+
{ source "ecns.105.1" sink "kpb.106.1" }
1054945
{ source "kpb.106.1" sink "mixin.106.1" }
1055946

1056-
# ECNS Output Pin 1 (stereo) to Host Copier 10
1057-
{ source "ecns.105.1" sink "mixin.105.2" }
1058-
{ source "mixin.105.2" sink "mixout.107.1" }
1059-
{ source "mixout.107.1" sink "host-copier.$ECNS_PCM_ID.capture" }
947+
# ECNS Output Pin 1 (stereo) direct to Host Copier 10
948+
{ source "ecns.105.1" sink "host-copier.$ECNS_PCM_ID.capture" }
1060949

1061950
# KPB mixin fanning out to 3 WOV detector slots (MFCC + MWW -> WOV Arbiter)
1062951
{ source "mixin.106.1" sink "mixout.101.1" }

0 commit comments

Comments
 (0)