This patch adds to DMIC0 capture TDFB beamformer and DRC for
dynamic range control. The impacted topology names are:
- sof-hda-generic-2ch.tplg
- sof-hda-generic-4ch.tplg
- sof-hda-generic-cavs25-2ch.tplg
- sof-hda-generic-cavs25-4ch.tplg
- sof-hda-generic-ace1-2ch.tplg
- sof-hda-generic-ace2-2ch.tplg
The DMIC0 capture pipelines before this patch was:
DAI-copier -> IIR -> gain -> module copier -> host-copier
After:
DAI-copier -> IIR -> gain -> module copier ->
TDFB -> DRC -> host-copier
The beamformer is set for 2ch topologies to a narrow user
direction stereo image enhance with about 3 dB signal-to-noise
ratio improvement with blob "line2_generic_pm10deg.conf". In 4ch
topologies the beamformer is set to pass-through due to large
variations in notebook array geometries. The processing need to
be enabled per product by UCM2. The beamformer control switch is
by default off.
The DRC is set with blob "dmic_default.conf" to produce up to
10 dB boost in capture level. It helps to make DMIC capture louder
in normal silent conditions while it prevents clipping of samples
in loud conditions. The DRC control switch is by default off.
The added controls (seen with "amixer -c0 controls") are:
- Dmic0 Capture DRC bytes
- Dmic0 Capture DRC switch
- Dmic0 Capture TDFB angle set enum
- Dmic0 Capture TDFB beam switch
- Dmic0 Capture TDFB bytes
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds to analog microphone capture pipeline TDFB
beamformer and DRC for dynamic range control.
The enhanced host copier pipeline is enabled if
HDA_MIC_ENHANCED_CAPTURE is set to true in topologies build.
The keys EFX_HDA_MIC_TDFB_PARAMS and EFX_HDA_MIC_DRC_PARAMS
control the applied configurations blobs.
There is no processing applied to capture audio since the
topology is built with pass-through blobs. E.g. UCM2 should
set up processing with blobs those have effect.
The change impacts sof-hda-generic.tplg. The other topologies
with DMIC are kept as before without added processing. The
analog capture pipelines are before this change:
dai-copier -> eqiir -> module-copier -> host-copier
After:
dai-copier -> eqiir -> module-copier -> TDFB -> DRC -> host-copier
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch changes in cavs-mixin-mixout-hda based topologies the
analog capture pipeline from
dai-copier -> eqiir -> host-copier
to
dai-copier -> eqiir -> module-copier -> host-copier
It allows more flexibility with processing add into host-copier
pipeline and allow capture stream duplication to multiple PCMs.
This change adds 2.2 MCPS from module-copier in TGL platform.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The pipeline is generic for any type of DAI, so using DMIC0_DAI_EQIIR
to select IIR blob is wrong. The blob definition need to be done
at upper level where endpoint is known.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The topologies built with cavs-es83x6.conf
(sof-mtl-es83x6-ssp1-hdmi-ssp02.tplg and sof-mtl-hdmi-ssp02)
are not using dai-copier-eqiir-module-copier-capture pipeline,
so this include can be deleted.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The ADL, ARL, LNL hardware board configurations are below:
ARL has the same dsp generiation as MTL. So set platform = mtl.
SoundWire#
├── link 0: cs42l43 Audio Jack and DMICs/Bridge to amplifiers.
| | -> sof-rpl-cs42l43-l0.tplg
│ │ -> sof-mtl-cs42l43-l0.tplg
│ │ -> sof-arl-cs42l43-l0.tplg
│ │ -> sof-lnl-cs42l43-l0.tplg
│ │
│ ├── link 2: cs35l56 Left and Right Amplifier.
│ -> sof-arl-cs42l43-l0-cs35l56-l2.tplg
│
├──── link 2: cs35l56 Right/Rightx2 Amplifier.
├──── link 3: cs35l56 Left/Leftx2 Amplifier.
-> sof-adl-cs42l43-l0-cs35l56-l23.tplg
-> sof-arl-cs42l43-l0-cs35l56-l23.tplg
-> sof-lnl-cs42l43-l0-cs35l56-l23.tplg
SoundWire#
├── link 2: cs42l43 Audio Jack and DMICs.
│ -> sof-arl-cs42l43-l2.tplg
│
├──── link 3: cs35l56 Left and Right Amplifier.
-> sof-arl-cs42l43-l2-cs35l56-l3.tplg
Signed-off-by: Mac Chiang <mac.chiang@intel.com>
PLATFORM=tgl, can safely removed as it is not included in cavs-sdw and
does not affect the soundwire configurations.
Remove SDW_FMT_24 flag because it has become the fixed format for
soundwire configurations.
SDW_AMP_FEEDBACK is currently used for debugging purposes. So set false
to disable it.
Signed-off-by: Mac Chiang <mac.chiang@intel.com>
Long overdue, I don't know why we keep adding complicated stuff
without having a simpler baseline.
Two configurations are provided, one with default copiers and another
with CHAIN_DMA.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
The rate_min and rate_max no more work with IPC4 topologies. The
SSP2 PCM host pipeline contains a sample rate converter so it can
support multiple rates. With attempt to play (or capture) with
other than 48 kHz the error is printed and resulting playback has
wrong pitch:
Warning: rate is not accurate (requested = 44100Hz, got = 48000Hz)
please, try the plug plugin
Use of rates with list of all rates in topology fixes the issue.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds build of topologies
- sof-hda-generic-cavs25-2ch-mfcc.tplg
- sof-hda-generic-cavs25-4ch-mfcc.tplg
- sof-hda-generic-ace1-2ch-mfcc.tplg
- sof-hda-generic-ace1-4ch-mfcc.tplg
The MFCC is connected to 16 kHz DMIC1 DAI. The MFCC bitstream
is passed to capture PCM. The DMIC1 pipeline style is copied
from DMIC0:
DAI copier -> IIR -> gain -> module_copier -> MFCC -> host copier
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The same dai-copier-eqiir-gain-module-copier-capture pipeline can
be used for both DMIC0 and DMIC1, with different IIR setting,
so the blob definition is moved to dmic-generic.conf where the
pipeline is instantiated.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Modify the class definitions for the mixout-gain-efx-dai-copier-playback
and the mixout-gain-efx-mbdrc-dai-copier-playback pipelines to use the
SubreeCopy feature to extend the mixout-gain-eqiir-eqfir pipeline class
definition.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Add a new pipeline, mixout-gain-eqiir-eqfir, that uses the new alsa-utils
topology feature to allow extending existing pipeline definitions. This
new class extends the base class mixout-gain-dai-copier-playback class
by adding the eqiir & eqfir widgets along with the new routes.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
Modify the route description to an array in preparation for allowing
class extensions to define new classes where existing routes will be
merged with the new routes in the sub classes.
Signed-off-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com>
This patch fixes a recently introduced bug that impacts most
of 4ch DMIC topologies.
The NUM_DMICS=4 controls DAI channels count, while the
DMIC0_PCM_CHANNELS controls host copier channels count. In
most topologies built the DMIC0_PCM_CHANNELS remained in
default 2 setting if it was not explicitly set in cmake target
definitions.
As result the "arecord -c 4" attempt failed e.g. with common
sof-hda-generic-4ch.tplg.
Fixes: 88366121b3 ("Tools: Topology2:
Add DMIC Enhanced Audio Capture development tplg")
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds to DMIC0 capture TDFB beamformer and DRC for
dynamic range control. The names of updated topologies are
sof-hda-efx-generic-2ch.tplg and sof-hda-efx-generic-4ch.
The efx topologies with mbdrc are updated similarly.
The pipeline is enabled if DMIC0_ENHANCED_CAPTURE is set to true
in topologies build. They keys EFX_DMIC0_TDFB_PARAMS and
EFX_DMIC0_DRC_PARAMS control the configurations blobs use.
Build parameter DMIC0_PCM_CHANNELS controls the number of output
channels for beamformer. It is by default two.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds to analog microphone capture pipeline TDFB
beamformer and DRC for dynamic range control. The name of updated
topology is sof-hda-efx-generic.tplg. Similar capture enhance is
added to multi-band DRC version sof-hda-efx-mbdrc-generic.tplg.
The pipeline is enabled if HDA_MIC_ENHANCED_CAPTURE is set to true
in topologies build. They keys EFX_HDA_MIC_TDFB_PARAMS and
EFX_HDA_MIC_DRC_PARAMS control the configurations blobs use.
There is no processing applied to capture audio since the topology
is built with passthrough blobs. E.g. UCM should set up processing
with blobs those have effect.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch adds a number of configuration blobs for the
time-domain fixed beamformer component. The blobs include
pass-through and generic narrow angle stereo beamforming for
two and four microphones line array systems.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This change allows to disable and hide the control by omitting name
define if it is not useful in the topology. Also other ALSA controls
no more require mandatory name.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This patch updates similarly as for hda-generic the analog capture.
Before the patch the capture path pipelines are:
dai-copier.HDA.Analog.capture --> host-copier.0.capture
After this change:
dai-copier.HDA.Analog.capture --> eqiir.4.1
--> module-copier.4.2
--> host-copier.0.capture
To use the same dai-copier-eqiir-module-copier-capture tplg code
chunk as in hda-generic, the macros HDA_ANALOG_CAPTURE and
HDA_ANALOG_PLAYBACK_RATE were added.
The addition of IIR to capture mitigates the capture start transients
similarly as in hda-generic.
This change adds 7.7 MCPS from IIR, and 2.2 MCPS from module-copier
in TGL platform.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This change adds volume and switch "Dmic0" into dai-copier pipeline.
It ensures that all capture from DMIC follows the mute key control
even if some other processing and PCMs are added to module copier.
The patch adds a new pipeline class
dai-copier-eqiir-gain-module-copier-capture. It is similar as
replaced dai-copier-eqiir-module-copier-capture but adds the
gain component.
The confusing DMIC0_DAI_GAIN (set to eqiir) is removed from all
top level topologies (nocodec, rt5682, sdw, hda).
After this a typical DMIC0 pipeline looks like:
dai-copier --> eqiir --> gain --> module-copier --> host-copier
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
This change prepares for adding it instead to DMIC DAI copier
pipeline. There it will control mute/unmute for all possible
module copier connected other capture PCMs.
The pipeline object gain-capture is replaced with simpler
host-gateway-capture. The definition of DMIC0_HOST_PIPELINE_SINK
need to be changed from gain to host-copier.
With this patch, the typical DMIC capture path looks like:
dai-copier --> eqiir --> module-copier --> host-copier
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
For some reason we had the EQIIR for topology1/IPC3 but we didn't add
it for topology2/IPC4. All recordings show there's a strong DC offset
with RT722 and other codecs, so let's add this component by default in
the non-passthrough cases.
The widget is added in the scope of a pipeline, so that the
auto-generated instance is not handled at a global level.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
The widget should only be defined in the scope of a pipeline,
otherwise the instance management is global instead of local to the
pipeline.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
The ALH copier only supports 32bits stereo on capture. All the
additional formatls on the host copiers make no sense, and we also
don't need to generate 4ch on the host side.
It looks like the addition of the 1ch support was also problematic
since the link always operates with 2ch.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
These two variables should only be used on the link side. It makes no
sense to use them on the host-facing side of the DAI copier.
FIXME: do we need to use 3 formats for the ALH copiers, in most cases
there's really a need for a 32-bit format only?
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
This device has RT712 on link0 2 PCH-attached DMICs.
Add 2 configurations with 4 DMIC and 2 DMIC. For now no
support for -pdm1.
Link: https://github.com/thesofproject/linux/issues/4923
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
There is no SDW DMIC or PCH DMIC included in the configuration. Thus the
last SDW link ID will be 2 and the HDMI link ID will start with 3.
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Start moving SoundWire topologies from the shadows into main...
We generate a single topology for RT722-based skews since the link
information is not used in the matching with the machine driver
dailinks. The same topology can be used for link0 or link3 setups.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Using S32_LE wastes bandwdith for no good reason, we should use 24
bits on the link to maximize bus efficiency with the 9.6 MHz bus
clock.
There is no need for a kernel-side change, the dailink fixup already
changes the dailink format based on the topology information.
Link: https://github.com/thesofproject/sof/issues/8960
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
removing NUM_HDMIS=0 was not enough, the offsets need to be modified
as well.
While we're at it, make sure all RT711-based RVPs use the same
formatting, ADL had the setting buried in the middle of the chain of
macros.
Closes: https://github.com/thesofproject/linux/issues/5094
Fixes: 75ed6960b8 ("topology2: enable HDMI for all SoundWire production topologies")
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
For some reason we still have NUM_HDMIS=0 in production topologies,
that's a miss. We have no reason to keep those initial developer
settings.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Combinatorics get hard with all the features, but it's really useful
to be able to test features in isolation.
Signed-off-by: Andy Ross <andyross@google.com>
The controls names for IIR, FIR need to be same as in
sof-hda-generic for UCM to find the controls and set up
the components for processing.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
HDA host DMA has limitation on the number of BDL entries which translates
to number of periods, this limit is 256.
The Chrome ALSA compliance test is eagerly try to use as many periods as
it can which exceeds the BDL limit and the stream cannot be started.
Fixes: b3a6d1c570 ("topology2: common: pcm_caps: Increase periods_max from 16 to 1024")
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
The rate_min/rate_max is obsolete, should use rates with
list of rates to support. Without this change the playback
of non-48 kHz content happens with 48 kHz rate with pitch
shift effect. Aplay shows only a warning.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
We need to face with reality that the pause/resume is a feature that is not
well tested (end users are using audio via audio servers and they don't
use pause/resume) causing constant issues with no real life benefit:
With IPC4 multiple pause/resume will make the delay reporting to be
exponentially shoot out, making the reported delay to be unusable.
Looks like suspend/resume with paused stream has been broken for a long
time and just got noticed (since it was not tested).
Add a new token to allow selected PCMs to advertise pause support and
keep it false by default.
The kernel side will allow ignoring the flag to keep the pause advertised
for continued testing while protecting accidental use of it by users.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://github.com/thesofproject/linux/issues/5035
The NHLT binary is not needed in these audio processing development
and test topologies. With the current build options the NHLT would
work only with cAVS2.5 platforms (TGL). Without NHLT add these are
safe to use in all platforms where the NHLT blob is retrieved from
BIOS.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
Add DMA_DOMAIN variable and based on this we set
SCHEDULE_DOMAIN to SCHEDULE_TIME_DOMAIN_DMA, otherwise
is SCHEDULE_TIME_DOMAIN_TIMER.
Now, only i.MX8MP is using SCHEDULE_TIME_DOMAIN_DMA.
Therefore the DMA_DOMAIN is added only for 8MP topologies.
Signed-off-by: Iuliana Prodan <iuliana.prodan@nxp.com>
Signed-off-by: Daniel Baluta <daniel.baluta@nxp.com>
This patch defines e.g. for sof-hda-generic-2ch.tplg DMIC0 only
stereo formats as s16/24/32. Similarly for e.g. sof-hda-generic-4ch.tplg
only four channels formats are defined.
The reduction of input formats options avoids the issue with kernel
that it possibly selects invalid channels count for DMIC0 DAI when
the channels count in connected pipelines varies due to processing
components.
The output formats are reduced similarly since copier always has
the same input and output channels count.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>
The tplg1 blobs are still used with IPC3 testbench test pipelines.
The updated script example_drc.m exports the blob used for DRC
test with name "speaker_default" so, the blob file name to include
to test pipeline is changed. The blob content is same as before.
Signed-off-by: Seppo Ingalsuo <seppo.ingalsuo@linux.intel.com>