topology2: add dmic-wov.conf

The dmic-wov.conf file implements the WOV feature. The connection is

DMIC ------> KPB ------------------------------> host_copier
              |                                    ^
              |                                    |
              |----> micsel ----> wov ------> virtual_widget

The DMIC and KPB is on DAI ppl.
The host_copier is on Host ppl.
The micsel, wov and virtual is on wov ppl.

The connection between host_copier and virtual_widget is a
virtual connection. The virtual_widget doesn't exist in the FW.

Signed-off-by: Libin Yang <libin.yang@intel.com>
This commit is contained in:
Libin Yang 2022-12-11 19:51:39 +08:00 committed by Liam Girdwood
parent ef37adc288
commit 2584500c35
3 changed files with 155 additions and 0 deletions

View File

@ -19,4 +19,18 @@ Define {
DMIC1_NAME dmic16k
DMIC0_PCM_CAPS "Passthrough Capture 11"
DMIC0_PIPELINE_STREAM_NAME "copier.DMIC.12.1"
DMIC1_HOST_PIPELINE_ID 18
DMIC1_DAI_PIPELINE_ID 19
WOV_PIPELINE_ID 20
DMIC1_HOST_PIPELINE_SINK 'copier.host.18.1'
DMIC_WOV_DAI_PIPELINE_SRC 'copier.DMIC.19.1'
DMIC_WOV_DAI_PIPELINE_KPB 'kpb.19.1'
WOV_PIPELINE_SINK 'micsel.20.1'
WOV_PIPELINE_VIRTUAL 'virtual.detect_sink'
INCLUDE_WOV 'false'
# The UUID corresponds to the test detect component
WOV_UUID '1f:d5:a8:eb:27:78:b5:47:82:ee:de:6e:77:43:af:67'
WOV_CPC '360000'
DMIC1_PCM_CAPS 'Passthrough Capture 18'
DMIC1_PIPELINE_STREAM_NAME 'copier.DMIC.19.1'
}

View File

@ -62,6 +62,10 @@ Object.Dai {
}
}
IncludeByKey.INCLUDE_WOV {
"true" "platform/intel/dmic-wov.conf"
}
Object.Pipeline {
passthrough-capture.100 {
format $FORMAT

View File

@ -0,0 +1,137 @@
Object.Pipeline {
passthrough-capture.1 {
format $FORMAT
rate 16000
rate_min 16000
rate_max 16000
index $DMIC1_HOST_PIPELINE_ID
Object.Widget.pipeline.1 {
stream_name $DMIC1_PIPELINE_STREAM_NAME
}
Object.Widget.copier.1 {
stream_name $DMIC1_PCM_CAPS
Object.Base.audio_format.1 {
in_rate 16000
in_bit_depth 32
in_valid_bit_depth 32
out_rate 16000
out_bit_depth 32
out_valid_bit_depth 32
dma_buffer_size "$[$ibs * 2]"
}
Object.Base.audio_format.2 {
in_rate 16000
in_channels 4
in_bit_depth 32
in_valid_bit_depth 32
out_rate 16000
out_channels 4
out_bit_depth 32
out_valid_bit_depth 32
dma_buffer_size "$[$ibs * 2]"
in_ch_cfg $CHANNEL_CONFIG_3_POINT_1
in_ch_map $CHANNEL_MAP_3_POINT_1
out_ch_cfg $CHANNEL_CONFIG_3_POINT_1
out_ch_map $CHANNEL_MAP_3_POINT_1
}
}
}
dai-kpb-be.12 {
direction "capture"
format $FORMAT
rate 16000
rate_min 16000
rate_max 16000
index $DMIC1_DAI_PIPELINE_ID
Object.Widget.copier.1 {
dai_index 1
type "dai_out"
dai_type "DMIC"
copier_type "DMIC"
type dai_out
stream_name $DMIC1_NAME
node_type $DMIC_LINK_INPUT_CLASS
Object.Base.audio_format.1 {
in_rate 16000
in_bit_depth 32
in_valid_bit_depth 32
out_rate 16000
out_bit_depth 32
out_valid_bit_depth 32
dma_buffer_size "$[$ibs * 2]"
}
Object.Base.audio_format.2 {
in_rate 16000
in_channels 4
in_bit_depth 32
in_valid_bit_depth 32
out_rate 16000
out_channels 4
out_bit_depth 32
out_valid_bit_depth 32
dma_buffer_size "$[$ibs * 2]"
in_ch_cfg $CHANNEL_CONFIG_3_POINT_1
in_ch_map $CHANNEL_MAP_3_POINT_1
out_ch_cfg $CHANNEL_CONFIG_3_POINT_1
out_ch_map $CHANNEL_MAP_3_POINT_1
}
}
Object.Widget.kpb.1 {
Object.Base.src_pin_binding.1 {
src_pin_binding_wname $WOV_PIPELINE_SINK
}
Object.Base.src_pin_binding.2 {
src_pin_binding_wname $DMIC1_HOST_PIPELINE_SINK
}
Object.Base.src_pin_binding.3 {
src_pin_binding_wname "NotConnected"
}
}
}
wov-detect.1 {
index $WOV_PIPELINE_ID
format s32le
channels 2
Object.Widget.wov.1 {
uuid $WOV_UUID
cpc $WOV_CPC
}
}
}
Object.Base {
route.102 {
source $DMIC_WOV_DAI_PIPELINE_KPB
sink $DMIC1_HOST_PIPELINE_SINK
}
route.103 {
source $DMIC_WOV_DAI_PIPELINE_KPB
sink $WOV_PIPELINE_SINK
}
route.104 {
source $WOV_PIPELINE_VIRTUAL
sink $DMIC1_HOST_PIPELINE_SINK
}
}
Object.PCM {
pcm.11 {
name "DMIC16k"
id 11
direction "capture"
Object.Base.fe_dai."DMIC16k" {}
Object.PCM.pcm_caps."capture" {
name $DMIC1_PCM_CAPS
# only 32-bit capture supported now
formats 'S32_LE'
channels_min $NUM_DMICS
channels_max $NUM_DMICS
rate_min 16000
rate_max 16000
}
}
}