From 2584500c35544d2d833c330e3bd8bf185b4a9dec Mon Sep 17 00:00:00 2001 From: Libin Yang Date: Sun, 11 Dec 2022 19:51:39 +0800 Subject: [PATCH] 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 --- .../platform/intel/dmic-default.conf | 14 ++ .../platform/intel/dmic-generic.conf | 4 + .../topology2/platform/intel/dmic-wov.conf | 137 ++++++++++++++++++ 3 files changed, 155 insertions(+) create mode 100644 tools/topology/topology2/platform/intel/dmic-wov.conf diff --git a/tools/topology/topology2/platform/intel/dmic-default.conf b/tools/topology/topology2/platform/intel/dmic-default.conf index 9ea2c5187..543ae9e1b 100644 --- a/tools/topology/topology2/platform/intel/dmic-default.conf +++ b/tools/topology/topology2/platform/intel/dmic-default.conf @@ -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' } diff --git a/tools/topology/topology2/platform/intel/dmic-generic.conf b/tools/topology/topology2/platform/intel/dmic-generic.conf index 77abca16a..748dc2b19 100644 --- a/tools/topology/topology2/platform/intel/dmic-generic.conf +++ b/tools/topology/topology2/platform/intel/dmic-generic.conf @@ -62,6 +62,10 @@ Object.Dai { } } +IncludeByKey.INCLUDE_WOV { + "true" "platform/intel/dmic-wov.conf" +} + Object.Pipeline { passthrough-capture.100 { format $FORMAT diff --git a/tools/topology/topology2/platform/intel/dmic-wov.conf b/tools/topology/topology2/platform/intel/dmic-wov.conf new file mode 100644 index 000000000..80cc10237 --- /dev/null +++ b/tools/topology/topology2/platform/intel/dmic-wov.conf @@ -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 + } + } +}