From 949522eb2c88daa5a6671dc71affd54f99cb0fc8 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 20 Dec 2023 18:07:37 +0200 Subject: [PATCH 1/7] Tools: Topology2: Add DMIC1 defaults definitions The needed defaults for DMIC1 for PCM ID and sample rate are added similarly as for DMIC0 for later use. DMIC1 related pipelines are not used by default so DMIC1_ENABLE is set to false. Signed-off-by: Seppo Ingalsuo --- tools/topology/topology2/platform/intel/dmic-default.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/topology/topology2/platform/intel/dmic-default.conf b/tools/topology/topology2/platform/intel/dmic-default.conf index 0bbb288e9e03..6ebcab81f89b 100644 --- a/tools/topology/topology2/platform/intel/dmic-default.conf +++ b/tools/topology/topology2/platform/intel/dmic-default.conf @@ -7,6 +7,7 @@ Define { DMIC0_ID 6 # Default link ID based on HDA generic machine driver DMIC1_ID 7 # Default link ID based on HDA generic machine driver DMIC0_PCM_ID 10 # Default DMIC0 PCM ID + DMIC1_PCM_ID 11 # Default DMIC1 PCM ID FORMAT s32le # IO_CLK applicable for TGL and ADL DMIC_IO_CLK 38400000 @@ -36,4 +37,7 @@ Define { DMIC_CORE_ID 0 PASSTHROUGH "false" DMIC_PIPELINE_PRIORITY 0 + DMIC0_RATE 48000 + DMIC1_RATE 16000 + DMIC1_ENABLE "false" } From d0fec4744c1a8b426f3d15ad2e31a8439fbdfaaf Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 3 Jan 2024 12:08:03 +0200 Subject: [PATCH 2/7] Tools: Topology2: Add format to all widgets in dmic-generic.conf The input audio format and output audio format definitions are missing for the copiers and IIR. The formats are added in preparation to be able to set non-default sample rate for all widgets. Signed-off-by: Seppo Ingalsuo --- .../platform/intel/dmic-generic.conf | 84 +++++++++++++++++++ 1 file changed, 84 insertions(+) diff --git a/tools/topology/topology2/platform/intel/dmic-generic.conf b/tools/topology/topology2/platform/intel/dmic-generic.conf index 11fede22cf63..c56b4f566c50 100644 --- a/tools/topology/topology2/platform/intel/dmic-generic.conf +++ b/tools/topology/topology2/platform/intel/dmic-generic.conf @@ -198,16 +198,100 @@ IncludeByKey.PASSTHROUGH { type dai_out stream_name $DMIC0_NAME node_type $DMIC_LINK_INPUT_CLASS + num_input_audio_formats 2 + Object.Base.input_audio_format [ + { + in_bit_depth 32 + in_valid_bit_depth 32 + } + { + in_channels 4 + in_bit_depth 32 + in_valid_bit_depth 32 + in_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + in_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + num_output_audio_formats 2 + Object.Base.output_audio_format [ + { + out_bit_depth 32 + out_valid_bit_depth 32 + } + { + out_channels 4 + out_bit_depth 32 + out_valid_bit_depth 32 + out_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + out_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] } Object.Widget.module-copier."2" { stream_name $DMIC0_NAME + num_input_audio_formats 2 + Object.Base.input_audio_format [ + { + in_bit_depth 32 + in_valid_bit_depth 32 + } + { + in_channels 4 + in_bit_depth 32 + in_valid_bit_depth 32 + in_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + in_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + num_output_audio_formats 2 + Object.Base.output_audio_format [ + { + out_bit_depth 32 + out_valid_bit_depth 32 + } + { + out_channels 4 + out_bit_depth 32 + out_valid_bit_depth 32 + out_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + out_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] } Object.Widget.eqiir.1 { Object.Control.bytes."1" { name 'DMIC0 Capture IIR Eq' } + num_input_audio_formats 2 + Object.Base.input_audio_format [ + { + in_bit_depth 32 + in_valid_bit_depth 32 + } + { + in_channels 4 + in_bit_depth 32 + in_valid_bit_depth 32 + in_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + in_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + num_output_audio_formats 2 + Object.Base.output_audio_format [ + { + out_bit_depth 32 + out_valid_bit_depth 32 + } + { + out_channels 4 + out_bit_depth 32 + out_valid_bit_depth 32 + out_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + out_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] } Object.Widget.pipeline."1" { core $DMIC_CORE_ID From 416a914244f32d3022db64101b1c8788caf6b6e9 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 13 Mar 2024 16:04:58 +0200 Subject: [PATCH 3/7] Tools: Topology2: Use rate definition in dmic-generic.conf The added DMIC0_RATE allows to use the DAI, pipelines, and PCM with any supported rate for DMIC in range 8 - 96 kHz. E.g. configure DMIC0 to 96 kHz. There is no change to existing functionality with default 48 kHz rate. Signed-off-by: Seppo Ingalsuo --- .../platform/intel/dmic-generic.conf | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/tools/topology/topology2/platform/intel/dmic-generic.conf b/tools/topology/topology2/platform/intel/dmic-generic.conf index c56b4f566c50..4a49533fe2c3 100644 --- a/tools/topology/topology2/platform/intel/dmic-generic.conf +++ b/tools/topology/topology2/platform/intel/dmic-generic.conf @@ -9,6 +9,7 @@ Object.Dai.DMIC [ id $DMIC0_ID driver_version $DMIC_DRIVER_VERSION io_clk $DMIC_IO_CLK + sample_rate $DMIC0_RATE clk_min 500000 clk_max 4800000 unmute_ramp_time_ms 200 @@ -84,10 +85,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -97,10 +100,12 @@ IncludeByKey.PASSTHROUGH { ] Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -115,10 +120,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -128,10 +135,12 @@ IncludeByKey.PASSTHROUGH { ] Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -155,10 +164,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -168,10 +179,12 @@ IncludeByKey.PASSTHROUGH { ] Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -201,10 +214,12 @@ IncludeByKey.PASSTHROUGH { num_input_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -215,10 +230,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -233,10 +250,12 @@ IncludeByKey.PASSTHROUGH { num_input_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -247,10 +266,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -267,10 +288,12 @@ IncludeByKey.PASSTHROUGH { num_input_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -281,10 +304,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -324,10 +349,12 @@ IncludeByKey.PASSTHROUGH { num_input_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -338,10 +365,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -365,10 +394,12 @@ IncludeByKey.PASSTHROUGH { num_input_audio_formats 2 Object.Base.input_audio_format [ { + in_rate $DMIC0_RATE in_bit_depth 32 in_valid_bit_depth 32 } { + in_rate $DMIC0_RATE in_channels 4 in_bit_depth 32 in_valid_bit_depth 32 @@ -379,10 +410,12 @@ IncludeByKey.PASSTHROUGH { num_output_audio_formats 2 Object.Base.output_audio_format [ { + out_rate $DMIC0_RATE out_bit_depth 32 out_valid_bit_depth 32 } { + out_rate $DMIC0_RATE out_channels 4 out_bit_depth 32 out_valid_bit_depth 32 @@ -417,6 +450,8 @@ Object.PCM.pcm [ formats 'S32_LE' channels_min $NUM_DMICS channels_max $NUM_DMICS + rate_min $DMIC0_RATE + rate_max $DMIC0_RATE } } ] From 0a1d3a17b298351c66f85bb01277df0e73287f71 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 3 Jan 2024 12:12:11 +0200 Subject: [PATCH 4/7] Tools: Topology2: Add pass-through capture for DMIC1 This patch optionally includes dmic1-passthrough.conf if DMIC1_ENABLE is set in topologies build to passthrough. The sample rate of DMIC1 DAI can be set to 8 - 96 kHz with macro DMIC1_RATE. Signed-off-by: Seppo Ingalsuo --- .../platform/intel/dmic-generic.conf | 6 +- .../platform/intel/dmic1-passthrough.conf | 119 ++++++++++++++++++ 2 files changed, 124 insertions(+), 1 deletion(-) create mode 100644 tools/topology/topology2/platform/intel/dmic1-passthrough.conf diff --git a/tools/topology/topology2/platform/intel/dmic-generic.conf b/tools/topology/topology2/platform/intel/dmic-generic.conf index 4a49533fe2c3..c37870087a75 100644 --- a/tools/topology/topology2/platform/intel/dmic-generic.conf +++ b/tools/topology/topology2/platform/intel/dmic-generic.conf @@ -40,7 +40,7 @@ Object.Dai.DMIC [ dai_index 1 driver_version $DMIC_DRIVER_VERSION io_clk $DMIC_IO_CLK - sample_rate 16000 + sample_rate $DMIC1_RATE clk_min 500000 clk_max 4800000 unmute_ramp_time_ms 200 @@ -455,3 +455,7 @@ Object.PCM.pcm [ } } ] + +IncludeByKey.DMIC1_ENABLE { + "passthrough" "platform/intel/dmic1-passthrough.conf" +} diff --git a/tools/topology/topology2/platform/intel/dmic1-passthrough.conf b/tools/topology/topology2/platform/intel/dmic1-passthrough.conf new file mode 100644 index 000000000000..07b61783988e --- /dev/null +++ b/tools/topology/topology2/platform/intel/dmic1-passthrough.conf @@ -0,0 +1,119 @@ +Define { + DMIC1_PCM_NAME "DMIC Raw2nd" +} + +Object.Pipeline.host-gateway-capture [ + { + index $DMIC1_HOST_PIPELINE_ID + Object.Widget.host-copier.1 { + stream_name $DMIC1_PCM_CAPS + pcm_id $DMIC1_PCM_ID + num_input_audio_formats 2 + Object.Base.input_audio_format [ + { + in_rate $DMIC1_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + { + in_rate $DMIC1_RATE + in_channels 4 + in_bit_depth 32 + in_valid_bit_depth 32 + in_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + in_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + num_output_audio_formats 2 + Object.Base.output_audio_format [ + { + out_rate $DMIC1_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + { + out_rate $DMIC1_RATE + out_channels 4 + out_bit_depth 32 + out_valid_bit_depth 32 + out_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + out_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + } + } +] + +Object.Pipeline.io-gateway-capture [ + { + index $DMIC1_DAI_PIPELINE_ID + Object.Widget.dai-copier.1 { + dai_index 1 + dai_type "DMIC" + copier_type "DMIC" + type dai_out + stream_name $DMIC1_NAME + node_type $DMIC_LINK_INPUT_CLASS + num_input_audio_formats 2 + Object.Base.input_audio_format [ + { + in_rate $DMIC1_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + { + in_rate $DMIC1_RATE + in_channels 4 + in_bit_depth 32 + in_valid_bit_depth 32 + in_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + in_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + num_output_audio_formats 2 + Object.Base.output_audio_format [ + { + out_rate $DMIC1_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + { + out_rate $DMIC1_RATE + out_channels 4 + out_bit_depth 32 + out_valid_bit_depth 32 + out_ch_cfg $CHANNEL_CONFIG_3_POINT_1 + out_ch_map $CHANNEL_MAP_3_POINT_1 + } + ] + } + } +] + +Object.Base.route [ + { + source "dai-copier.DMIC.$DMIC1_NAME.capture" + sink "host-copier.$DMIC1_PCM_ID.capture" + } +] + +Object.PCM.pcm [ + { + name "$DMIC1_PCM_NAME" + id $DMIC1_PCM_ID + direction "capture" + Object.Base.fe_dai.1 { + name "$DMIC1_PCM_NAME" + } + + Object.PCM.pcm_caps.1 { + name $DMIC1_PCM_CAPS + # only 32-bit capture supported now + formats 'S32_LE' + channels_min $NUM_DMICS + channels_max $NUM_DMICS + rate_min $DMIC1_RATE + rate_max $DMIC1_RATE + } + } +] From 442a006d6d48a056d369ff604c47f98b6eb65560 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 3 Jan 2024 12:16:04 +0200 Subject: [PATCH 5/7] Tools: Topology2: Add build of test topologies with DMIC1 enabled Topologies with DMIC1 passthrough capture are added to development directory with 16 and 96 kHz rates. Also a topology with DMIC0 changed to 96 kHz is added as example to test DMIC0 with other than default rate. The new topologies are: - sof-hda-generic-cavs25-4ch-48k-16k - sof-hda-generic-ace1-4ch-48k-16k - sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-16k - sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-96k - sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-96k - sof-mtl-max98360a-rt5682-4ch-48k-16k - sof-mtl-max98360a-rt5682-4ch-48k-96k The DMIC1 PCM ID with 96 kHz is set to 22 (capture ultrasonic). PCM IDs definition is in: https://github.com/thesofproject/sof/files/14021187/PCMDeviceList.txt Signed-off-by: Seppo Ingalsuo --- .../topology2/development/tplg-targets.cmake | 55 +++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/tools/topology/topology2/development/tplg-targets.cmake b/tools/topology/topology2/development/tplg-targets.cmake index 213b61406d36..7b2135ca0edf 100644 --- a/tools/topology/topology2/development/tplg-targets.cmake +++ b/tools/topology/topology2/development/tplg-targets.cmake @@ -85,6 +85,61 @@ PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-efx-generic-4ch.bin,\ EFX_FIR_PARAMS=passthrough,EFX_IIR_PARAMS=passthrough,\ EFX_DRC_COMPONENT=multiband,EFX_MBDRC_PARAMS=passthrough" +# With 16 kHz DMIC1 +"sof-hda-generic\;sof-hda-generic-cavs25-4ch-48k-16k\;HDA_CONFIG=mix,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-cavs25-4ch-48k-16k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC1_ENABLE=passthrough,DMIC1_RATE=16000" + +"sof-hda-generic\;sof-hda-generic-ace1-4ch-48k-16k\;HDA_CONFIG=mix,PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-ace1-4ch-48k-16k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC1_ENABLE=passthrough,DMIC1_RATE=16000" + +# SDW + DMIC + HDMI, with 16 kHz DMIC1 +"cavs-sdw\;sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-16k\;PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-16k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_ID=3,DMIC1_ID=4,\ +DMIC1_ENABLE=passthrough,DMIC1_RATE=16000,\ +BT_NAME=SSP1-BT,BT_INDEX=1,BT_PCM_ID=20,BT_ID=8,BT_PCM_NAME=Bluetooth,ADD_BT=true,\ +NUM_SDW_AMP_LINKS=1,SDW_SPK_STREAM=SDW2-Playback,SDW_AMP_FEEDBACK=false,\ +SDW_JACK_CAPTURE_CH=1,DEEPBUFFER_FW_DMA_MS=100,DEEPBUFFER_D0I3_COMPATIBLE=true" + +# SDW + DMIC + HDMI, with 96 kHz DMIC1 +"cavs-sdw\;sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-96k\;PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-96k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_ID=3,DMIC1_ID=4,\ +DMIC1_ENABLE=passthrough,DMIC1_RATE=96000,DMIC1_PCM_ID=22,\ +BT_NAME=SSP1-BT,BT_INDEX=1,BT_PCM_ID=20,BT_ID=8,BT_PCM_NAME=Bluetooth,ADD_BT=true,\ +NUM_SDW_AMP_LINKS=1,SDW_SPK_STREAM=SDW2-Playback,SDW_AMP_FEEDBACK=false,\ +SDW_JACK_CAPTURE_CH=1,DEEPBUFFER_FW_DMA_MS=100,DEEPBUFFER_D0I3_COMPATIBLE=true" + +# SDW + DMIC + HDMI, with 96 kHz DMIC0 +"cavs-sdw\;sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-96k\;PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-96k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_ID=3,DMIC1_ID=4,DMIC0_RATE=96000,\ +BT_NAME=SSP1-BT,BT_INDEX=1,BT_PCM_ID=20,BT_ID=8,BT_PCM_NAME=Bluetooth,ADD_BT=true,\ +NUM_SDW_AMP_LINKS=1,SDW_SPK_STREAM=SDW2-Playback,SDW_AMP_FEEDBACK=false,\ +SDW_JACK_CAPTURE_CH=1,DEEPBUFFER_FW_DMA_MS=100,DEEPBUFFER_D0I3_COMPATIBLE=true" + +# SDW + DMIC + HDMI, with 16 kHz DMIC1 +"cavs-rt5682\;sof-mtl-max98360a-rt5682-4ch-48k-16k\;PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-max98360a-rt5682-4ch-48k-16k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_PCM_ID=99,\ +DMIC1_ENABLE=passthrough,DMIC1_RATE=16000,DMIC1_PCM_ID=100,\ +DEEPBUFFER_FW_DMA_MS=10,HEADSET_SSP_DAI_INDEX=2,\ +SPK_ID=6,SPEAKER_SSP_DAI_INDEX=0,HEADSET_CODEC_NAME=SSP2-Codec,SPEAKER_CODEC_NAME=SSP0-Codec,\ +BT_NAME=SSP1-BT,BT_INDEX=1,BT_ID=7,BT_PCM_NAME=Bluetooth,INCLUDE_ECHO_REF=true,\ +GOOGLE_RTC_AEC_SUPPORT=1,DEEP_BUF_SPK=true,GOOGLE_AEC_DP_CORE_ID=2" + +# SDW + DMIC + HDMI, with 96 kHz DMIC1 +"cavs-rt5682\;sof-mtl-max98360a-rt5682-4ch-48k-96k\;PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-max98360a-rt5682-4ch-48k-96k.bin,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_PCM_ID=99,\ +DMIC1_ENABLE=passthrough,DMIC1_RATE=96000,DMIC1_PCM_ID=100,\ +DEEPBUFFER_FW_DMA_MS=10,HEADSET_SSP_DAI_INDEX=2,\ +SPK_ID=6,SPEAKER_SSP_DAI_INDEX=0,HEADSET_CODEC_NAME=SSP2-Codec,SPEAKER_CODEC_NAME=SSP0-Codec,\ +BT_NAME=SSP1-BT,BT_INDEX=1,BT_ID=7,BT_PCM_NAME=Bluetooth,INCLUDE_ECHO_REF=true,\ +GOOGLE_RTC_AEC_SUPPORT=1,DEEP_BUF_SPK=true,GOOGLE_AEC_DP_CORE_ID=2" + # CAVS HDA topology with gain and SRC before mixin for HDA and passthrough pipelines for HDMI "sof-hda-generic\;sof-hda-src-generic\;HDA_CONFIG=src" From d457f7f65fe7126cf3b3a191a7c0b36444e3c052 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 10 Jan 2024 18:57:36 +0200 Subject: [PATCH 6/7] Tools: Topology2: Add other rates support for HDA generic This patch modifies cavs-mixin-mixout-hda.conf with added input and output format attributes for in_rate and out_rate. The bit_depth attributes need to be added to as well to avoid corrupt audio. The HDA_ANALOG_CAPTURE_RATE and HDA_ANALOG_PLAYBACK_RATE are by default set to 48000. The topologies' characteristics are not changed with this patch. Signed-off-by: Seppo Ingalsuo --- .../topology2/cavs-mixin-mixout-hda.conf | 108 ++++++++++++++++++ 1 file changed, 108 insertions(+) diff --git a/tools/topology/topology2/cavs-mixin-mixout-hda.conf b/tools/topology/topology2/cavs-mixin-mixout-hda.conf index cf109a4b8d68..6ae9a3515e29 100644 --- a/tools/topology/topology2/cavs-mixin-mixout-hda.conf +++ b/tools/topology/topology2/cavs-mixin-mixout-hda.conf @@ -7,6 +7,8 @@ Define { DEEP_BUFFER_PIPELINE_SRC 'mixin.15.1' DEEP_BUFFER_PIPELINE_SINK 'mixout.2.1' DEEP_BUFFER_PCM_NAME 'Deepbuffer HDA Analog' + HDA_ANALOG_CAPTURE_RATE 48000 + HDA_ANALOG_PLAYBACK_RATE 48000 EFX_FIR_PARAMS 'passthrough' EFX_IIR_PARAMS 'passthrough' EFX_DRC_PARAMS 'passthrough' @@ -40,11 +42,43 @@ Object.Pipeline { stream_name $HDA_ANALOG_DAI_NAME dai_type "HDA" copier_type "HDA" + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $HDA_ANALOG_PLAYBACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $HDA_ANALOG_PLAYBACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] } Object.Widget.gain.1 { Object.Control.mixer.1 { name 'Post Mixer $ANALOG_PLAYBACK_PCM Volume' } + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $HDA_ANALOG_PLAYBACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $HDA_ANALOG_PLAYBACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] } Object.Widget.eqiir.1 { Object.Control.bytes."1" { @@ -76,11 +110,53 @@ Object.Pipeline { Object.Widget.host-copier.1 { stream_name $ANALOG_PLAYBACK_PCM pcm_id 0 + num_input_audio_formats 3 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $HDA_ANALOG_PLAYBACK_RATE + in_bit_depth 16 + in_valid_bit_depth 16 + } + { + in_rate $HDA_ANALOG_PLAYBACK_RATE + in_bit_depth 32 + in_valid_bit_depth 24 + } + { + in_rate $HDA_ANALOG_PLAYBACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $HDA_ANALOG_PLAYBACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] } Object.Widget.gain.1 { Object.Control.mixer.1 { name 'Pre Mixer $ANALOG_PLAYBACK_PCM Volume' + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate $HDA_ANALOG_PLAYBACK_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $HDA_ANALOG_PLAYBACK_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] } } } @@ -92,6 +168,32 @@ Object.Pipeline { Object.Widget.host-copier.1 { stream_name $ANALOG_CAPTURE_PCM pcm_id 0 + num_input_audio_formats 1 + num_output_audio_formats 3 + Object.Base.input_audio_format [ + { + in_rate $HDA_ANALOG_CAPTURE_RATE + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate $HDA_ANALOG_CAPTURE_RATE + out_bit_depth 16 + out_valid_bit_depth 16 + } + { + out_rate $HDA_ANALOG_CAPTURE_RATE + out_bit_depth 32 + out_valid_bit_depth 24 + } + { + out_rate $HDA_ANALOG_CAPTURE_RATE + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] } } ] @@ -112,12 +214,14 @@ Object.Pipeline { num_output_audio_formats 1 Object.Base.input_audio_format [ { + in_rate $HDA_ANALOG_CAPTURE_RATE in_bit_depth 32 in_valid_bit_depth 32 } ] Object.Base.output_audio_format [ { + out_rate $HDA_ANALOG_CAPTURE_RATE out_bit_depth 32 out_valid_bit_depth 32 } @@ -142,11 +246,15 @@ Object.PCM.pcm [ direction "playback" name $ANALOG_PLAYBACK_PCM formats 'S32_LE,S24_LE,S16_LE' + rate_min $HDA_ANALOG_PLAYBACK_RATE + rate_max $HDA_ANALOG_PLAYBACK_RATE } Object.PCM.pcm_caps.2 { direction "capture" name $ANALOG_CAPTURE_PCM formats 'S32_LE,S24_LE,S16_LE' + rate_min $HDA_ANALOG_CAPTURE_RATE + rate_max $HDA_ANALOG_CAPTURE_RATE } direction duplex } From 50fe055b2f30df779934f6dcb99cfbdc795d47e2 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Mon, 15 Jan 2024 14:08:57 +0200 Subject: [PATCH 7/7] Tools: Topology2: Add build of 96 kHz HDA topologies The development topologies are with -/2ch/4ch DMIC for cavs25 and ace1 platforms for testing HDA with 96 kHz rate. The build topologies names are: - sof-hda-generic-cavs25-4ch-48k-96k - sof-hda-generic-cavs25-2ch-48k-96k - sof-hda-generic-cavs25-4ch-96k - sof-hda-generic-cavs25-2ch-96k - sof-hda-generic-ace1-4ch-48k-96k - sof-hda-generic-ace1-2ch-48k-96k - sof-hda-generic-ace1-4ch-96k - sof-hda-generic-ace1-2ch-96k - sof-hda-generic-96k The DMIC1 PCM ID with 96 kHz is set to 22 (capture ultrasonic). PCM IDs definition is in: https://github.com/thesofproject/sof/files/14021187/PCMDeviceList.txt Signed-off-by: Seppo Ingalsuo --- .../topology2/development/tplg-targets.cmake | 52 +++++++++++++++++++ 1 file changed, 52 insertions(+) diff --git a/tools/topology/topology2/development/tplg-targets.cmake b/tools/topology/topology2/development/tplg-targets.cmake index 7b2135ca0edf..d538310c388c 100644 --- a/tools/topology/topology2/development/tplg-targets.cmake +++ b/tools/topology/topology2/development/tplg-targets.cmake @@ -94,6 +94,58 @@ NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC1_ENABLE=passthrough,DMI PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-ace1-4ch-48k-16k.bin,\ NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC1_ENABLE=passthrough,DMIC1_RATE=16000" +# With 4ch 96 kHz DMIC1 and HDA +"sof-hda-generic\;sof-hda-generic-cavs25-4ch-48k-96k\;HDA_CONFIG=mix,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-cavs25-4ch-48k-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC1_ENABLE=passthrough,\ +DMIC1_RATE=96000,DMIC1_PCM_ID=22" + +"sof-hda-generic\;sof-hda-generic-ace1-4ch-48k-96k\;HDA_CONFIG=mix,PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-ace1-4ch-48k-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC1_ENABLE=passthrough,\ +DMIC1_RATE=96000,DMIC1_PCM_ID=22" + +# With 2ch 96 kHz DMIC1 and HDA +"sof-hda-generic\;sof-hda-generic-cavs25-2ch-48k-96k\;HDA_CONFIG=mix,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-cavs25-2ch-48k-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=2,PDM1_MIC_A_ENABLE=0,PDM1_MIC_B_ENABLE=0,DMIC1_ENABLE=passthrough,\ +DMIC1_RATE=96000,DMIC1_PCM_ID=22" + +"sof-hda-generic\;sof-hda-generic-ace1-2ch-48k-96k\;HDA_CONFIG=mix,PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-ace1-2ch-48k-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=2,PDM1_MIC_A_ENABLE=0,PDM1_MIC_B_ENABLE=0,DMIC1_ENABLE=passthrough,\ +DMIC1_RATE=96000,DMIC1_PCM_ID=22" + +# With 4ch 96 kHz DMIC0 and HDA +"sof-hda-generic\;sof-hda-generic-cavs25-4ch-96k\;HDA_CONFIG=mix,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-cavs25-4ch-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_RATE=96000" + +"sof-hda-generic\;sof-hda-generic-ace1-4ch-96k\;HDA_CONFIG=mix,PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-ace1-4ch-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=4,PDM1_MIC_A_ENABLE=1,PDM1_MIC_B_ENABLE=1,DMIC0_RATE=96000" + +# With 2ch 96 kHz DMIC0 and HDA +"sof-hda-generic\;sof-hda-generic-cavs25-2ch-96k\;HDA_CONFIG=mix,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-cavs25-2ch-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=2,PDM1_MIC_A_ENABLE=0,PDM1_MIC_B_ENABLE=0,DMIC0_RATE=96000" + +"sof-hda-generic\;sof-hda-generic-ace1-2ch-96k\;HDA_CONFIG=mix,PLATFORM=mtl,\ +PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-hda-generic-ace1-2ch-96k.bin,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,\ +NUM_DMICS=2,PDM1_MIC_A_ENABLE=0,PDM1_MIC_B_ENABLE=0,DMIC0_RATE=96000" + +# With 96 kHz HDA +"sof-hda-generic\;sof-hda-generic-96k\;HDA_CONFIG=mix,\ +DEEPBUFFER_FW_DMA_MS=false,HDA_ANALOG_CAPTURE_RATE=96000,HDA_ANALOG_PLAYBACK_RATE=96000,NUM_DMICS=0" + # SDW + DMIC + HDMI, with 16 kHz DMIC1 "cavs-sdw\;sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-16k\;PLATFORM=mtl,\ PREPROCESS_PLUGINS=nhlt,NHLT_BIN=nhlt-sof-mtl-sdw-cs42l42-l0-max98363-l2-4ch-48k-16k.bin,\