From 57d331ca52524156504249e8fad6466dcf8ebb89 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Thu, 12 Dec 2024 19:28:34 +0200 Subject: [PATCH 1/7] UCM2: Intel: sof-hda-dsp: Move variables defitions from HiFi-sof.conf This patch moves SOF control blobs related variables set are to a new dsp.conf that is included from top level sof-hda-dsp.conf. The change allows to use the variables in InitBootSequence for the controls. E.g. customize the default blobs applied based on DMI ID of the device. There's no change to functionality in this patch. Signed-off-by: Seppo Ingalsuo --- ucm2/Intel/sof-hda-dsp/HiFi-sof.conf | 81 ------------------------ ucm2/Intel/sof-hda-dsp/dsp.conf | 82 +++++++++++++++++++++++++ ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf | 1 + 3 files changed, 83 insertions(+), 81 deletions(-) create mode 100644 ucm2/Intel/sof-hda-dsp/dsp.conf diff --git a/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf b/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf index 3a4c4457..39747f70 100644 --- a/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf +++ b/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf @@ -1,86 +1,5 @@ # Control audio processing in SOF -# File paths for controlling SOF processing - -Define.SOFVendor "$${sys:devices/virtual/dmi/id/sys_vendor}" -Define.SOFProduct "$${sys:devices/virtual/dmi/id/product_name}" - -If.SOFVendor { - Condition { - Type String - Empty "${var:SOFVendor}" - } - True.Define.SOFVendor "${sys:devices/virtual/dmi/id/board_vendor}" -} - -If.SOFProduct { - Condition { - Type String - Empty "${var:SOFProduct}" - } - True.Define.SOFProduct "${sys:devices/virtual/dmi/id/board_name}" -} - -If.SOFIPCVer { - Condition { - Type ControlExists - Control "name='Post Mixer Analog Playback IIR Eq bytes'" - } - True.Define { - SOFIPCVer "ipc4" - PostMixerAnalogPlaybackIIRBytes "Post Mixer Analog Playback IIR Eq bytes" - PostMixerAnalogPlaybackFIRBytes "Post Mixer Analog Playback FIR Eq bytes" - PostMixerAnalogPlaybackDRCBytes "Post Mixer Analog Playback DRC bytes" - PostMixerAnalogPlaybackDRCSwitch "Post Mixer Analog Playback DRC switch" - } - False.Define { - SOFIPCVer "ipc3" - PostMixerAnalogPlaybackIIRBytes "EQIIR1.0 eqiir_coef_1" - PostMixerAnalogPlaybackFIRBytes "EQFIR1.0 eqfir_coef_1" - PostMixerAnalogPlaybackDRCBytes "not available" - PostMixerAnalogPlaybackDRCSwitch "not available" - } -} - -If.SOFPath { - Condition { Type AlwaysTrue } - True.Define { - BlobPath "${ConfTopDir}/blobs/sof/${var:SOFIPCVer}" - SpeakerIirBlob "${var:BlobPath}/eq_iir/highpass_100hz_0db_48khz.blob" - SpeakerFirBlob "${var:BlobPath}/eq_fir/pass.blob" - SpeakerDrcBlob "${var:BlobPath}/drc/speaker_default.blob" - HeadphoneIirBlob "${var:BlobPath}/eq_iir/pass.blob" - HeadphoneFirBlob "${var:BlobPath}/eq_fir/pass.blob" - HeadphoneDrcBlob "${var:BlobPath}/drc/passthrough.blob" - ConfPathFromDMI "${var:SOFVendor}/${var:SOFProduct}.conf" - SOFProductConfig "/blobs/sof/product_configs/${var:ConfPathFromDMI}" - SOFConfFullPath "${ConfTopDir}${var:SOFProductConfig}" - SOFUserConfig "/blobs/sof/user_configs/${var:ConfPathFromDMI}" - SOFUserConfFullPath "${ConfTopDir}${var:SOFUserConfig}" - } -} - -If.HasUserConfig { - Condition { - Type Path - Mode read - Path "${var:SOFUserConfFullPath}" - } - True { - Include.product-config.File "${var:SOFUserConfig}" - } - False.If.HasProductConfig { - Condition { - Type Path - Mode read - Path "${var:SOFConfFullPath}" - } - True { - Include.product-config.File "${var:SOFProductConfig}" - } - } -} - # Redefine headphone control FOR SOF. This is same as Headphone in HDA/HiFi-analog.conf # but adds DRC and EQ controls. diff --git a/ucm2/Intel/sof-hda-dsp/dsp.conf b/ucm2/Intel/sof-hda-dsp/dsp.conf new file mode 100644 index 00000000..cf7fb710 --- /dev/null +++ b/ucm2/Intel/sof-hda-dsp/dsp.conf @@ -0,0 +1,82 @@ +# Control audio processing in SOF + +# File paths for controlling SOF processing + +Define.SOFVendor "$${sys:devices/virtual/dmi/id/sys_vendor}" +Define.SOFProduct "$${sys:devices/virtual/dmi/id/product_name}" + +If.SOFVendor { + Condition { + Type String + Empty "${var:SOFVendor}" + } + True.Define.SOFVendor "${sys:devices/virtual/dmi/id/board_vendor}" +} + +If.SOFProduct { + Condition { + Type String + Empty "${var:SOFProduct}" + } + True.Define.SOFProduct "${sys:devices/virtual/dmi/id/board_name}" +} + +If.SOFIPCVer { + Condition { + Type ControlExists + Control "name='Post Mixer Analog Playback IIR Eq bytes'" + } + True.Define { + SOFIPCVer "ipc4" + PostMixerAnalogPlaybackIIRBytes "Post Mixer Analog Playback IIR Eq bytes" + PostMixerAnalogPlaybackFIRBytes "Post Mixer Analog Playback FIR Eq bytes" + PostMixerAnalogPlaybackDRCBytes "Post Mixer Analog Playback DRC bytes" + PostMixerAnalogPlaybackDRCSwitch "Post Mixer Analog Playback DRC switch" + } + False.Define { + SOFIPCVer "ipc3" + PostMixerAnalogPlaybackIIRBytes "EQIIR1.0 eqiir_coef_1" + PostMixerAnalogPlaybackFIRBytes "EQFIR1.0 eqfir_coef_1" + PostMixerAnalogPlaybackDRCBytes "not available" + PostMixerAnalogPlaybackDRCSwitch "not available" + } +} + +If.SOFPath { + Condition { Type AlwaysTrue } + True.Define { + BlobPath "${ConfTopDir}/blobs/sof/${var:SOFIPCVer}" + SpeakerIirBlob "${var:BlobPath}/eq_iir/highpass_100hz_0db_48khz.blob" + SpeakerFirBlob "${var:BlobPath}/eq_fir/pass.blob" + SpeakerDrcBlob "${var:BlobPath}/drc/speaker_default.blob" + HeadphoneIirBlob "${var:BlobPath}/eq_iir/pass.blob" + HeadphoneFirBlob "${var:BlobPath}/eq_fir/pass.blob" + HeadphoneDrcBlob "${var:BlobPath}/drc/passthrough.blob" + ConfPathFromDMI "${var:SOFVendor}/${var:SOFProduct}.conf" + SOFProductConfig "/blobs/sof/product_configs/${var:ConfPathFromDMI}" + SOFConfFullPath "${ConfTopDir}${var:SOFProductConfig}" + SOFUserConfig "/blobs/sof/user_configs/${var:ConfPathFromDMI}" + SOFUserConfFullPath "${ConfTopDir}${var:SOFUserConfig}" + } +} + +If.HasUserConfig { + Condition { + Type Path + Mode read + Path "${var:SOFUserConfFullPath}" + } + True { + Include.product-config.File "${var:SOFUserConfig}" + } + False.If.HasProductConfig { + Condition { + Type Path + Mode read + Path "${var:SOFConfFullPath}" + } + True { + Include.product-config.File "${var:SOFProductConfig}" + } + } +} diff --git a/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf b/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf index 84596bcd..7469797d 100644 --- a/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf +++ b/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf @@ -1,6 +1,7 @@ Syntax 7 Include.card-init.File "/lib/card-init.conf" +Include.dsp-variables.File "dsp.conf" Define { DeviceMic "Mic" From d1d0dad14571c527f392c7ea1424ad510d9983b1 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Thu, 12 Dec 2024 19:54:44 +0200 Subject: [PATCH 2/7] UCM2: Intel: sof-hda-dsp: Cleanup definitions This patch cleans up definitions in preparation to add more controlled processing for audio endpoints. - The algorithms names write style is aligned to e.g. "Iir" instead of "IIR" and "Iir" to avoid mistakes from typos. - Add prefix PostMixerAnalogPlayback to HDA analog playback blob names to separate them from other Speaker endpoints. - Similarly rename SofControl macro. The functionality is not changed. Signed-off-by: Seppo Ingalsuo --- ucm2/Intel/sof-hda-dsp/HiFi-sof.conf | 28 ++++++++-------- ucm2/Intel/sof-hda-dsp/dsp.conf | 33 +++++++++++-------- .../sof/product_configs/AAEON/UPX-TGL01.conf | 12 +++---- 3 files changed, 39 insertions(+), 34 deletions(-) diff --git a/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf b/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf index 39747f70..c23b9b05 100644 --- a/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf +++ b/ucm2/Intel/sof-hda-dsp/HiFi-sof.conf @@ -3,10 +3,10 @@ # Redefine headphone control FOR SOF. This is same as Headphone in HDA/HiFi-analog.conf # but adds DRC and EQ controls. -DefineMacro.SofControl { - Define.EndpointDrcVar "${var:__endpoint}DrcBlob" - Define.EndpointIirVar "${var:__endpoint}IirBlob" - Define.EndpointFirVar "${var:__endpoint}FirBlob" +DefineMacro.SofAnalogPlaybackControl { + Define.EndpointDrcVar "PostMixerAnalogPlayback${var:__endpoint}DrcBlob" + Define.EndpointIirVar "PostMixerAnalogPlayback${var:__endpoint}IirBlob" + Define.EndpointFirVar "PostMixerAnalogPlayback${var:__endpoint}FirBlob" Define.EndpointDrcBlob "${var:$EndpointDrcVar}" Define.EndpointIirBlob "${var:$EndpointIirVar}" Define.EndpointFirBlob "${var:$EndpointFirVar}" @@ -14,29 +14,29 @@ DefineMacro.SofControl { If.endpoint_with_drc { Condition { Type ControlExists - Control "name='${var:PostMixerAnalogPlaybackDRCSwitch}'" + Control "name='${var:PostMixerAnalogPlaybackDrcSwitch}'" } True { EnableSequence [ # For debug uncomment below the echo command to see what blobs are applied #shell "/bin/echo '${var:__endpoint} ${var:EndpointIirBlob} ${var:EndpointFirBlob} ${var:EndpointDrcBlob}' >> /tmp/alsa-ucm.txt" - cset "name='${var:PostMixerAnalogPlaybackDRCSwitch}' ${var:__drcswitch}" - cset-tlv "name='${var:PostMixerAnalogPlaybackDRCBytes}' ${var:EndpointDrcBlob}" - cset-tlv "name='${var:PostMixerAnalogPlaybackIIRBytes}' ${var:EndpointIirBlob}" - cset-tlv "name='${var:PostMixerAnalogPlaybackFIRBytes}' ${var:EndpointFirBlob}" + cset "name='${var:PostMixerAnalogPlaybackDrcSwitch}' ${var:__drcswitch}" + cset-tlv "name='${var:PostMixerAnalogPlaybackDrcBytes}' ${var:EndpointDrcBlob}" + cset-tlv "name='${var:PostMixerAnalogPlaybackIirBytes}' ${var:EndpointIirBlob}" + cset-tlv "name='${var:PostMixerAnalogPlaybackFirBytes}' ${var:EndpointFirBlob}" ] } False.If.endpoint_with_eq { Condition { Type ControlExists - Control "name='${var:PostMixerAnalogPlaybackFIRBytes}'" + Control "name='${var:PostMixerAnalogPlaybackFirBytes}'" } True { EnableSequence [ # For debug uncomment below the echo command to see what blobs are applied #shell "/bin/echo '${var:__endpoint} ${var:EndpointIirBlob} ${var:EndpointFirBlob}' >> /tmp/alsa-ucm.txt" - cset-tlv "name='${var:PostMixerAnalogPlaybackIIRBytes}' ${var:EndpointIirBlob}" - cset-tlv "name='${var:PostMixerAnalogPlaybackFIRBytes}' ${var:EndpointFirBlob}" + cset-tlv "name='${var:PostMixerAnalogPlaybackIirBytes}' ${var:EndpointIirBlob}" + cset-tlv "name='${var:PostMixerAnalogPlaybackFirBytes}' ${var:EndpointFirBlob}" ] } } @@ -45,7 +45,7 @@ DefineMacro.SofControl { # Merge this to Headpones subtree in HDA/HiFi-analog.conf SectionDevice."Headphones" { - Macro.headphone.SofControl "endpoint=Headphone drcswitch=off" + Macro.headphone.SofAnalogPlaybackControl "endpoint=Headphone drcswitch=off" } # Merge this to Speaker subtree in HDA/HiFi-analog.conf @@ -55,6 +55,6 @@ If.spk { Control "name='Speaker Playback Switch'" } True.SectionDevice."Speaker" { - Macro.speaker.SofControl "endpoint=Speaker drcswitch=on" + Macro.speaker.SofAnalogPlaybackControl "endpoint=Speaker drcswitch=on" } } diff --git a/ucm2/Intel/sof-hda-dsp/dsp.conf b/ucm2/Intel/sof-hda-dsp/dsp.conf index cf7fb710..1846cc91 100644 --- a/ucm2/Intel/sof-hda-dsp/dsp.conf +++ b/ucm2/Intel/sof-hda-dsp/dsp.conf @@ -21,6 +21,13 @@ If.SOFProduct { True.Define.SOFProduct "${sys:devices/virtual/dmi/id/board_name}" } +Define { + PostMixerAnalogPlaybackIirBytes "not available" + PostMixerAnalogPlaybackFirBytes "not available" + PostMixerAnalogPlaybackDrcBytes "not available" + PostMixerAnalogPlaybackDrcSwitch "not available" +} + If.SOFIPCVer { Condition { Type ControlExists @@ -28,17 +35,15 @@ If.SOFIPCVer { } True.Define { SOFIPCVer "ipc4" - PostMixerAnalogPlaybackIIRBytes "Post Mixer Analog Playback IIR Eq bytes" - PostMixerAnalogPlaybackFIRBytes "Post Mixer Analog Playback FIR Eq bytes" - PostMixerAnalogPlaybackDRCBytes "Post Mixer Analog Playback DRC bytes" - PostMixerAnalogPlaybackDRCSwitch "Post Mixer Analog Playback DRC switch" + PostMixerAnalogPlaybackIirBytes "Post Mixer Analog Playback IIR Eq bytes" + PostMixerAnalogPlaybackFirBytes "Post Mixer Analog Playback FIR Eq bytes" + PostMixerAnalogPlaybackDrcBytes "Post Mixer Analog Playback DRC bytes" + PostMixerAnalogPlaybackDrcSwitch "Post Mixer Analog Playback DRC switch" } False.Define { SOFIPCVer "ipc3" - PostMixerAnalogPlaybackIIRBytes "EQIIR1.0 eqiir_coef_1" - PostMixerAnalogPlaybackFIRBytes "EQFIR1.0 eqfir_coef_1" - PostMixerAnalogPlaybackDRCBytes "not available" - PostMixerAnalogPlaybackDRCSwitch "not available" + PostMixerAnalogPlaybackIirBytes "EQIIR1.0 eqiir_coef_1" + PostMixerAnalogPlaybackFirBytes "EQFIR1.0 eqfir_coef_1" } } @@ -46,12 +51,12 @@ If.SOFPath { Condition { Type AlwaysTrue } True.Define { BlobPath "${ConfTopDir}/blobs/sof/${var:SOFIPCVer}" - SpeakerIirBlob "${var:BlobPath}/eq_iir/highpass_100hz_0db_48khz.blob" - SpeakerFirBlob "${var:BlobPath}/eq_fir/pass.blob" - SpeakerDrcBlob "${var:BlobPath}/drc/speaker_default.blob" - HeadphoneIirBlob "${var:BlobPath}/eq_iir/pass.blob" - HeadphoneFirBlob "${var:BlobPath}/eq_fir/pass.blob" - HeadphoneDrcBlob "${var:BlobPath}/drc/passthrough.blob" + PostMixerAnalogPlaybackSpeakerIirBlob "${var:BlobPath}/eq_iir/highpass_100hz_0db_48khz.blob" + PostMixerAnalogPlaybackSpeakerFirBlob "${var:BlobPath}/eq_fir/pass.blob" + PostMixerAnalogPlaybackSpeakerDrcBlob "${var:BlobPath}/drc/speaker_default.blob" + PostMixerAnalogPlaybackHeadphoneIirBlob "${var:BlobPath}/eq_iir/pass.blob" + PostMixerAnalogPlaybackHeadphoneFirBlob "${var:BlobPath}/eq_fir/pass.blob" + PostMixerAnalogPlaybackHeadphoneDrcBlob "${var:BlobPath}/drc/passthrough.blob" ConfPathFromDMI "${var:SOFVendor}/${var:SOFProduct}.conf" SOFProductConfig "/blobs/sof/product_configs/${var:ConfPathFromDMI}" SOFConfFullPath "${ConfTopDir}${var:SOFProductConfig}" diff --git a/ucm2/blobs/sof/product_configs/AAEON/UPX-TGL01.conf b/ucm2/blobs/sof/product_configs/AAEON/UPX-TGL01.conf index 970ae7d6..671a3db7 100644 --- a/ucm2/blobs/sof/product_configs/AAEON/UPX-TGL01.conf +++ b/ucm2/blobs/sof/product_configs/AAEON/UPX-TGL01.conf @@ -2,9 +2,9 @@ # Note: Use the correct IPC version for the blobs path # Example set all processing to bypass -#Define.SpeakerIirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_iir/pass.blob" -#Define.SpeakerFirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_fir/pass.blob" -#Define.SpeakerDrcBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/drc/passthrough.blob" -#Define.HeadphoneIirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_iir/pass.blob" -#Define.HeadphoneFirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_fir/pass.blob" -#Define.HeadphoneDrcBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/drc/passthrough.blob" +#Define.PostMixerAnalogPlaybackSpeakerIirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_iir/pass.blob" +#Define.PostMixerAnalogPlaybackSpeakerFirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_fir/pass.blob" +#Define.PostMixerAnalogPlaybackSpeakerDrcBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/drc/passthrough.blob" +#Define.PostMixerAnalogPlaybackHeadphoneIirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_iir/pass.blob" +#Define.PostMixerAnalogPlaybackHeadphoneFirBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/eq_fir/pass.blob" +#Define.PostMixerAnalogPlaybackHeadphoneDrcBlob "/usr/share/alsa/ucm2/blobs/sof/ipc4/drc/passthrough.blob" From 8b01e837d722cd1abd554f6a34663dc292004095 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Wed, 4 Dec 2024 19:09:24 +0200 Subject: [PATCH 3/7] UCM2: Blobs/SOF/IPC4: Add Beamformer blobs, update README.md This change adds a few blobs to use with SOF TDFB beamformer and updates the instructions how to generate the blobs in SOF. Signed-off-by: Seppo Ingalsuo --- ucm2/blobs/sof/ipc4/drc/README.md | 6 +++--- ucm2/blobs/sof/ipc4/tdfb/README.md | 7 +++++++ .../tdfb/line2_50mm_pm5_15_30_90deg_48khz.bin | Bin 0 -> 2628 bytes .../tdfb/line2_68mm_pm5_15_30_90deg_48khz.bin | Bin 0 -> 2628 bytes .../tdfb/line2_74mm_pm5_15_30_90deg_48khz.bin | Bin 0 -> 2628 bytes .../ipc4/tdfb/line2_generic_pm10deg_48khz.bin | Bin 0 -> 828 bytes ucm2/blobs/sof/ipc4/tdfb/line2_pass.bin | Bin 0 -> 144 bytes ucm2/blobs/sof/ipc4/tdfb/line4_pass.bin | Bin 0 -> 212 bytes 8 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 ucm2/blobs/sof/ipc4/tdfb/README.md create mode 100644 ucm2/blobs/sof/ipc4/tdfb/line2_50mm_pm5_15_30_90deg_48khz.bin create mode 100644 ucm2/blobs/sof/ipc4/tdfb/line2_68mm_pm5_15_30_90deg_48khz.bin create mode 100644 ucm2/blobs/sof/ipc4/tdfb/line2_74mm_pm5_15_30_90deg_48khz.bin create mode 100644 ucm2/blobs/sof/ipc4/tdfb/line2_generic_pm10deg_48khz.bin create mode 100644 ucm2/blobs/sof/ipc4/tdfb/line2_pass.bin create mode 100644 ucm2/blobs/sof/ipc4/tdfb/line4_pass.bin diff --git a/ucm2/blobs/sof/ipc4/drc/README.md b/ucm2/blobs/sof/ipc4/drc/README.md index 68f8910c..0c53b6f5 100644 --- a/ucm2/blobs/sof/ipc4/drc/README.md +++ b/ucm2/blobs/sof/ipc4/drc/README.md @@ -1,7 +1,7 @@ # How to build -These blobs were exported with example_drc.m tool from -[SOF](https://github.com/thesofproject/sof) +These blobs were exported with Matlab/Octave script sof_example_drc.m +from [SOF](https://github.com/thesofproject/sof) Usage: -cd tools/tune/drc; octave --no-window-system example_drc.m +cd src/audio/drc/tune; octave --no-window-system sof_example_drc.m diff --git a/ucm2/blobs/sof/ipc4/tdfb/README.md b/ucm2/blobs/sof/ipc4/tdfb/README.md new file mode 100644 index 00000000..cdb48b5a --- /dev/null +++ b/ucm2/blobs/sof/ipc4/tdfb/README.md @@ -0,0 +1,7 @@ +# How to build + +These blobs were exported with Matlab/Octave scripts from +[SOF](https://github.com/thesofproject/sof) + +Usage: +cd src/audio/tdfb/tune; sof_example_all.sh diff --git a/ucm2/blobs/sof/ipc4/tdfb/line2_50mm_pm5_15_30_90deg_48khz.bin b/ucm2/blobs/sof/ipc4/tdfb/line2_50mm_pm5_15_30_90deg_48khz.bin new file mode 100644 index 0000000000000000000000000000000000000000..cfa71e7e080ec8b2093f7449ce33018a9b755235 GIT binary patch literal 2628 zcmdT`e@vBC7=F%o?}f{iyinExZ#2ES<=TpZ)-Y<(*qB z(8B&u8EPt^gqxPR#d4x+i+(s_+0=euN`Vvd;;rlwm-~I^>HY3?jX&_u7M!#9eD8PO zbMN=O=Y7ueeGUNm9^lEM!d!9T6CZn(!}iBFd)^5HO3W!E;KczZRs`br<5wqqQqy9L zWBi*Vyuw|)$S^N+kOR_xk$#bVaqHu+?B^wk{l;Ng6JaPg4QaRqx8ZhV!iPJMCH>C$ z=#%?QWZ+hbdc|LibhwcW7aVbf_R}ZEq+rp52z}`1L->N*@gwW-I#1(4&Qs_04z)`A zjV|kgF=P%nT4Ob?y6AHE?8x`twt?KLGmqpCuASZ(IhVXSI?MHDtjY1Qxy#sOT~>bm zl-j9HjOmZCkgwoTW}%aQ{KRyGnFN#ej!hj*z~rl40#i)5bd4bn@ms#bT2}IXe$FF2 z%65LhX0~vzjQhBsZ9F9NpYkNT`Ll2;6iml#`YUm@BNBjuc^)&H5YF4zLf*OlZ!R|8Bw}bl@~Q(ZNyFGoT)0qZ-s6V}))vwpx1} zIp&M5g6JBL8h&>}if{R~Q^_OIJm<~kVZ(2oQa#oKs!;c!Mb{#%OK=afQ6_m5^0?%b zgdgO@g~iPH$(uTuCS&bvOs25ucTt^QVb2z>V;S?9NhhD>3#<}um2xqQSj-ZMRB{#9 zvz~j{!5;ZdD42o!@Hkdr9X4SbcB2{laX@UJ_}kEcx3Cet=t3K|;3eT%KvXMD7-j3{ z#Io?ZS$%tt(*3RBRhz>+WozC(zw(@OZOaXn2>2LIh`VC#J@7A??M4!_`x?irQp20Z` za2adZ$YY{Xp`c$>Xf9=38ewCnFww2%s5148I;hH36luz%l9W@0F^sRIzlWW|=9kgME5Uqh7M53W zE$?SGQ|RK=IObmchpy9i>F4xo`iSn93}%Wpt&~h#CF8S_dGtD$?7f&Om~5mKM#-ZNV5DG1lPo{rpU zuC(?VJ=PRst^E#;+Z*6zF-kZS+tmG_yOnC0@%ax*t^J!@Fab9LK-Uxi1^r-Q9>g3RzROMlNSk%(Y^f5ejK4PNf%FAQfz61roMpw~f$D zk=lAeR08QmZ6mBE%^*sN6(Q7YtzlHQ*v)ctZS&r>`*O~=@444vf6V@iuIJ0|Iludy zhkJhK`F;4F;{i~Y2drDOyjm$rl;fcBxcSV(o%h0mQFt{1g*e2_ilyn_GgtqelMZdB zm}G)+{wc*6ycL7ogdVRD2|-Hx?*75V@u4=;9;iLj_x>N^?AkH@v5k zb)MnWTI;agWon(9OsB~5vR(hwfSs(xF_z*x1~HZ<>hg?dV@+>)4vC|Fp5o{Hgdee+N7>0Ed|P^xhm^n19-iQrTJsZsms5?l2Eotb8h2xv=5NEz;;RDla1BCf*UFb$&Bl{oPIi?%tXy%sJmWz`xdXqj8@)V_ zeOzGf=QAedM9gNV&3fK`#nYFZ>+hL*A=I_4ZG2Ad`b5;TJ=J7|?RFD%{AP>Og_F*s zu($-ZoQFmhphIqSOr7Xc49SNl<<1#*!WC0fHuf%4Q)YDZwwshUoe@jNd6;{+Pb}@{ zUhd{jhNY+2!e*V@xQj3GfC%g6N%iEcoNBbSNUSUpIV*7=HeoZipat8|iZGriixmwz49`zV4>S#7qn!z`p_ec*Ih##!e{q*}c7$zA@? z^q&0F7ap!^d}98&o`O53CjHU)dha{QA*(AjVK&+;%#i&JRy$#II(H)J%)wp!fh+Zt zFEhd~^u!}GSaNsbN~!7p?wwceIJ1UyzBDuQUtB}_E6IJUxnFbEKeu*&xrgu4Org$R UMX4fJ@qi+r0QROwpebGVUw4`E3jhEB literal 0 HcmV?d00001 diff --git a/ucm2/blobs/sof/ipc4/tdfb/line2_generic_pm10deg_48khz.bin b/ucm2/blobs/sof/ipc4/tdfb/line2_generic_pm10deg_48khz.bin new file mode 100644 index 0000000000000000000000000000000000000000..266725fa9264e47c865e7848766896858365a6f4 GIT binary patch literal 828 zcmZQ(U|=v|W?%^RcQXMp8AO0=h6Riu5(R+7Ss0iY7{QnkD96vR>_0?_15lLO;7vVc zCSrHf|Nl%3zyEVFeEcuY@Zi5T!-@YMKwsoBRQ+GT;Q0R$!?%AHjFbPZX5{(j!{qVT zk(v9?dzM*0?{j?q=%$ca#`C&>+xW*_*6817n6LcVz_jJ>Pez}Am5jUpNig#NKgSUG ze+om(|1^fR|D735|JP)A^j{2U6DQC{CWimOuo^mUqActwjXM@_XrZ~m0m7$+90NH0 ZG6G3Z>Slsl4B~+R7hEI_%9;gE`2ZPRkxBpn literal 0 HcmV?d00001 diff --git a/ucm2/blobs/sof/ipc4/tdfb/line2_pass.bin b/ucm2/blobs/sof/ipc4/tdfb/line2_pass.bin new file mode 100644 index 0000000000000000000000000000000000000000..bc50d3f3f597f34050e67df51f80dee532e48710 GIT binary patch literal 144 zcmZQ(U|{F~;$VL_6ClNq0U{PKGJ_~&01{^cLPj7B!VC;@U=l>IF#P`y=fD^a5C%Ru LkV%X{Gm!xRpGXJD literal 0 HcmV?d00001 diff --git a/ucm2/blobs/sof/ipc4/tdfb/line4_pass.bin b/ucm2/blobs/sof/ipc4/tdfb/line4_pass.bin new file mode 100644 index 0000000000000000000000000000000000000000..359a9f4b005093157df584b3a5ffa4b35f9091a0 GIT binary patch literal 212 zcmZQ(U|=`{#KHb Date: Fri, 13 Dec 2024 19:30:47 +0200 Subject: [PATCH 4/7] UCM2: Intel: sof-hda-dsp: Enable Dmic0 DRC and TDFB pre-processing This patch enables the SOF microphone capture pre-processing features as BootSequence initial values if the controls for them are available. If the user later switches these off, they will remain off. The DRC is dynamic range control that boosts the capture level, and the TDFB (time-domain fixed beamformer) improves capture signal-to-noise ratio for set beam angle direction. The used 0 degrees angle is defined as angle towards notebook computer user. The generic blobs in topology can be replaced with device specific blobs based on DMI ID. See ucm2/blobs/sof/product_configs and ucm2/blobs/sof/user_configs. Signed-off-by: Seppo Ingalsuo --- ucm2/Intel/sof-hda-dsp/dsp.conf | 118 ++++++++++++++++++++++++ ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf | 13 ++- 2 files changed, 127 insertions(+), 4 deletions(-) diff --git a/ucm2/Intel/sof-hda-dsp/dsp.conf b/ucm2/Intel/sof-hda-dsp/dsp.conf index 1846cc91..5ca5d738 100644 --- a/ucm2/Intel/sof-hda-dsp/dsp.conf +++ b/ucm2/Intel/sof-hda-dsp/dsp.conf @@ -26,6 +26,12 @@ Define { PostMixerAnalogPlaybackFirBytes "not available" PostMixerAnalogPlaybackDrcBytes "not available" PostMixerAnalogPlaybackDrcSwitch "not available" + Dmic0CaptureIirBytes "not available" + Dmic0CaptureDrcBytes "not available" + Dmic0CaptureDrcSwitch "not available" + Dmic0CaptureBeamformerBytes "not available" + Dmic0CaptureBeamformerBeamSwitch "not available" + Dmic0CaptureBeamformerBeamAngleSet "not available" } If.SOFIPCVer { @@ -47,6 +53,21 @@ If.SOFIPCVer { } } +If.SOFDmic0Proc { + Condition { + Type ControlExists + Control "name='DMIC0 Capture IIR Eq'" + } + True.Define { + Dmic0CaptureIirBytes "DMIC0 Capture IIR Eq" + Dmic0CaptureDrcBytes "Dmic0 Capture DRC bytes" + Dmic0CaptureDrcSwitch "Dmic0 Capture DRC switch" + Dmic0CaptureBeamformerBytes "Dmic0 Capture TDFB bytes" + Dmic0CaptureBeamformerBeamSwitch "Dmic0 Capture TDFB beam switch" + Dmic0CaptureBeamformerBeamAngleSet "Dmic0 Capture TDFB angle set enum" + } +} + If.SOFPath { Condition { Type AlwaysTrue } True.Define { @@ -57,6 +78,12 @@ If.SOFPath { PostMixerAnalogPlaybackHeadphoneIirBlob "${var:BlobPath}/eq_iir/pass.blob" PostMixerAnalogPlaybackHeadphoneFirBlob "${var:BlobPath}/eq_fir/pass.blob" PostMixerAnalogPlaybackHeadphoneDrcBlob "${var:BlobPath}/drc/passthrough.blob" + # Leave Dmic0 default blobs empty to not override blobs in topology by default. + # The DMI ID based customization in blobs/sof/user_configs or + # blobs/sof/product_configs may set these as FixedBootConfig. + Dmic0CaptureDrcBlob "" + Dmic0CaptureBeamformerBlob "" + Dmic0CaptureIirBlob "" ConfPathFromDMI "${var:SOFVendor}/${var:SOFProduct}.conf" SOFProductConfig "/blobs/sof/product_configs/${var:ConfPathFromDMI}" SOFConfFullPath "${ConfTopDir}${var:SOFProductConfig}" @@ -85,3 +112,94 @@ If.HasUserConfig { } } } + +DefineMacro.SofDrcBootSetup { + Define.ep_SwitchVar "${var:__endpoint}${var:__direction}DrcSwitch" + Define.ep_BytesVar "${var:__endpoint}${var:__direction}DrcBytes" + Define.ep_BlobVar "${var:__endpoint}${var:__direction}DrcBlob" + Define.EndpointDrcSwitch "${var:$ep_SwitchVar}" + Define.EndpointDrcBytes "${var:$ep_BytesVar}" + Define.EndpointDrcBlob "${var:$ep_BlobVar}" + If.EndpointMicDrc { + Condition { + Type ControlExists + Control "name='${var:EndpointDrcSwitch}'" + } + True { + If.EndpointDrcBlobDefined { + Condition { + Type String + Empty "${var:EndpointDrcBlob}" + } + False.FixedBootSequence [ + #shell "/bin/echo 'Setting ${var:EndpointDrcBytes} to ${var:EndpointDrcBlob}' >> /tmp/alsa-ucm.txt" + cset-tlv "name='${var:EndpointDrcBytes}' ${var:EndpointDrcBlob}" + ] + } + BootSequence [ + #shell "/bin/echo 'Switching ${var:EndpointDrcSwitch} on' >> /tmp/alsa-ucm.txt" + cset "name='${var:EndpointDrcSwitch}' on" + ] + } + } +} + +DefineMacro.SofBeamformerBootSetup { + Define.ep_BeamSwitchVar "${var:__endpoint}${var:__direction}BeamformerBeamSwitch" + Define.ep_BeamAngleSetVar "${var:__endpoint}${var:__direction}BeamformerBeamAngleSet" + Define.ep_BytesVar "${var:__endpoint}${var:__direction}BeamformerBytes" + Define.ep_BlobVar "${var:__endpoint}${var:__direction}BeamformerBlob" + Define.EndpointBeamformerBeamSwitch "${var:$ep_BeamSwitchVar}" + Define.EndpointBeamformerBeamAngleSet "${var:$ep_BeamAngleSetVar}" + Define.EndpointBeamformerBytes "${var:$ep_BytesVar}" + Define.EndpointBeamformerBlob "${var:$ep_BlobVar}" + If.EndpointMicBeamformer { + Condition { + Type ControlExists + Control "name='${var:EndpointBeamformerBeamSwitch}'" + } + True { + If.EndpointBeamformerBlobDefined { + Condition { + Type String + Empty "${var:EndpointBeamformerBlob}" + } + False.FixedBootSequence [ + #shell "/bin/echo 'Setting ${var:EndpointBeamformerBytes} to ${var:EndpointBeamformerBlob}' >> /tmp/alsa-ucm.txt" + cset-tlv "name='${var:EndpointBeamformerBytes}' ${var:EndpointBeamformerBlob}" + ] + } + BootSequence [ + #shell "/bin/echo 'Switching ${var:EndpointBeamformerBeamSwitch} on' >> /tmp/alsa-ucm.txt" + #shell "/bin/echo 'Setting ${var:EndpointBeamformerBeamAngleSet} 0' >> /tmp/alsa-ucm.txt" + cset "name='${var:EndpointBeamformerBeamSwitch}' on" + cset "name='${var:EndpointBeamformerBeamAngleSet}' 0" + ] + } + } +} + +DefineMacro.SofEqBootSetup { + Define.ep_BytesVar "${var:__endpoint}${var:__direction}${var:__eqtype}Bytes" + Define.ep_BlobVar "${var:__endpoint}${var:__direction}${var:__eqtype}Blob" + Define.EndpointEqBytes "${var:$ep_BytesVar}" + Define.EndpointEqBlob "${var:$ep_BlobVar}" + If.EndpointEq { + Condition { + Type ControlExists + Control "name='${var:EndpointEqBytes}'" + } + True { + If.EndpointEqBlobDefined { + Condition { + Type String + Empty "${var:EndpointEqBlob}" + } + False.FixedBootSequence [ + #shell "/bin/echo 'Setting ${var:EndpointEqBytes} to ${var:EndpointEqBlob}' >> /tmp/alsa-ucm.txt" + cset-tlv "name='${var:EndpointEqBytes}' ${var:EndpointEqBlob}" + ] + } + } + } +} diff --git a/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf b/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf index 7469797d..a0370b5e 100644 --- a/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf +++ b/ucm2/Intel/sof-hda-dsp/sof-hda-dsp.conf @@ -109,10 +109,15 @@ If.dmic { Type ControlExists Control "name='Dmic0 Capture Volume'" } - True.BootSequence [ - cset "name='Dmic0 Capture Volume' 70%" - cset "name='Dmic0 Capture Switch' on" - ] + True { + BootSequence [ + cset "name='Dmic0 Capture Volume' 70%" + cset "name='Dmic0 Capture Switch' on" + ] + Macro.Dmic0.SofEqBootSetup "endpoint='Dmic0' direction='Capture' eqtype='Iir'" + Macro.Dmic0.SofDrcBootSetup "endpoint='Dmic0' direction='Capture'" + Macro.Dmic0.SofBeamformerBootSetup "endpoint=Dmic0 direction=Capture" + } } } From 4d4f09b89b28920f77dcc2d1a5481ccb1ef829e9 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Mon, 16 Dec 2024 15:38:44 +0200 Subject: [PATCH 5/7] UCM2: sof-soundwire: Enable DRC and equalizers for speaker This patch enables SOF post-processing for soundwire speaker output. The DRC processing is enabled as BootSequence, and setup of DRC, IIR, and FIR equalizer blobs as FixedBootSeqeuence by DMI ID if custom blobs have been defined for the device in ucm2/blobs/sof/product_configs or ucm2/blobs/sof/user_configs. The DRC can be turned off permanently by user space if not desired since BootSequence is only used for first time UCM2 start. The DRC, IIR, FIR blobs are set as FixedBootSequence only if custom blobs are defined. Otherwise the blobs defined in topology remain in use. Signed-off-by: Seppo Ingalsuo --- ucm2/Intel/sof-hda-dsp/dsp.conf | 31 ++++++++++++++++++++++----- ucm2/sof-soundwire/sof-soundwire.conf | 8 +++++++ 2 files changed, 34 insertions(+), 5 deletions(-) diff --git a/ucm2/Intel/sof-hda-dsp/dsp.conf b/ucm2/Intel/sof-hda-dsp/dsp.conf index 5ca5d738..0d4ad57e 100644 --- a/ucm2/Intel/sof-hda-dsp/dsp.conf +++ b/ucm2/Intel/sof-hda-dsp/dsp.conf @@ -26,6 +26,10 @@ Define { PostMixerAnalogPlaybackFirBytes "not available" PostMixerAnalogPlaybackDrcBytes "not available" PostMixerAnalogPlaybackDrcSwitch "not available" + PostMixerSpeakerPlaybackIirBytes "not available" + PostMixerSpeakerPlaybackFirBytes "not available" + PostMixerSpeakerPlaybackDrcBytes "not available" + PostMixerSpeakerPlaybackDrcSwitch "not available" Dmic0CaptureIirBytes "not available" Dmic0CaptureDrcBytes "not available" Dmic0CaptureDrcSwitch "not available" @@ -34,7 +38,7 @@ Define { Dmic0CaptureBeamformerBeamAngleSet "not available" } -If.SOFIPCVer { +If.SOFHdaIpc4 { Condition { Type ControlExists Control "name='Post Mixer Analog Playback IIR Eq bytes'" @@ -46,10 +50,23 @@ If.SOFIPCVer { PostMixerAnalogPlaybackDrcBytes "Post Mixer Analog Playback DRC bytes" PostMixerAnalogPlaybackDrcSwitch "Post Mixer Analog Playback DRC switch" } - False.Define { - SOFIPCVer "ipc3" - PostMixerAnalogPlaybackIirBytes "EQIIR1.0 eqiir_coef_1" - PostMixerAnalogPlaybackFirBytes "EQFIR1.0 eqfir_coef_1" + False.If.SOFSdwIpc4 { + Condition { + Type ControlExists + Control "name='Post Mixer Speaker Playback IIR Eq bytes'" + } + True.Define { + SOFIPCVer "ipc4" + PostMixerSpeakerPlaybackIirBytes "Post Mixer Speaker Playback IIR Eq bytes" + PostMixerSpeakerPlaybackFirBytes "Post Mixer Speaker Playback FIR Eq bytes" + PostMixerSpeakerPlaybackDrcBytes "Post Mixer Speaker Playback DRC bytes" + PostMixerSpeakerPlaybackDrcSwitch "Post Mixer Speaker Playback DRC switch" + } + False.Define { + SOFIPCVer "ipc3" + PostMixerAnalogPlaybackIirBytes "EQIIR1.0 eqiir_coef_1" + PostMixerAnalogPlaybackFirBytes "EQFIR1.0 eqfir_coef_1" + } } } @@ -84,6 +101,10 @@ If.SOFPath { Dmic0CaptureDrcBlob "" Dmic0CaptureBeamformerBlob "" Dmic0CaptureIirBlob "" + # Similarly leave SDW speaker default blobs empty. + PostMixerSpeakerPlaybackIirBlob "" + PostMixerSpeakerPlaybackFirBlob "" + PostMixerSpeakerPlaybackDrcBlob "" ConfPathFromDMI "${var:SOFVendor}/${var:SOFProduct}.conf" SOFProductConfig "/blobs/sof/product_configs/${var:ConfPathFromDMI}" SOFConfFullPath "${ConfTopDir}${var:SOFProductConfig}" diff --git a/ucm2/sof-soundwire/sof-soundwire.conf b/ucm2/sof-soundwire/sof-soundwire.conf index a2f95892..736912dc 100644 --- a/ucm2/sof-soundwire/sof-soundwire.conf +++ b/ucm2/sof-soundwire/sof-soundwire.conf @@ -176,3 +176,11 @@ If.HdmiIec61937 { } True.Macro.save_hdmi_cfg.HdmiPCMSave { Name "42-sof-hdmi" } } + +# Define macros to set up processing controls +Include.dsp-variables.File "../Intel/sof-hda-dsp/dsp.conf" + +# Set BootSequence and FixedBootSequence for drc, eqiir, eqfir +Macro.SpeakerDrc.SofDrcBootSetup "endpoint='PostMixerSpeaker' direction='Playback'" +Macro.SpeakerIir.SofEqBootSetup "endpoint='PostMixerSpeaker' direction='Playback' eqtype='Iir'" +Macro.SpeakerFir.SofEqBootSetup "endpoint='PostMixerSpeaker' direction='Playback' eqtype='Fir'" From c24fe24ad8ad89e512c0da6f89be12ff43a6992f Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Tue, 17 Dec 2024 14:56:18 +0200 Subject: [PATCH 6/7] UCM2: sof-soundwire: Add setup of IIR, DRC, beamformer for mic array This patch enables as BootSequence the DRC and multi-microphone beamformer processing with the supplied blobs in topology. The enable is for defaults if there is no previous control state. The user can permanently switch off them if needed. If DMI ID based customization can done with scripts in blobs/sof/product_configs or blobs/sof/user_configs. If the blob file names are not empty the blobs are applied by UCM2 as FixedBootSequence in every boot to replace topology defaults. Signed-off-by: Seppo Ingalsuo --- ucm2/Intel/sof-hda-dsp/dsp.conf | 25 +++++++++++++++++++++++++ ucm2/sof-soundwire/sof-soundwire.conf | 5 +++++ 2 files changed, 30 insertions(+) diff --git a/ucm2/Intel/sof-hda-dsp/dsp.conf b/ucm2/Intel/sof-hda-dsp/dsp.conf index 0d4ad57e..eca6a270 100644 --- a/ucm2/Intel/sof-hda-dsp/dsp.conf +++ b/ucm2/Intel/sof-hda-dsp/dsp.conf @@ -36,6 +36,12 @@ Define { Dmic0CaptureBeamformerBytes "not available" Dmic0CaptureBeamformerBeamSwitch "not available" Dmic0CaptureBeamformerBeamAngleSet "not available" + MicArrayCaptureIirBytes "not available" + MicArrayCaptureDrcBytes "not available" + MicArrayCaptureDrcSwitch "not available" + MicArrayCaptureBeamformerBytes "not available" + MicArrayCaptureBeamformerBeamSwitch "not available" + MicArrayCaptureBeamformerBeamAngleSet "not available" } If.SOFHdaIpc4 { @@ -85,6 +91,21 @@ If.SOFDmic0Proc { } } +If.SOFSdwMicArrayProc { + Condition { + Type ControlExists + Control "name='Microphone Capture IIR Eq'" + } + True.Define { + MicArrayCaptureIirBytes "Microphone Capture IIR Eq" + MicArrayCaptureDrcBytes "Microphone Capture DRC bytes" + MicArrayCaptureDrcSwitch "Microphone Capture DRC switch" + MicArrayCaptureBeamformerBytes "Microphone Capture TDFB bytes" + MicArrayCaptureBeamformerBeamSwitch "Microphone Capture TDFB beam switch" + MicArrayCaptureBeamformerBeamAngleSet "Microphone Capture TDFB angle set enum" + } +} + If.SOFPath { Condition { Type AlwaysTrue } True.Define { @@ -105,6 +126,10 @@ If.SOFPath { PostMixerSpeakerPlaybackIirBlob "" PostMixerSpeakerPlaybackFirBlob "" PostMixerSpeakerPlaybackDrcBlob "" + # Also leave SDW microphone array default blobs empty. + MicArrayCaptureDrcBlob "" + MicArrayCaptureBeamformerBlob "" + MicArrayCaptureIirBlob "" ConfPathFromDMI "${var:SOFVendor}/${var:SOFProduct}.conf" SOFProductConfig "/blobs/sof/product_configs/${var:ConfPathFromDMI}" SOFConfFullPath "${ConfTopDir}${var:SOFProductConfig}" diff --git a/ucm2/sof-soundwire/sof-soundwire.conf b/ucm2/sof-soundwire/sof-soundwire.conf index 736912dc..9e9e07e3 100644 --- a/ucm2/sof-soundwire/sof-soundwire.conf +++ b/ucm2/sof-soundwire/sof-soundwire.conf @@ -184,3 +184,8 @@ Include.dsp-variables.File "../Intel/sof-hda-dsp/dsp.conf" Macro.SpeakerDrc.SofDrcBootSetup "endpoint='PostMixerSpeaker' direction='Playback'" Macro.SpeakerIir.SofEqBootSetup "endpoint='PostMixerSpeaker' direction='Playback' eqtype='Iir'" Macro.SpeakerFir.SofEqBootSetup "endpoint='PostMixerSpeaker' direction='Playback' eqtype='Fir'" + +# Set BootSequence and FixedBootSequence for Mic array eqiir, tdfb, drc +Macro.MicArrayIir.SofEqBootSetup "endpoint='MicArray' direction='Capture' eqtype='Iir'" +Macro.MicArrayDrc.SofDrcBootSetup "endpoint='MicArray' direction='Capture'" +Macro.MicarrayTdfb.SofBeamformerBootSetup "endpoint='MicArray' direction='Capture'" From a6241375379774136be16a50a1a36cc0582a4776 Mon Sep 17 00:00:00 2001 From: Seppo Ingalsuo Date: Thu, 19 Dec 2024 13:07:37 +0200 Subject: [PATCH 7/7] UCM2: sof-soundwire: Add setup of IIR, DRC, beamformer for PCH-DMIC The SoundWire PCs with PCH-DMIC use the top level sof-soundwire.conf. This patch adds similar Dmic0 end-point processing enable as done in for DMIC in HDA codec PCs if the controls for processing exist. Signed-off-by: Seppo Ingalsuo --- ucm2/sof-soundwire/sof-soundwire.conf | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/ucm2/sof-soundwire/sof-soundwire.conf b/ucm2/sof-soundwire/sof-soundwire.conf index 9e9e07e3..8af5e85c 100644 --- a/ucm2/sof-soundwire/sof-soundwire.conf +++ b/ucm2/sof-soundwire/sof-soundwire.conf @@ -189,3 +189,8 @@ Macro.SpeakerFir.SofEqBootSetup "endpoint='PostMixerSpeaker' direction='Playback Macro.MicArrayIir.SofEqBootSetup "endpoint='MicArray' direction='Capture' eqtype='Iir'" Macro.MicArrayDrc.SofDrcBootSetup "endpoint='MicArray' direction='Capture'" Macro.MicarrayTdfb.SofBeamformerBootSetup "endpoint='MicArray' direction='Capture'" + +# For SoundWire PC with PCH-DMIC set BootSequence and FixedBootSequence for eqiir, tdfb, drc +Macro.Dmic0ArrayIir.SofEqBootSetup "endpoint='Dmic0' direction='Capture' eqtype='Iir'" +Macro.Dmic0ArrayDrc.SofDrcBootSetup "endpoint='Dmic0' direction='Capture'" +Macro.Dmic0ArrayTdfb.SofBeamformerBootSetup "endpoint=Dmic0 direction=Capture"