From 38f353ca168fb821f637e3a13589961825883f33 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Sat, 8 Nov 2025 22:45:39 +0100 Subject: [PATCH 01/10] topology: add sof-hda-generic-aw88399 tplg --- .../production/tplg-targets-hda-generic.cmake | 1 + .../topology2/sof-hda-generic-aw88399.conf | 307 ++++++++++++++++++ 2 files changed, 308 insertions(+) create mode 100644 tools/topology/topology2/sof-hda-generic-aw88399.conf diff --git a/tools/topology/topology2/production/tplg-targets-hda-generic.cmake b/tools/topology/topology2/production/tplg-targets-hda-generic.cmake index c4a795e02053..5209068874a4 100644 --- a/tools/topology/topology2/production/tplg-targets-hda-generic.cmake +++ b/tools/topology/topology2/production/tplg-targets-hda-generic.cmake @@ -4,6 +4,7 @@ list(APPEND TPLGS # HDMI only topology with passthrough pipelines "sof-hda-generic\;sof-hda-generic-idisp\;" +"sof-hda-generic-aw88399\;sof-hda-generic-aw88399\;HDA_CONFIG=mix" # HDMI only topology with passthrough pipelines and # 2 or 4 DMIC, no NHLT blob included in topology "sof-hda-generic\;sof-hda-generic-idisp-2ch\;NUM_DMICS=2" diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf new file mode 100644 index 000000000000..eb36b1777003 --- /dev/null +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -0,0 +1,307 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Define { + HDA_CONFIG "none" + PLATFORM "none" + NUM_DMICS 0 +# doesn't it need to define DMIC0_HOST_PIPELINE_SINK and DMIC0_DAI_PIPELINE_SRC? + DMIC0_HOST_PIPELINE_SINK 'host-copier.6.capture' + DMIC0_DAI_PIPELINE_SRC 'module-copier.12.2' + DMIC0_DAI_COPIER 'dai-copier.DMIC.dmic01.capture' + DMIC0_DAI_EQIIR "highpass_40hz_20db" + DMIC0_PCM_CAPS 'Gain Capture 11' + AW_SMART_PIPELINE_ID 20 + AW_SMART_STREAM_NAME 'SSP1-Codec' + AW_SMART_SSP_INDEX 1 + SSP_BLOB_VERSION $SSP_BLOB_VERSION_1_5 +} + +# override defaults with platform-specific config +IncludeByKey.PLATFORM { + "mtl" "platform/intel/mtl.conf" + "lnl" "platform/intel/lnl.conf" + "ptl" "platform/intel/ptl.conf" +} + +# include HDA config if needed. +IncludeByKey.HDA_CONFIG { + "mix" "cavs-mixin-mixout-hda.conf" + "efx" "cavs-mixin-mixout-efx-hda.conf" + "src" "cavs-src-mixin-mixout-hda.conf" + "passthrough" "cavs-passthrough-hda.conf" +} + +# include DMIC config if needed. +IncludeByKey.NUM_DMICS { + "[1-4]" "platform/intel/dmic-generic.conf" +} + +Define { + NUM_HDMIS 3 + HDMI1_ID 1 + HDMI2_ID 2 + HDMI3_ID 3 + HDMI1_PCM_ID 3 + HDMI2_PCM_ID 4 + HDMI3_PCM_ID 5 + DMIC0_PCM_ID 6 +} + +IncludeByKey.NUM_HDMIS { +"[3-4]" "platform/intel/hdmi-generic.conf" +} + +Object.Widget.virtual [ + { + name 'codec0_in' + type input + index 1 + } + { + name 'codec1_in' + type input + index 2 + } + { + name 'codec0_out' + type output + index 3 + } + { + name 'codec1_out' + type output + index 4 + } + { + name 'codec2_in' + type input + index 5 + } + { + name 'codec2_out' + type output + index 6 + } + { + name 'iDisp1_out' + type output + index 7 + } + { + name 'iDisp2_out' + type output + index 8 + } + { + name 'iDisp3_out' + type output + index 9 + } + { + name 'iDisp3 Tx' + type out_drv + index 0 + } + { + name 'iDisp2 Tx' + type out_drv + index 1 + } + { + name 'iDisp1 Tx' + type out_drv + index 2 + } + { + name 'Analog CPU Playback' + type out_drv + index 3 + } + { + name 'Digital CPU Playback' + type out_drv + index 4 + } + { + name 'Alt Analog CPU Playback' + type out_drv + index 5 + } + { + name 'Analog CPU Capture' + type input + index 6 + } + { + name 'Digital CPU Capture' + type input + index 7 + } + { + name 'Alt Analog CPU Capture' + type input + index 8 + } +] + +Object.Pipeline.mixout-gain-smart-amp-dai-copier-playback [ + { + index $AW_SMART_PIPELINE_ID + + Object.Widget.dai-copier.1 { + dai_index $AW_SMART_SSP_INDEX + dai_type "SSP" + copier_type "SSP" + stream_name $AW_SMART_STREAM_NAME + node_type $I2S_LINK_OUTPUT_CLASS + num_input_audio_formats 1 + num_output_audio_formats 1 + Object.Base.input_audio_format [ + { + in_rate 48000 + in_bit_depth 32 + in_valid_bit_depth 32 + } + ] + Object.Base.output_audio_format [ + { + out_rate 48000 + out_bit_depth 32 + out_valid_bit_depth 32 + } + ] + } + + Object.Widget.gain.1 { + Object.Control.mixer.1 { + name 'Post Mixer AW88399 Playback Volume' + } + } + + Object.Widget.smart_amp.1 { + Object.Control.bytes."1" { + name 'HDA AW88399 smart_amp_init' + } + } + } +] + +Object.Pipeline.dai-copier-gain-eqiir-module-copier-capture [ + { + index 21 + + Object.Widget.dai-copier.1 { + dai_index $AW_SMART_SSP_INDEX + dai_type "SSP" + copier_type "SSP" + stream_name $AW_SMART_STREAM_NAME + node_type $I2S_LINK_INPUT_CLASS + Object.Base.output_pin_binding.1 { + output_pin_binding_name "smart_amp.20.1" + } + } + + Object.Widget.module-copier."2" { + stream_name $AW_SMART_STREAM_NAME + } + + Object.Widget.gain.1 { + Object.Control.mixer.1 { + name 'AW88399 Capture Volume' + } + } + + Object.Widget.eqiir.1 { + Object.Control.bytes."1" { + name 'AW88399 Capture Eq' + } + } + } +] + +Object.Base.route [ + { + source 'mixin.1.1' + sink 'mixout.20.1' + } + { + source 'smart_amp.20.1' + sink 'dai-copier.SSP.SSP1-Codec.playback' + } + { + source 'dai-copier.SSP.SSP1-Codec.capture' + sink 'smart_amp.20.1' + } +] + +Object.Dai.SSP [ + { + name $AW_SMART_STREAM_NAME + dai_index $AW_SMART_SSP_INDEX + id 0 + direction "duplex" + default_hw_conf_id 0 + sample_bits 32 + io_clk 24576000 + + Object.Base.hw_config.1 { + name "SSP$AW_SMART_SSP_INDEX" + id 0 + fsync_freq 48000 + bclk_freq 3072000 + tdm_slots 2 + tdm_slot_width 32 + Object.Base.link_config.1 { + clock_source 1 + } + } + } +] From affb98311c2183d9973366364fea0e0330bff077 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Sun, 9 Nov 2025 01:48:02 +0100 Subject: [PATCH 02/10] topology: hda-generic: add AW88399 SSP variants Signed-off-by: Yakov Till --- .../topology2/production/tplg-targets-hda-generic.cmake | 5 ++++- tools/topology/topology2/sof-hda-generic-aw88399.conf | 2 ++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/tools/topology/topology2/production/tplg-targets-hda-generic.cmake b/tools/topology/topology2/production/tplg-targets-hda-generic.cmake index 5209068874a4..02c6aef80c8e 100644 --- a/tools/topology/topology2/production/tplg-targets-hda-generic.cmake +++ b/tools/topology/topology2/production/tplg-targets-hda-generic.cmake @@ -4,7 +4,10 @@ list(APPEND TPLGS # HDMI only topology with passthrough pipelines "sof-hda-generic\;sof-hda-generic-idisp\;" -"sof-hda-generic-aw88399\;sof-hda-generic-aw88399\;HDA_CONFIG=mix" +# AW88399 smart amp topologies with SSP variants (SSP port auto-detected by kernel from NHLT) +"sof-hda-generic-aw88399\;sof-hda-generic-aw88399-ssp0\;HDA_CONFIG=mix,AW_SMART_SSP_INDEX=0,AW_SMART_STREAM_NAME=SSP0-Codec" +"sof-hda-generic-aw88399\;sof-hda-generic-aw88399-ssp1\;HDA_CONFIG=mix,AW_SMART_SSP_INDEX=1,AW_SMART_STREAM_NAME=SSP1-Codec" +"sof-hda-generic-aw88399\;sof-hda-generic-aw88399-ssp2\;HDA_CONFIG=mix,AW_SMART_SSP_INDEX=2,AW_SMART_STREAM_NAME=SSP2-Codec" # HDMI only topology with passthrough pipelines and # 2 or 4 DMIC, no NHLT blob included in topology "sof-hda-generic\;sof-hda-generic-idisp-2ch\;NUM_DMICS=2" diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index eb36b1777003..bb396c46f9fe 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -59,6 +59,8 @@ Define { DMIC0_DAI_EQIIR "highpass_40hz_20db" DMIC0_PCM_CAPS 'Gain Capture 11' AW_SMART_PIPELINE_ID 20 + # SSP parameters - defaults can be overridden by cmake build parameters + # SSP1 is the most common for smart amps, but variants are built for all ports AW_SMART_STREAM_NAME 'SSP1-Codec' AW_SMART_SSP_INDEX 1 SSP_BLOB_VERSION $SSP_BLOB_VERSION_1_5 From a255590c31284382f4c6e9f02ef0590e93d66192 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Sun, 9 Nov 2025 18:42:13 +0100 Subject: [PATCH 03/10] topology: aw88399: use smart stream routes Signed-off-by: Yakov Till --- .../topology2/sof-hda-generic-aw88399.conf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index bb396c46f9fe..380993873f6b 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -274,14 +274,14 @@ Object.Base.route [ source 'mixin.1.1' sink 'mixout.20.1' } - { - source 'smart_amp.20.1' - sink 'dai-copier.SSP.SSP1-Codec.playback' - } - { - source 'dai-copier.SSP.SSP1-Codec.capture' - sink 'smart_amp.20.1' - } + { + source 'smart_amp.20.1' + sink "dai-copier.SSP.$AW_SMART_STREAM_NAME.playback" + } + { + source "dai-copier.SSP.$AW_SMART_STREAM_NAME.capture" + sink 'smart_amp.20.1' + } ] Object.Dai.SSP [ From d794f8486e123209d049ea774f37282b611b0189 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Sun, 9 Nov 2025 20:20:49 +0100 Subject: [PATCH 04/10] topology: set ABI to 3.23.1 for kernel 6.18-rc3 compatibility Kernel 6.18-rc3 has SOF ABI 3.23.1, but topology was built with 3.29.1 causing version mismatch warnings. Set ABI minor version to 23 to match. Signed-off-by: Yakov Till --- src/include/kernel/abi.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/include/kernel/abi.h b/src/include/kernel/abi.h index c46361de8da5..1496121aa638 100644 --- a/src/include/kernel/abi.h +++ b/src/include/kernel/abi.h @@ -29,7 +29,7 @@ /** \brief SOF ABI version major, minor and patch numbers */ #define SOF_ABI_MAJOR 3 -#define SOF_ABI_MINOR 29 +#define SOF_ABI_MINOR 23 #define SOF_ABI_PATCH 1 /** \brief SOF ABI version number. Format within 32bit word is MMmmmppp */ From e2edc38ac72fda61d0baf9a39c6fbfd3649f5ce7 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Mon, 10 Nov 2025 12:26:00 +0100 Subject: [PATCH 05/10] topology: aw88399: fix BE ID to match machine driver --- tools/topology/topology2/sof-hda-generic-aw88399.conf | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index 380993873f6b..bc2340094ad4 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -59,6 +59,8 @@ Define { DMIC0_DAI_EQIIR "highpass_40hz_20db" DMIC0_PCM_CAPS 'Gain Capture 11' AW_SMART_PIPELINE_ID 20 + # Must match SSP_AMP_BE_ID in skl_hda_dsp_generic machine driver + AW_SMART_BE_ID 5 # SSP parameters - defaults can be overridden by cmake build parameters # SSP1 is the most common for smart amps, but variants are built for all ports AW_SMART_STREAM_NAME 'SSP1-Codec' @@ -288,7 +290,7 @@ Object.Dai.SSP [ { name $AW_SMART_STREAM_NAME dai_index $AW_SMART_SSP_INDEX - id 0 + id $AW_SMART_BE_ID direction "duplex" default_hw_conf_id 0 sample_bits 32 From ffbf5b7e044a56e4e5bb1884da1b074047b93b7a Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Mon, 10 Nov 2025 12:52:06 +0100 Subject: [PATCH 06/10] topology: aw88399: remove empty EQ from capture pipeline --- tools/topology/topology2/sof-hda-generic-aw88399.conf | 6 ------ 1 file changed, 6 deletions(-) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index bc2340094ad4..2b0694e035b6 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -262,12 +262,6 @@ Object.Pipeline.dai-copier-gain-eqiir-module-copier-capture [ name 'AW88399 Capture Volume' } } - - Object.Widget.eqiir.1 { - Object.Control.bytes."1" { - name 'AW88399 Capture Eq' - } - } } ] From af2be1a7ee61c65a78e8fa908bb5b4500f7875c4 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Mon, 10 Nov 2025 17:07:54 +0100 Subject: [PATCH 07/10] topology: aw88399: route deepbuffer through smart amp not HDA MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Override DEEP_BUFFER_PIPELINE_SINK to route PCM 31 (deepbuffer) through the AW88399 smart amp pipeline instead of directly to HDA analog codec. Without this, audio goes: deepbuffer → mixout.2.1 → HDA codec (tweeters only) With this fix: deepbuffer → mixout.20.1 → smart_amp.20.1 → SSP1 (full speakers) This enables woofers driven by AW88399 amplifiers to work alongside tweeters. Signed-off-by: Yakov Till --- tools/topology/topology2/sof-hda-generic-aw88399.conf | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index 2b0694e035b6..c92a8145c58d 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -83,6 +83,12 @@ IncludeByKey.HDA_CONFIG { "passthrough" "cavs-passthrough-hda.conf" } +# Override deepbuffer to route through AW88399 smart amp instead of HDA analog +# MUST be after HDA_CONFIG include so it overrides the HDA config's Define block +Define { + DEEP_BUFFER_PIPELINE_SINK 'mixout.20.1' +} + # include DMIC config if needed. IncludeByKey.NUM_DMICS { "[1-4]" "platform/intel/dmic-generic.conf" From 87edacc32af0d2fd2ebd38db1c78986160e997ea Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Mon, 10 Nov 2025 18:21:26 +0100 Subject: [PATCH 08/10] topology: aw88399: add explicit deepbuffer route to smart amp Add explicit route from mixin.15.1 (deepbuffer pipeline) to mixout.20.1 (AW88399 smart amp pipeline) so PCM 31 audio flows through the smart amplifiers instead of only through HDA analog codec. This enables the external AW88399 amplifiers to be used for deepbuffer playback, providing full-range audio instead of tweeter-only output. Signed-off-by: Yakov Till --- tools/topology/topology2/sof-hda-generic-aw88399.conf | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index c92a8145c58d..60455961080e 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -83,12 +83,6 @@ IncludeByKey.HDA_CONFIG { "passthrough" "cavs-passthrough-hda.conf" } -# Override deepbuffer to route through AW88399 smart amp instead of HDA analog -# MUST be after HDA_CONFIG include so it overrides the HDA config's Define block -Define { - DEEP_BUFFER_PIPELINE_SINK 'mixout.20.1' -} - # include DMIC config if needed. IncludeByKey.NUM_DMICS { "[1-4]" "platform/intel/dmic-generic.conf" @@ -275,6 +269,11 @@ Object.Base.route [ { source 'mixin.1.1' sink 'mixout.20.1' + } + { + # Route deepbuffer (PCM 31) through AW88399 smart amp + source 'mixin.15.1' + sink 'mixout.20.1' } { source 'smart_amp.20.1' From 0360d211fe954fc9148c49f6eb374ef288abc06b Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Mon, 10 Nov 2025 18:45:30 +0100 Subject: [PATCH 09/10] topology: aw88399: define custom deepbuffer routing to smart amp MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Disable HDA config's built-in deepbuffer (which routes to HDA analog codec) and define our own deepbuffer PCM 31 that routes to the AW88399 smart amp. This prevents routing conflicts where mixin.15.1 would have two outputs (one to HDA mixout.2.1 and one to smart amp mixout.20.1). Routes: - Regular playback (PCM 0): mixin.1.1 → mixout.20.1 → smart_amp → SSP1 - Deepbuffer (PCM 31): mixin.15.1 → mixout.20.1 → smart_amp → SSP1 Signed-off-by: Yakov Till --- .../topology2/sof-hda-generic-aw88399.conf | 24 +++++++++++++++---- 1 file changed, 19 insertions(+), 5 deletions(-) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index 60455961080e..9e54cbb2ca4f 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -75,6 +75,11 @@ IncludeByKey.PLATFORM { "ptl" "platform/intel/ptl.conf" } +# Disable deepbuffer in HDA config - we'll define our own that routes to smart amp +Define { + DEEPBUFFER_FW_DMA_MS 0 +} + # include HDA config if needed. IncludeByKey.HDA_CONFIG { "mix" "cavs-mixin-mixout-hda.conf" @@ -83,6 +88,20 @@ IncludeByKey.HDA_CONFIG { "passthrough" "cavs-passthrough-hda.conf" } +# Define our own deepbuffer that routes to AW88399 smart amp +Define { + DEEP_BUFFER_PIPELINE_ID 15 + DEEP_BUFFER_PCM_ID 31 + DEEP_BUFFER_PIPELINE_SRC 'mixin.15.1' + DEEP_BUFFER_PIPELINE_SINK 'mixout.20.1' + DEEP_BUFFER_PCM_NAME 'Deepbuffer Speaker' + DEEPBUFFER_D0I3_COMPATIBLE true + DEEP_BUF_JACK_RATE 48000 + DEEPBUFFER_FW_DMA_MS 100 +} + + + # include DMIC config if needed. IncludeByKey.NUM_DMICS { "[1-4]" "platform/intel/dmic-generic.conf" @@ -269,11 +288,6 @@ Object.Base.route [ { source 'mixin.1.1' sink 'mixout.20.1' - } - { - # Route deepbuffer (PCM 31) through AW88399 smart amp - source 'mixin.15.1' - sink 'mixout.20.1' } { source 'smart_amp.20.1' From 60f271329359eb1cf434874d18a4aa33cca12622 Mon Sep 17 00:00:00 2001 From: Yakov Till Date: Sun, 16 Nov 2025 17:51:46 +0100 Subject: [PATCH 10/10] topology2: Rename AW88399 Post Mixer control to Master Align the AW88399 smart-amp topology with the codec fixup by renaming the SOF gain control to "Master Playback Volume". KDE/PipeWire will now bind to the existing control name without needing extra UCM rules. Signed-off-by: Yakov Till --- .../topology2/sof-hda-generic-aw88399.conf | 107 +++++++++--------- 1 file changed, 55 insertions(+), 52 deletions(-) diff --git a/tools/topology/topology2/sof-hda-generic-aw88399.conf b/tools/topology/topology2/sof-hda-generic-aw88399.conf index 9e54cbb2ca4f..6fa55954494f 100644 --- a/tools/topology/topology2/sof-hda-generic-aw88399.conf +++ b/tools/topology/topology2/sof-hda-generic-aw88399.conf @@ -65,6 +65,9 @@ Define { # SSP1 is the most common for smart amps, but variants are built for all ports AW_SMART_STREAM_NAME 'SSP1-Codec' AW_SMART_SSP_INDEX 1 + AW_SMART_HOST_PIPELINE_ID 30 + AW_SMART_PCM_ID 32 + AW_SMART_PCM_NAME 'AW88399 Speakers' SSP_BLOB_VERSION $SSP_BLOB_VERSION_1_5 } @@ -215,7 +218,7 @@ Object.Widget.virtual [ } ] -Object.Pipeline.mixout-gain-smart-amp-dai-copier-playback [ +Object.Pipeline.mixout-gain-dai-copier-playback [ { index $AW_SMART_PIPELINE_ID @@ -225,78 +228,60 @@ Object.Pipeline.mixout-gain-smart-amp-dai-copier-playback [ copier_type "SSP" stream_name $AW_SMART_STREAM_NAME node_type $I2S_LINK_OUTPUT_CLASS - num_input_audio_formats 1 - num_output_audio_formats 1 - Object.Base.input_audio_format [ - { - in_rate 48000 - in_bit_depth 32 - in_valid_bit_depth 32 - } - ] - Object.Base.output_audio_format [ - { - out_rate 48000 - out_bit_depth 32 - out_valid_bit_depth 32 - } - ] } Object.Widget.gain.1 { Object.Control.mixer.1 { - name 'Post Mixer AW88399 Playback Volume' - } - } - - Object.Widget.smart_amp.1 { - Object.Control.bytes."1" { - name 'HDA AW88399 smart_amp_init' + name 'Master Playback Volume' } } } ] -Object.Pipeline.dai-copier-gain-eqiir-module-copier-capture [ +Object.Pipeline.host-copier-gain-mixin-playback [ { - index 21 - - Object.Widget.dai-copier.1 { - dai_index $AW_SMART_SSP_INDEX - dai_type "SSP" - copier_type "SSP" - stream_name $AW_SMART_STREAM_NAME - node_type $I2S_LINK_INPUT_CLASS - Object.Base.output_pin_binding.1 { - output_pin_binding_name "smart_amp.20.1" - } - } - - Object.Widget.module-copier."2" { - stream_name $AW_SMART_STREAM_NAME + index $AW_SMART_HOST_PIPELINE_ID + Object.Widget.host-copier.1 { + stream_name $AW_SMART_PCM_NAME + pcm_id $AW_SMART_PCM_ID } - Object.Widget.gain.1 { Object.Control.mixer.1 { - name 'AW88399 Capture Volume' + name 'Pre Mixer AW88399 Playback Volume' } } + Object.Widget.mixin.1 {} + Object.Widget.pipeline.1 { + priority 0 + lp_mode 0 + } } ] Object.Base.route [ { - source 'mixin.1.1' - sink 'mixout.20.1' + source "host-copier.$AW_SMART_PCM_ID.playback" + sink "gain.$AW_SMART_HOST_PIPELINE_ID.1" + } + { + source "gain.$AW_SMART_HOST_PIPELINE_ID.1" + sink "mixin.$AW_SMART_HOST_PIPELINE_ID.1" + } +] + +Object.Base.route [ + { + source "mixin.$AW_SMART_HOST_PIPELINE_ID.1" + sink "mixout.$AW_SMART_PIPELINE_ID.1" + } + { + source "mixout.$AW_SMART_PIPELINE_ID.1" + sink "gain.$AW_SMART_PIPELINE_ID.1" + } + { + source "gain.$AW_SMART_PIPELINE_ID.1" + sink "dai-copier.SSP.$AW_SMART_STREAM_NAME.playback" } - { - source 'smart_amp.20.1' - sink "dai-copier.SSP.$AW_SMART_STREAM_NAME.playback" - } - { - source "dai-copier.SSP.$AW_SMART_STREAM_NAME.capture" - sink 'smart_amp.20.1' - } ] Object.Dai.SSP [ @@ -322,3 +307,21 @@ Object.Dai.SSP [ } } ] + +Object.PCM.pcm [ + { + name $AW_SMART_PCM_NAME + id $AW_SMART_PCM_ID + direction "playback" + Object.Base.fe_dai.1 { + name $AW_SMART_PCM_NAME + } + Object.PCM.pcm_caps.1 { + direction "playback" + name $AW_SMART_PCM_NAME + formats 'S32_LE,S24_LE,S16_LE' + rate_min 48000 + rate_max 48000 + } + } +]