Define { MCLK 24576000 NUM_DMICS 0 # override DMIC default definitions DMIC0_HOST_PIPELINE_ID 13 DMIC0_DAI_PIPELINE_ID 14 DMIC0_HOST_PIPELINE_SINK 'gain.13.1' DMIC0_DAI_PIPELINE_SRC 'module-copier.14.2' DMIC0_DAI_COPIER 'dai-copier.DMIC.NoCodec-6.capture' DMIC0_DAI_GAIN 'eqiir.14.1' DMIC0_NAME 'NoCodec-6' DMIC1_NAME 'NoCodec-7' DMIC0_PCM_CAPS 'Gain Capture 13' DMIC1_PCM_CAPS 'DMIC1 WOV Capture' PLATFORM "none" DEEP_BUFFER_PIPELINE_ID 15 DEEP_BUFFER_PCM_ID 31 DEEP_BUFFER_PIPELINE_SRC 'mixin.15.1' DEEP_BUFFER_PIPELINE_SINK 'mixout.2.1' DEEP_BUFFER_PCM_NAME 'Deepbuffer Port0' SMART_AMP_UUID "1e:96:7a:16:e4:8a:ea:11:89:f1:00:0c:29:ce:16:35" # SSP0 stream has two versions: with 3 and with 5 pipelines SSP0_MIXER_2LEVEL 0 SSP0_MIXER_PCM_ID_1 41 SSP0_MIXER_PIPELINE_ID_1 16 SSP0_MIXER_PIPELINE_ID_2 21 SSP0_MIXER_SOURCE_1 'mixin.1.1' SSP0_MIXER_SINK_1 'mixout.2.1' SSP0_MIXER_SOURCE_2 'mixin.16.1' SSP0_MIXER_SINK_2 'mixout.16.1' SSP0_MIXER_SOURCE_3 'mixin.21.1' SSP1_ENABLED "true" PASSTHROUGH "false" SSP0_PCM_NAME "Port0" SSP0_CAPTURE_PCM "Port0 2nd Capture" SSP0_CAPTURE_PCM_ID 12 SSP0_PCM_ID 0 SSP1_PCM_NAME "Port1" SSP2_PCM_NAME "Port2" DMIC0_PCM_0_NAME "DMIC SFX1" DMIC0_PCM_1_NAME "DMIC SFX2" } # override defaults with platform-specific config IncludeByKey.PLATFORM { "tgl" "platform/intel/tgl.conf" "adl" "platform/intel/tgl.conf" "mtl" "platform/intel/mtl.conf" "lnl" "platform/intel/mtl.conf" } # include DMIC config if needed. IncludeByKey.NUM_DMICS { "[1-4]" "platform/intel/dmic-generic.conf" } # include deep buffer config if buffer size is in 1 - 1000 ms. IncludeByKey.PASSTHROUGH { "false" { IncludeByKey.DEEPBUFFER_FW_DMA_MS{ "([1-9]|[1-9][0-9]|[1-9][0-9][0-9]|1000)" "platform/intel/deep-buffer.conf" } } } # # List of all DAIs # Object.Dai.SSP [ { id 0 dai_index 0 direction "duplex" name NoCodec-0 default_hw_conf_id 0 sample_bits 32 quirks "lbm_mode" io_clk $MCLK Object.Base.hw_config.1 { name "SSP0" id 0 bclk_freq 3072000 tdm_slot_width 32 # TODO: remove this. Needs alsaptlg change. Object.Base.link_config.1 { clock_source 1 } } } { id 2 dai_index 2 direction "duplex" name NoCodec-2 default_hw_conf_id 0 sample_bits 32 quirks "lbm_mode" io_clk $MCLK Object.Base.hw_config.1 { name "SSP2" id 0 bclk_freq 3072000 tdm_slot_width 32 # TODO: remove this. Needs alsaptlg change. Object.Base.link_config.1 { clock_source 1 } } } ] # # Pipeline definitions # # PCM1 ---> gain ---> Mixin ---> Mixout ---> gain ---> SSP1 # PCM2 ---> gain ---> SRC ---> Mixin ---> Mixout ---> gain ---> SSP2 # PCM4 ---> gain ---> Mixin -------------------------->\ # PCM3 ---> gain ---> Mixin ---->\ \ # PCM0 ---> gain ---> Mixin ---> Mixout ---> Mixin ---> Mixout ---> gain ---> smart_amp ---> SSP0 # / # /---------------------------------------------------------------------->/ # SSP0 ---> PCM0 # SSP1 ---> PCM1 # SSP2 ---> SRC ---> PCM2 IncludeByKey.PASSTHROUGH { "false" { Object.Pipeline.host-copier-gain-mixin-playback [ { index 1 Object.Widget.host-copier.1 { stream_name 'SSP0 Playback' pcm_id 0 } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Pre Mixer $SSP0_PCM_NAME Playback Volume' } } } ] Object.Pipeline.host-copier-gain-src-mixin-playback [ { index 5 Object.Widget.host-copier.1 { stream_name 'SSP2 Playback' pcm_id 2 } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Pre Mixer $SSP2_PCM_NAME Playback Volume' } } } ] Object.Pipeline.mixout-gain-smart-amp-dai-copier-playback [ { index 2 Object.Widget.dai-copier.1 { dai_index 0 dai_type "SSP" copier_type "SSP" stream_name "NoCodec-0" node_type $I2S_LINK_OUTPUT_CLASS } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Post Mixer $SSP0_PCM_NAME Playback Volume' } } Object.Widget.smart_amp.1 { Object.Base.input_pin_binding.1 { input_pin_binding_name "gain.2.1" } Object.Base.input_pin_binding.2 { input_pin_binding_name "dai-copier.SSP.NoCodec-0.capture" } Object.Control.bytes."1" { name "Main Playback and $SSP0_PCM_NAME smart_amp_init" } } } ] Object.Pipeline.mixout-gain-dai-copier-playback [ { index 6 Object.Widget.dai-copier.1 { dai_index 2 dai_type "SSP" copier_type "SSP" stream_name "NoCodec-2" node_type $I2S_LINK_OUTPUT_CLASS } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Post Mixer $SSP2_PCM_NAME Playback Volume' } } } ] Object.Pipeline.gain-copier-capture [ { index 7 Object.Widget.host-copier.1 { stream_name 'SSP0 Capture' pcm_id $SSP0_PCM_ID } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Post Demux $SSP0_PCM_NAME Capture Volume' } } } { index 17 format s32le Object.Widget.host-copier.1 { stream_name 'SSP0-1 Capture' pcm_id $SSP0_CAPTURE_PCM_ID } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Post Demux $SSP0_CAPTURE_PCM Volume' } } } ] IncludeByKey.NUM_DMICS { "[1-4]" { Object.Pipeline.gain-module-copier [ { index 19 direction "capture" Object.Widget.pipeline.1 { stream_name $DMIC0_DAI_COPIER } Object.Widget.module-copier.1 { stream_name 'Gain Capture 19' 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.gain.1 { curve_type "windows_fade" 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.Control.mixer.1 { name 'Pre Demux $DMIC0_PCM_0_NAME Capture Volume' } } } ] } } Object.Pipeline.dai-copier-gain-module-copier-capture [ { index 8 Object.Widget.dai-copier."1" { dai_index 0 dai_type "SSP" type dai_out copier_type "SSP" stream_name "NoCodec-0" node_type $I2S_LINK_INPUT_CLASS num_input_audio_formats 1 Object.Base.input_audio_format [ { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 1 Object.Base.output_audio_format [ { out_bit_depth 32 out_valid_bit_depth 32 } ] num_output_pins 2 Object.Base.output_pin_binding.1 { output_pin_binding_name "gain.8.1" } Object.Base.output_pin_binding.2 { output_pin_binding_name "smart_amp.2.1" } } Object.Widget.module-copier."2" { stream_name "NoCodec-0" num_input_audio_formats 1 Object.Base.input_audio_format [ { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 1 Object.Base.output_audio_format [ { out_bit_depth 32 out_valid_bit_depth 32 } ] } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Pre Demux $SSP0_PCM_NAME Capture Volume' } } } ] } "true" { Object.Pipeline.io-gateway [ { index 2 direction playback Object.Widget.dai-copier.1 { dai_index 0 dai_type "SSP" copier_type "SSP" stream_name "NoCodec-0" node_type $I2S_LINK_OUTPUT_CLASS num_input_pins 1 num_input_audio_formats 3 Object.Base.input_audio_format [ { in_bit_depth 16 in_valid_bit_depth 16 } { in_bit_depth 32 in_valid_bit_depth 24 } { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 3 Object.Base.output_audio_format [ { out_bit_depth 16 out_valid_bit_depth 16 } { out_bit_depth 32 out_valid_bit_depth 24 } { out_bit_depth 32 out_valid_bit_depth 32 } ] } } { index 6 direction playback Object.Widget.dai-copier.1 { dai_index 2 dai_type "SSP" copier_type "SSP" stream_name "NoCodec-2" node_type $I2S_LINK_OUTPUT_CLASS num_input_pins 1 num_input_audio_formats 3 Object.Base.input_audio_format [ { in_bit_depth 16 in_valid_bit_depth 16 } { in_bit_depth 32 in_valid_bit_depth 24 } { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 3 Object.Base.output_audio_format [ { out_bit_depth 16 out_valid_bit_depth 16 } { out_bit_depth 32 out_valid_bit_depth 24 } { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] Object.Pipeline.host-gateway-playback [ { index 1 Object.Widget.host-copier.1 { stream_name 'SSP0 Playback' pcm_id 0 num_input_audio_formats 3 Object.Base.input_audio_format [ { in_bit_depth 16 in_valid_bit_depth 16 } { in_bit_depth 32 in_valid_bit_depth 24 } { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 3 Object.Base.output_audio_format [ { out_bit_depth 16 out_valid_bit_depth 16 } { out_bit_depth 32 out_valid_bit_depth 24 } { out_bit_depth 32 out_valid_bit_depth 32 } ] } } { index 5 Object.Widget.host-copier.1 { stream_name 'SSP2 Playback' pcm_id 2 num_input_audio_formats 3 Object.Base.input_audio_format [ { in_bit_depth 16 in_valid_bit_depth 16 } { in_bit_depth 32 in_valid_bit_depth 24 } { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 3 Object.Base.output_audio_format [ { out_bit_depth 16 out_valid_bit_depth 16 } { out_bit_depth 32 out_valid_bit_depth 24 } { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] Object.Pipeline.host-gateway-capture [ { index 7 Object.Widget.host-copier.1 { stream_name 'SSP0 Capture' pcm_id 0 } } { index 11 Object.Widget.host-copier.1 { stream_name 'SSP2 Capture' pcm_id 2 } } ] Object.Pipeline.io-gateway-capture [ { index 8 direction capture Object.Widget.dai-copier."1" { dai_index 0 dai_type "SSP" type dai_out copier_type "SSP" stream_name "NoCodec-0" node_type $I2S_LINK_INPUT_CLASS num_output_pins 2 num_input_audio_formats 1 Object.Base.input_audio_format [ { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 1 Object.Base.output_audio_format [ { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] } } Object.Pipeline.io-gateway-capture [ { index 12 direction capture Object.Widget.dai-copier."1" { dai_index 2 dai_type "SSP" type dai_out copier_type "SSP" stream_name "NoCodec-2" node_type $I2S_LINK_INPUT_CLASS num_input_audio_formats 1 Object.Base.input_audio_format [ { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 1 Object.Base.output_audio_format [ { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] IncludeByKey.PASSTHROUGH { "false" { Object.Pipeline.host-gateway-capture [ { index 11 Object.Widget.host-copier.1 { stream_name 'SSP2 Capture' pcm_id 2 } } ] Object.Widget.src.1 { index 11 rate_in 48000 } IncludeByKey.NUM_DMICS { "[1-4]" { Object.Pipeline.gain-capture [ { format $FORMAT index 18 Object.Widget.pipeline.1 { stream_name "$DMIC0_PCM_0_NAME" } Object.Widget.host-copier.1 { stream_name "Gain Capture 18" pcm_id 27 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.gain.1 { curve_type "windows_fade" 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.Control.mixer.1 { name 'Post Demux $DMIC0_PCM_0_NAME Capture Volume' } } } { format $FORMAT index 20 Object.Widget.pipeline.1 { stream_name "$DMIC0_PCM_1_NAME" } Object.Widget.host-copier.1 { stream_name "Gain Capture 20" pcm_id 28 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.gain.1 { curve_type "windows_fade" 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.Control.mixer.1 { name 'Post Demux $DMIC0_PCM_1_NAME Capture Volume' } } } ] } } } } Object.PCM.pcm [ { name "$SSP0_PCM_NAME" id $SSP0_PCM_ID direction "duplex" Object.Base.fe_dai.1 { name "$SSP0_PCM_NAME" } Object.PCM.pcm_caps.1 { direction "playback" name "SSP0 Playback" formats 'S16_LE,S24_LE,S32_LE' } Object.PCM.pcm_caps.2 { direction "capture" name "SSP0 Capture" formats 'S16_LE,S24_LE,S32_LE' } } ] IncludeByKey.PASSTHROUGH { "false" { Object.PCM.pcm [ { name "$SSP0_CAPTURE_PCM" id $SSP0_CAPTURE_PCM_ID direction "capture" Object.Base.fe_dai.1 { name "$SSP0_CAPTURE_PCM" } Object.PCM.pcm_caps.1 { name "SSP0-1 Capture" formats 'S16_LE,S24_LE,S32_LE' } } { name "$DMIC0_PCM_0_NAME" id 27 direction "capture" Object.Base.fe_dai."$DMIC0_PCM_0_NAME" {} Object.PCM.pcm_caps."capture" { name "Gain Capture 18" # only 32-bit capture supported now formats 'S32_LE' channels_min $NUM_DMICS channels_max $NUM_DMICS } } { name "$DMIC0_PCM_1_NAME" id 28 direction "capture" Object.Base.fe_dai."$DMIC0_PCM_1_NAME" {} Object.PCM.pcm_caps."capture" { name "Gain Capture 20" # only 32-bit capture supported now formats 'S32_LE' channels_min $NUM_DMICS channels_max $NUM_DMICS } } { name "$SSP2_PCM_NAME" id 2 direction "duplex" Object.Base.fe_dai.1 { name "$SSP2_PCM_NAME" } Object.PCM.pcm_caps.1 { direction "playback" name "SSP2 Playback" formats 'S16_LE,S24_LE,S32_LE' rate_min 8000 rate_max 192000 } Object.PCM.pcm_caps.2 { direction "capture" name "SSP2 Capture" formats 'S16_LE,S24_LE,S32_LE' rate_min 8000 rate_max 192000 } } ] } } IncludeByKey.PASSTHROUGH { "true" { Object.PCM.pcm [ { name "$SSP2_PCM_NAME" id 2 direction "duplex" Object.Base.fe_dai.1 { name "$SSP2_PCM_NAME" } Object.PCM.pcm_caps.1 { direction "playback" name "SSP2 Playback" formats 'S16_LE,S24_LE,S32_LE' } Object.PCM.pcm_caps.2 { direction "capture" name "SSP2 Capture" formats 'S16_LE,S24_LE,S32_LE' } } ] } } IncludeByKey.PASSTHROUGH { "false" { IncludeByKey.NUM_DMICS { "[1-4]" { Object.Base.route [ { source module-copier.14.2 sink gain.19.1 } { source module-copier.19.1 sink gain.18.1 } { source module-copier.19.1 sink gain.20.1 } { source "gain.18.1" sink "host-copier.27.capture" } { source "gain.20.1" sink "host-copier.28.capture" } ] } } Object.Base.route [ { source "smart_amp.2.1" sink "dai-copier.SSP.NoCodec-0.playback" } { source "gain.6.1" sink "dai-copier.SSP.NoCodec-2.playback" } { source "mixin.5.1" sink "mixout.6.1" } { source "dai-copier.SSP.NoCodec-0.capture" sink "gain.8.1" } { source "module-copier.8.2" sink "module-copier.7.2" } { source "module-copier.8.2" sink "module-copier.17.2" } { source "dai-copier.SSP.NoCodec-0.capture" sink "smart_amp.2.1" } { source 'host-copier.0.playback' sink 'gain.1.1' } { source 'host-copier.2.playback' sink 'gain.5.1' } { source "gain.7.1" sink "host-copier.$SSP0_PCM_ID.capture" } { source "gain.17.1" sink "host-copier.$SSP0_CAPTURE_PCM_ID.capture" } { source "dai-copier.SSP.NoCodec-2.capture" sink "src.11.1" } { source "src.11.1" sink "host-copier.2.capture" } ] } "true" { Object.Base.route [ { source "dai-copier.SSP.NoCodec-0.capture" sink "host-copier.0.capture" } { source "host-copier.0.playback" sink "dai-copier.SSP.NoCodec-0.playback" } { source "host-copier.2.playback" sink "dai-copier.SSP.NoCodec-2.playback" } { source "dai-copier.SSP.NoCodec-2.capture" sink "host-copier.2.capture" } ] } } IncludeByKey.PASSTHROUGH { "false" { IncludeByKey.SSP0_MIXER_2LEVEL { "0" { Object.Base.route [ { source $SSP0_MIXER_SOURCE_1 sink $SSP0_MIXER_SINK_1 } ] } "1" "platform/intel/nocodec-ssp0-2level.conf" } } } # There is pinmux conflict between SSP1 and DMIC on MTL RVP, # so include SSP1 pipelines conditionally. IncludeByKey.SSP1_ENABLED { "true" { Object.Dai.SSP [ { id 1 dai_index 1 direction "duplex" name NoCodec-1 default_hw_conf_id 0 sample_bits 32 quirks "lbm_mode" io_clk $MCLK Object.Base.hw_config.1 { name "SSP1" id 0 bclk_freq 3072000 tdm_slot_width 32 # TODO: remove this. Needs alsaptlg change. Object.Base.link_config.1 { clock_source 1 } } } ] Object.Pipeline.io-gateway-capture [ { index 10 direction capture Object.Widget.dai-copier."1" { dai_index 1 dai_type "SSP" type dai_out copier_type "SSP" stream_name "NoCodec-1" node_type $I2S_LINK_INPUT_CLASS num_input_audio_formats 1 Object.Base.input_audio_format [ { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 1 Object.Base.output_audio_format [ { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] Object.Pipeline.host-gateway-capture [ { index 9 Object.Widget.host-copier.1 { stream_name 'SSP1 Capture' pcm_id 1 } } ] IncludeByKey.PASSTHROUGH { "false" { Object.Pipeline.host-copier-gain-mixin-playback [ { index 3 Object.Widget.host-copier.1 { stream_name 'SSP1 Playback' pcm_id 1 } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Pre Mixer $SSP1_PCM_NAME Playback Volume' } } } ] Object.Pipeline.mixout-gain-dai-copier-playback [ { index 4 Object.Widget.dai-copier.1 { dai_index 1 dai_type "SSP" copier_type "SSP" stream_name "NoCodec-1" node_type $I2S_LINK_OUTPUT_CLASS } Object.Widget.gain.1 { curve_type "windows_fade" Object.Control.mixer.1 { name 'Post Mixer $SSP1_PCM_NAME Playback Volume' } } } ] } "true" { Object.Pipeline.io-gateway [ { index 4 direction playback Object.Widget.dai-copier.1 { dai_index 1 dai_type "SSP" copier_type "SSP" stream_name "NoCodec-1" node_type $I2S_LINK_OUTPUT_CLASS num_input_audio_formats 3 Object.Base.input_audio_format [ { in_bit_depth 16 in_valid_bit_depth 16 } { in_bit_depth 32 in_valid_bit_depth 24 } { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 3 Object.Base.output_audio_format [ { out_bit_depth 16 out_valid_bit_depth 16 } { out_bit_depth 32 out_valid_bit_depth 24 } { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] Object.Pipeline.host-gateway-playback [ { index 3 Object.Widget.host-copier.1 { stream_name 'SSP1 Playback' pcm_id 1 num_input_audio_formats 3 Object.Base.input_audio_format [ { in_bit_depth 16 in_valid_bit_depth 16 } { in_bit_depth 32 in_valid_bit_depth 24 } { in_bit_depth 32 in_valid_bit_depth 32 } ] num_output_audio_formats 3 Object.Base.output_audio_format [ { out_bit_depth 16 out_valid_bit_depth 16 } { out_bit_depth 32 out_valid_bit_depth 24 } { out_bit_depth 32 out_valid_bit_depth 32 } ] } } ] } } Object.PCM.pcm [ { name "$SSP1_PCM_NAME" id 1 direction "duplex" Object.Base.fe_dai.1 { name "$SSP1_PCM_NAME" } Object.PCM.pcm_caps.1 { direction "playback" name "SSP1 Playback" formats 'S16_LE,S24_LE,S32_LE' } Object.PCM.pcm_caps.2 { direction "capture" name "SSP1 Capture" formats 'S16_LE,S24_LE,S32_LE' } } ] IncludeByKey.PASSTHROUGH { "false" { Object.Base.route [ { source "mixin.3.1" sink "mixout.4.1" } { source "gain.4.1" sink "dai-copier.SSP.NoCodec-1.playback" } { source 'host-copier.1.playback' sink 'gain.3.1' } ] } "true" { Object.Base.route [ { source "host-copier.1.playback" sink "dai-copier.SSP.NoCodec-1.playback" } ] } } Object.Base.route [ { source "dai-copier.SSP.NoCodec-1.capture" sink "host-copier.1.capture" } ] } }