Even though we already have common asoc_dummy_dlc for dummy
Component / DAI, this macro will re-create new dummy dlc.
Some drivers defines many dai_link info via SND_SOC_DAILINK_DEFS(),
this means many dummy dlc also will be re-created. This is waste of
memory.
If we can use existing common asoc_dummy_dlc at (X),
we can avoid to re-creating dummy dlc, then, we can save the memory.
At that time, we want to keep existing code as much as possible, because
too many drivers are using this macro. But because of its original style,
using common asoc_dummy_dlc from it is very difficult or impossible.
So let's change the mind. The macro is used like below
This is very special settings that normal use usually not do,
but new macro do.
We can find this special settings on soc-core.c and fill it as
"dummy DAI" (= asoc_dummy_dlc). By this tric, we can avoid to re-create
dummy dlc and save the memory.
This patch add tric at COMP_DUMMY() and add snd_soc_fill_dummy_dai()
to fill dummy DAI.
Gergo Koteles [Thu, 14 Dec 2023 00:25:39 +0000 (01:25 +0100)]
ASoC: tas2781: add support for FW version 0x0503
Layout of FW version 0x0503 is compatible with 0x0502.
Already supported by TI's tas2781-linux-driver tree.
https://git.ti.com/cgit/tas2781-linux-drivers/tas2781-linux-driver/
Fix few trivial code style issues, pointed out by checkpatch, so they do
not get copied to new code (when old code is used as template):
WARNING: Prefer "GPL" over "GPL v2" - see commit bf7fbeeae6db ("module: Cure the MODULE_LICENSE "GPL" vs. "GPL v2" bogosity")
WARNING: function definition argument 'struct platform_device *' should also have an identifier name
ERROR: code indent should use tabs where possible
WARNING: please, no spaces at the start of a line
WARNING: Missing a blank line after declarations
WARNING: unnecessary whitespace before a quoted newline
Chancel Liu [Mon, 4 Dec 2023 11:15:32 +0000 (19:15 +0800)]
ASoC: soc-pcm.c: Complete the active count for components without DAIs
Some components like platforms don't have DAIs. If the active count of
these components is ignored pinctrl may be wrongly selected between
default and sleep state. So need to increment or decrement the active
count for components without DAIs to avoid it.
Document bindings for the Qualcomm X1E80100 SoC sound card. The
bindings are the same as for other newer Qualcomm ADSP sound cards, thus
keep them in existing qcom,sm8250.yaml file, even though Linux driver is
separate.
Add sound machine driver for the soundcards on Qualcomm X1E80100 SoC,
supporting up to four channel audio playback over Soundwire bus. The
driver is based on existing sc8280xp.c driver.
Rander Wang [Fri, 15 Dec 2023 08:31:01 +0000 (16:31 +0800)]
ASoC: SOF: IPC4: query fw_context_save feature from fw
Driver queries fw_context_save feature when fw is ready and can skip
library reload with this feature since library is saved in persistent
memory. The default value of fw_context_save is true unless fw reports
false.
Signed-off-by: Rander Wang <rander.wang@intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Link: https://msgid.link/r/20231215083102.3064200-3-yung-chuan.liao@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Daniel Baluta [Tue, 28 Nov 2023 08:11:19 +0000 (10:11 +0200)]
ASoC: dt-bindings: audio-graph-port: Document new DAI link flags playback-only/capture-only
Document new playback-only and capture-only flags which can be used
when dai link can only support just one direction: playback or capture
but not both.
Charles Keepax [Tue, 12 Dec 2023 10:41:49 +0000 (10:41 +0000)]
ASoC: cs42l43: Add missing statics for hp_ilimit functions
Fixes: bbbc18d8c27c ("ASoC: cs42l43: Allow HP amp to cool off after current limit") Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://msgid.link/r/20231212104149.2388753-1-ckeepax@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
Charles Keepax [Mon, 11 Dec 2023 16:00:19 +0000 (16:00 +0000)]
ASoC: cs42l43: Allow HP amp to cool off after current limit
Whilst occasional current limiting is fine, constant current limiting
should be avoided. Add a back off system that will disable the
headphone amp, if a lot of current limiting is seen in a short window
of time.
Add support four channel streams. Map channel 3 and 4 to left/right
surround ("quad(side)" from ffmpeg standard channel list) to match what
is in qdsp6/q6dsp-common.c driver.
Move code assigning channel mapping values to a common helper function.
This simplifies three out of four cases, with the last case using
incompatible type (uint16_t array instead of uint8_t array).
Mark Brown [Sat, 9 Dec 2023 00:16:04 +0000 (00:16 +0000)]
GPIO descriptor cleanup for some Wolfson codecs
Merge series from Linus Walleij <linus.walleij@linaro.org>:
This converts the remaining Wolfson ASoC codecs to
use GPIO descriptors.
These Wolfson codecs are mostly used with different
Samsung S3C (especially Cragganmore 6410) board files,
so the in-tree users are fixed up in the process.
Linus Walleij [Fri, 8 Dec 2023 10:09:29 +0000 (11:09 +0100)]
ASoC: wm8996: Convert to GPIO descriptors
This converts the WM8996 codec to use GPIO descriptors, an a similar
way to WM5100.
The driver is instantiating a GPIO chip named wm8996, and we get
rid of the base address for the GPIO chip from the platform data and
just use dynamic numbering. Move base and ngpio into the static
gpio_chip template.
Fix up the only in-tree user which is the Cragganmore 6410 module.
Linus Walleij [Fri, 8 Dec 2023 10:09:28 +0000 (11:09 +0100)]
ASoC: wm5100: Convert to GPIO descriptors
This converts the WM5100 codec to use GPIO descriptors, a pretty
straight-forward conversion with the following peculiarities:
- The driver is instantiating a GPIO chip named wm5100, and the
headphone polarity detection GPIO is lifted from there. We add
this to the GPIO descriptor table as well, and we can then get
rid of also the base address for the GPIO chip from the
platform data and just use dynamic numbering.
- Fix up the only in-tree user which is the Cragganmore 6410
module.
Linus Walleij [Fri, 8 Dec 2023 10:09:27 +0000 (11:09 +0100)]
ASoC: wm2200: Convert to GPIO descriptors
This converts the WM2200 codec to use GPIO descriptors.
This is a pretty straight-forward conversion, and it also
switches over the single in-tree user in the S3C
Cragganmore module for S3C 6410.
This coded does not seem to get selected or be selectable
through Kconfig, I had to hack another soundcard Kconfig
entry to select it for compile tests.
Linus Walleij [Fri, 8 Dec 2023 10:09:26 +0000 (11:09 +0100)]
ASoC: wm1250-ev1: Convert to GPIO descriptors
This converts the WM1250-EV1 codec to use GPIO descriptors.
It turns out that the platform data was only used to pass some
global GPIO numbers from a board file, so we get rid of this
and also switch over the single in-tree user in the S3C
Cragganmore module for S3C 6410.
The driver obtains two GPIO lines named OSR and master and just
pull them low, we leave this behaviour as it was.
Linus Walleij [Fri, 8 Dec 2023 10:09:25 +0000 (11:09 +0100)]
ASoC: wm0010: Convert to GPIO descriptors
This converts the WM0010 codec to use GPIO descriptors.
It's a pretty straight-forward conversion also switching over
the single in-tree user in the S3C Cragganmore module
for S3C 6410.
Dan Carpenter [Mon, 4 Dec 2023 12:42:07 +0000 (15:42 +0300)]
ASoC: audio-graph-card2: fix off by one in graph_parse_node_multi_nm()
The > comparison should be >= to avoid writing one element beyond the end
of the dai_link->ch_maps[] array. The dai_link->ch_maps[] array is
allocated in graph_parse_node_multi() and it has "nm_max" elements.
Fixes: e2de6808df4a ("ASoC: audio-graph-card2: add CPU:Codec = N:M support") Signed-off-by: Dan Carpenter <dan.carpenter@linaro.org> Acked-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://lore.kernel.org/r/1032216f-902f-48f9-aa49-9d5ece8e87f2@moroto.mountain Signed-off-by: Mark Brown <broonie@kernel.org>
Modify acp config flag read logic from ACP v7.0 onwards.
Instead of reading from DMI table match entry, read the
config flag value from BIOS ACPI table.
This will remove updating DMI table when new platform support
is added.
Use FLAG_AMD_LEGACY_ONLY_DMIC flag as default one.
Peter Ujfalusi [Thu, 7 Dec 2023 09:54:25 +0000 (11:54 +0200)]
ASoC: SOF: Intel: hda-codec: Delay the codec device registration
The current code flow is:
1. snd_hdac_device_register()
2. set parameters needed by the hdac driver
3. request_codec_module()
the hdac driver is probed at this point
During boot the codec drivers are not loaded when the hdac device is
registered, it is going to be probed later when loading the codec module,
which point the parameters are set.
On module remove/insert
rmmod snd_sof_pci_intel_tgl
modprobe snd_sof_pci_intel_tgl
The codec module remains loaded and the driver will be probed when the
hdac device is created right away, before the parameters for the driver
has been configured:
1. snd_hdac_device_register()
the hdac driver is probed at this point
2. set parameters needed by the hdac driver
3. request_codec_module()
will be a NOP as the module is already loaded
Move the snd_hdac_device_register() later, to be done right before
requesting the codec module to make sure that the parameters are all set
before the device is created:
1. set parameters needed by the hdac driver
2. snd_hdac_device_register()
3. request_codec_module()
This way at the hdac driver probe all parameters will be set in all cases.
Fabio Estevam [Wed, 6 Dec 2023 11:30:47 +0000 (08:30 -0300)]
ASoC: dt-bindings: fsl,xcvr: Adjust the number of interrupts
Unlike i.MX8MP, i.MX93 has two XCVR interrupts.
Describe the two interrupts for the i.MX93 to fix the following
dt-schema warning:
imx93-11x11-evk.dtb: xcvr@42680000: interrupts: [[0, 203, 4], [0, 204, 4]] is too long
from schema $id: http://devicetree.org/schemas/sound/fsl,xcvr.yaml#
ASoC: Intel: sof_sdw_cs_amp: Connect outputs to a speaker widget
Hookup the CS35L56 DAPM_OUTPUT widgets to a DAPM_SPK widget so
that there is a complete logical path to a speaker.
There is no particular reason to use multiple speaker widgets.
The CS35L56 are designed to work together as a set so they have
all been connected to a single speaker widget.
Instead of a hardcoded list of codec widget names, the code walks
through all the codecs on the dailink and for every cs35l56 it uses
its name prefix to construct the source end of the route. This adds
a small amount of overhead during probe but has the benefit that it
isn't dependent on every system using the same prefixes.
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com> Acked-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Reviewed-by: Charles Keepax <ckeepax@opensource.cirrus.com> Link: https://lore.kernel.org/r/20231205135001.2506070-1-rf@opensource.cirrus.com Signed-off-by: Mark Brown <broonie@kernel.org>
Curtis Malainey [Mon, 4 Dec 2023 21:47:13 +0000 (15:47 -0600)]
ASoC: SOF: Wire up buffer flags
Buffer flags have been in firmware for ages but were never fully
implemented in the topology/kernel system. This commit finishes off the
implementation.
Bard Liao [Mon, 4 Dec 2023 21:47:10 +0000 (15:47 -0600)]
ASoC: SOF: topology: Use partial match for disconnecting DAI link and DAI widget
We use partial match for connecting DAI link and DAI widget. We need to
use partial match for disconnecting, too.
Fixes: fe88788779fc ("ASoC: SOF: topology: Use partial match for connecting DAI link and DAI widget") Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231204214713.208951-2-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Bard Liao [Mon, 4 Dec 2023 21:42:00 +0000 (15:42 -0600)]
ASoC: Intel: sof_sdw_rt_sdca_jack_common: check ctx->headset_codec_dev instead of playback
'if (!playback)' will not work if the dai is only on capture dai link
or is on more than one playback dai links. Check 'if
(ctx->headset_codec_dev)' instead.
sof_sdw_rt_sdca_jack_exit() are used by different codecs, and some of
them use the same dai name.
For example, rt712 and rt713 both use "rt712-sdca-aif1" and
sof_sdw_rt_sdca_jack_exit().
As a result, sof_sdw_rt_sdca_jack_exit() will be called twice by
mc_dailink_exit_loop(). Set ctx->headset_codec_dev = NULL; after
put_device(ctx->headset_codec_dev); to avoid ctx->headset_codec_dev
being put twice.
Fixes: 5360c6704638 ("ASoC: Intel: sof_sdw: add rt712 support") Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231204214200.203100-5-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Brent Lu [Mon, 4 Dec 2023 21:41:58 +0000 (15:41 -0600)]
ASoC: Intel: glk_rt5682_max98357a: fix board id mismatch
The drv_name in enumeration table for ALC5682I-VS codec does not match
the board id string in machine driver. Modify the entry of "10EC5682"
to enumerate "RTL5682" as well and remove invalid entry.
Fixes: 88b4d77d6035 ("ASoC: Intel: glk_rt5682_max98357a: support ALC5682I-VS codec") Reported-by: Curtis Malainey <cujomalainey@chromium.org> Reviewed-by: Curtis Malainey <cujomalainey@chromium.org> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Brent Lu <brent.lu@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231204214200.203100-4-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Brent Lu [Mon, 4 Dec 2023 21:41:57 +0000 (15:41 -0600)]
ASoC: Intel: sof_nau8825: board id cleanup for rpl boards
Many board configs are duplicated since codec and amplifier type are
removed from board quirk. Introduce "rpl_nau8825_def" board to reduce
the number of rpl board configs.
Brent Lu [Mon, 4 Dec 2023 21:41:56 +0000 (15:41 -0600)]
ASoC: Intel: sof_nau8825: board id cleanup for adl boards
Many board configs are duplicated since codec and amplifier type are
removed from board quirk. Introduce "adl_nau8825_def" board to reduce
the number of adl board configs.
Mark Brown [Mon, 4 Dec 2023 19:31:56 +0000 (19:31 +0000)]
ASoC: Intel: bytcht_es8316: Determine
Merge series from Hans de Goede <hdegoede@redhat.com>:
This takes some of the work done to auto-configure quirks/routing
for ESS83xx codecs by getting the info from ACPI from:
https://github.com/thesofproject/linux/pull/4112
And then builds on top of this to add auto-configuration to
the bytcht_es8316 board driver.
Note compared to the pull-request, which deals with the ES8336, this
series deals with the ES8316 (for which I have several devices to test
on) and this moves handling of the _DSM from the codec driver to
the board driver since with the ES8316 the board driver takes
care of setting up various routes for things like the mic and
speakers.
After this series audio now works properly on a CHT Chuwi Hi12
tablet without needing to add an extra quirk for that model.
This has also been tested on the following devices, where things
are unchanged from before (the ACPI autoconfiguration gives the
same results as the old defaults) :
Onda V80 plus (CHT)
GP-electronic T701 (BYT)
I also tested this on a Nanote UMPC-01, here the _DSM result
for PLATFORM_SPK_TYPE_ARG wrongly returns 1 (mono) while
the device actually has 2 speakers, so this model needs to keep
its DMI quirk.
I don't have an IRBIS NB41 nor a TECLAST X98 Plus II,
so the DMI quirks for those are left in place too on
a better safe then sorry basis.
Hans de Goede [Sat, 2 Dec 2023 12:39:46 +0000 (13:39 +0100)]
ASoC: Intel: bytcht_es8316: Determine quirks/routing with codec-dev ACPI DSM
Add support for querying the same ACPI Device-Specific-Method (DSM) as
Windows uses to determine things like speaker and mic routing.
This avoids the need to add DMI quirks for each new ESS8316 tablet model.
This has been tested on the following devices:
1. Chuwi Hi12 CHT with stereo speakers and IN2-mic-map,
this avoids the need to add a DMI quirk for this model.
2. Nanote UMPC-01 CHT with stereo speakers and IN1-mic-map,
the existing DMI quirk is still necessary because of a bug
in the DSM return values for the speakers (it returns mono).
3. Onda V80 plus CHT with mono speaker and IN1-mic-map,
DSM set quirks match the previously used defaults.
4. GP-electronic T701 BYT with mono speaker and IN2-mic-map,
DSM set quirks match the previously used defaults.
ASoC: Intel: bytcht_es8316: Dump basic _DSM information
Instead of adding DMI quirks for each new tablet model which uses
the ESS8316 codec, the plan is to switch to querying the same ACPI
Device-Specific-Method (DSM) as Windows uses to determine things
like speaker and mic routing.
Call the new es83xx_dsm_dump() helper which logs various basic settings
which can be queried through the ACPI DSM method on the codec ACPI device,
this is intended to help with developing a DSM based solution to replace
most DMI quirks.
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
[hdegoede@redhat.com: improve commit message] Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231202123946.54347-3-hdegoede@redhat.com Signed-off-by: Mark Brown <broonie@kernel.org>
Most of the ES83xx codec configuration is exposed in the DSDT table
and accessible via a _DSM method. Start adding basic definitions and
helpers to dump the information.
Reviewed-by: Mauro Carvalho Chehab <mchehab@kernel.org> Co-developed-by: David Yang <yangxiaohua@everest-semi.com> Signed-off-by: David Yang <yangxiaohua@everest-semi.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231202123946.54347-2-hdegoede@redhat.com Signed-off-by: Mark Brown <broonie@kernel.org>
Chen-Yu Tsai [Mon, 4 Dec 2023 03:35:47 +0000 (11:35 +0800)]
ASoC: SOF: Move sof_of_machine_select() to core.c from sof-of-dev.c
Commit 014fdeb0d747 ("ASoC: SOF: Move sof_of_machine_select() to
sof-of-dev.c from sof-audio.c") caused a circular dependency between
the snd_sof and snd_sof_of modules:
depmod: ERROR: Cycle detected: snd_sof -> snd_sof_of -> snd_sof
depmod: ERROR: Found 2 modules in dependency cycles!
Move the function back with sof_machine_select().
Fixes: 014fdeb0d747 ("ASoC: SOF: Move sof_of_machine_select() to sof-of-dev.c from sof-audio.c") Signed-off-by: Chen-Yu Tsai <wenst@chromium.org> Acked-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Daniel Baluta <daniel.baluta@nxp.com> Link: https://lore.kernel.org/r/20231204033549.2020289-1-wenst@chromium.org Signed-off-by: Mark Brown <broonie@kernel.org>
Mark Brown [Fri, 1 Dec 2023 22:16:41 +0000 (22:16 +0000)]
ASoC: Convert Cirrus codecs to GPIO descriptors
Merge series from Linus Walleij <linus.walleij@linaro.org>:
This series walks over the Cirrus Logic ASoC drivers and
clean out the use of legacy GPIO numbers and legacy
GPIO APIs.
The CS4271 affects an ASoC driver for EP93xx which Nikita is
actively working on moving over to device tree, so I don't
know about that patch specifically, but I think the collision
would be max "the file was deleted".
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
Changes in v2:
- Add explicit <linux/irq.h> include in the cs35l36 driver, apparently
the driver useeed this implicitly through the <linux/gpio.h> include.
- Fix commit messages "gpios" -> "reset" on two patches.
- Test builds OK
- Link to v1: https://lore.kernel.org/r/20231129-descriptors-sound-cirrus-v1-0-31aa74425ff8@linaro.org
---
Linus Walleij (10):
ASoC: cs35l32: Drop legacy include
ASoC: cs35l33: Fix GPIO name and drop legacy include
ASoC: cs35l34: Fix GPIO name and drop legacy include
ASoC: cs35l35: Drop legacy includes
ASoC: cs35l36: Drop legacy includes
ASoC: cs4271: Convert to GPIO descriptors
ASoC: cirrus: edb93xx: Drop legacy include
ASoC: cs42l42: Drop legacy include
ASoC: cs43130: Drop legacy includes
ASoC: cs4349: Drop legacy include
ASoC: qcom: sc8280xp: set card driver name from match data
Sound machine drivers for all newer Qualcomm SoC platforms are the
exactly same, therefore it makes sense to use same machine driver for
newer platforms as well. Choice of sound topology and user-space Alsa
UCM files depends however on card driver name, which must be customized
per each board. Allow such customization by using driver match data as
sound card driver name.
Linus Walleij [Fri, 1 Dec 2023 13:20:32 +0000 (14:20 +0100)]
ASoC: cs35l34: Fix GPIO name and drop legacy include
This driver includes the legacy GPIO APIs <linux/gpio.h> and
<linux/of_gpio.h> but does not use any symbols from any of
them.
Drop the includes.
Further the driver is requesting "reset-gpios" rather than
just "reset" from the GPIO framework. This is wrong because
the gpiolib core will add "-gpios" before processing the
request from e.g. device tree. Drop the suffix.
The last problem means that the optional RESET GPIO has
never been properly retrieved and used even if it existed,
but nobody noticed.
Linus Walleij [Fri, 1 Dec 2023 13:20:31 +0000 (14:20 +0100)]
ASoC: cs35l33: Fix GPIO name and drop legacy include
This driver includes the legacy GPIO APIs <linux/gpio.h> and
<linux/of_gpio.h> but does not use any symbols from any of
them.
Drop the includes.
Further the driver is requesting "reset-gpios" rather than
just "reset" from the GPIO framework. This is wrong because
the gpiolib core will add "-gpios" before processing the
request from e.g. device tree. Drop the suffix.
The last problem means that the optional RESET GPIO has
never been properly retrieved and used even if it existed,
but nobody noticed.
Mark Brown [Thu, 30 Nov 2023 11:23:17 +0000 (11:23 +0000)]
ASoC: SOF: IPC path handling and fallback support
Merge series from Peter Ujfalusi <peter.ujfalusi@linux.intel.com>:
The main aim of the series is to provide a mechanism to fallback to 'older' IPC
versions in case the desired one is missing either a firmware or topology file.
It is going to make the life of users and distributions if we are going to
start transition existing IPC3 platforms to IPC4 (CAVS2.5) and we might have
missed some topology file to convert for example.
In that case the kernel will fallback to IPC3 without audio regression.
To be able to support this we needed to change the probe sequence to know the
topology filename earlier and check if it is present in the filesystem.
No functional changes for now, the default IPC versions have not been changed.
ASoC: qcom: Move Soundwire runtime stream alloc to soundcards
Currently the Qualcomm Soundwire controller in its DAI startup op
allocates the Soundwire stream runtime. This works fine for existing
designs, but has limitations for stream runtimes with multiple
controllers, like upcoming Qualcomm X1E80100 SoC with four WSA8840
speakers on two Soundwire controllers.
When two Soundwire controllers are added to sound card codecs, Soundwire
startup() is called twice, one for each Soundwire controller, and second
execution overwrites what was set before. During shutdown() this causes
double free.
It is expected to have only one Soundwire stream runtime, thus it should
be allocated from SoC soundcard context startup(), not from each
Soundwire startup(). Such way will properly handle both cases: one and
two Soundwire controllers in the stream runtime.
ASoC: qcom: Add helper for allocating Soundwire stream runtime
Newer Qualcomm SoC soundcards will need to allocate Soundwire stream
runtime in their startup op. The code will be exactly the same for all
soundcards, so add a helper for that.
Arnd Bergmann [Wed, 29 Nov 2023 11:31:17 +0000 (12:31 +0100)]
ASoC: fsl_rpmsg: update Kconfig dependencies
SND_SOC_IMX_RPMSG gained a new dependency and gets selected by SND_SOC_FSL_RPMSG,
which as a result needs to have the same dependency, or produce a build failure
based on that:
WARNING: unmet direct dependencies detected for SND_SOC_IMX_RPMSG
Depends on [n]: SOUND [=y] && SND [=y] && SND_SOC [=y] && SND_IMX_SOC [=y] && RPMSG [=y] && OF [=y] && I2C [=n]
Selected by [y]:
- SND_SOC_FSL_RPMSG [=y] && SOUND [=y] && SND [=y] && SND_SOC [=y] && COMMON_CLK [=y] && RPMSG [=y] && (SND_IMX_SOC [=y] || SND_IMX_SOC [=y]=n) && SND_IMX_SOC [=y]!=n
x86_64-linux-ld: sound/soc/fsl/imx-rpmsg.o: in function `imx_rpmsg_late_probe':
imx-rpmsg.c:(.text+0x11e): undefined reference to `i2c_find_device_by_fwnode'
Baofeng Tian [Wed, 29 Nov 2023 12:22:34 +0000 (14:22 +0200)]
ASoC: SOF: ipc4-topology: Add module ID print during module set up
This module ID will be used for module performance automatic analysis
for different modules, module name, module ID and module instance ID
will be combined as a new generated ID for current module, this ID
will be further used by analysis tools to identify current module.
Take below case as example:
0x030006 gain.11.1
3 is module instance ID, 6 is module ID and gain.11.1 is module name.
For pipeline widget print, keep as it is.
Signed-off-by: Baofeng Tian <baofeng.tian@intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Ranjani Sridharan <ranjani.sridharan@linux.intel.com> Reviewed-by: Péter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Chao Song <chao.song@linux.intel.com> Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Link: https://lore.kernel.org/r/20231129122234.14515-1-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
With the added exception handling support if the firmware fails to boot
up we are trying to do a panic dump from the telemetry slot. The slot
offsets would have been configured only after receiving the FW_READY
message which makes this panic dump unusable for early boot failures.
With IPC4 the DSP window offsets are at standard places unlike IPC3 where
the offsets needs to be queried from the FW_READY message.
Move the offset configuration to sof_ipc4_init from the fw_ready handler.
Signed-off-by: Peter Ujfalusi <peter.ujfalusi@linux.intel.com> Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20231129122805.10635-1-peter.ujfalusi@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
Peter Ujfalusi [Wed, 29 Nov 2023 12:53:27 +0000 (14:53 +0200)]
ASoC: SOF: core: Implement IPC version fallback if firmware files are missing
If a firmware file is missing for the selected IPC type then try to switch
to other supported IPC type and check if that one can be used instead.
If for example a platform is changed to IPC4 as default version but the
given machine does not yet have the needed topology file created then we
will fall back to IPC3 which should have all the needed files.
Relocate the sof_init_environment() to be done at a later phase, in
sof_probe_continue().
This will only have changes in behavior if
CONFIG_SND_SOC_SOF_PROBE_WORK_QUEUE is enabled (Intel HDA platforms) by
not failing the module probe, but it is not going to be different case
compared to for example failed firmware booting or topology loading error.