From: Cezary Rojewski <cezary.rojewski@intel.com>
To: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Cc: Linux-ALSA <alsa-devel@alsa-project.org>,
"Mark Brown" <broonie@kernel.org>,
"Pierre-Louis Bossart" <pierre-louis.bossart@linux.intel.com>,
"Amadeusz Sławiński" <amadeuszx.slawinski@linux.intel.com>
Subject: Re: About Cleanup ASoC
Date: Tue, 7 Jun 2022 09:46:12 +0200 [thread overview]
Message-ID: <554ad23c-1113-cd91-235c-268a198b12c2@intel.com> (raw)
In-Reply-To: <87pmjq4o0o.wl-kuninori.morimoto.gx@renesas.com>
On 2022-06-03 1:57 AM, Kuninori Morimoto wrote:
> Thanks.
> "my Sound" mean "my sound driver".
> The Device image is like this
>
> +-- DeviceA --+
> |+-----------+|
> ||Component ||
> || [DAI]
> || [DAI]
> ...
> || [DAI]
> || [DAI]
> |+-----------+|
> +-------------+
>
> It calls devm_snd_soc_register_component() here.
> Number of DAIs = rsnd_rdai_nr(priv) is based on the SoC (= DT settings),
> but these are same DAI.
> <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/soc/sh/rcar/core.c?h=v5.18#n1923>
>
> The DAIs are setuped here.
> <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/soc/sh/rcar/core.c?h=v5.18#n1350>
>
> Component driver is here
> <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/soc/sh/rcar/core.c?h=v5.18#n1810>
>
> DAI ops is here
> <https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/sound/soc/sh/rcar/core.c?h=v5.18#n1067>
Hello Kuninori,
Thank you for the links - helped me speed up the learning process.
So, together with Amadeo we spent some time analyzing your audio stack.
The equivalent of avs's pci_driver (sound/soc/intel/avs/core.c) seems to
be rcar_sound platform_driver defined in sound/soc/sh/rcar/core.c.
There is no firmware or topology involved. Instead, we have hardware
components, each representing some processing function e.g.: sample rate
conversion. There is also a component which does not represent any of
such functions - represents ASoC side of things instead. It's called
*DAI*. And that's the component we were looking at mostly.
I believe each *DAI* exposes up to four FEs depending on the board, and
during PCM operations, every FE enlists one or more hw components
(rsnd_mod instances) to do the actual job.
Earlier in the thread you specified the following example as being
problematic:
+-- basic board --------+
|+--------+ |
|| CPU ch0| <--> CodecA |
|| ch1| <-+ |
|+--------+ | |
+-------------|---------+
+-- expansion board ----+
| | |
| +-> CodecB|
+-----------------------+
with suggestion to solve it with 1xComponent:NxCard relation which is
not supported by ASoC. However, we believe ASoC already presents
solutions to such problem, either through 1) compound card or less
commonly, by 2) splitting one big CPU-Card pair into several smaller pairs.
Relation that ASoC does support is NxComponent:1xCard. As both CPU and
Codec are components, this roughly translates to: NxCPU:1xCard:NxCodec.
Your case is an example of 1xCPU:1xCard:2xCodec. Such
1xCPU:1xCard:NxCodec combinations are arguably the most common ones and
developers majority of time are picking option 1). Less hassle. See
sound/soc/intel/boards for examples.
As I believe the expansion board has some identifier, we will be able to
fetch whether we are dealing with basic board or basic+expansion board.
Or at least the board name should differ between the two devices. If so,
two machine board drivers are needed - one servicing just the basic
board (basic sound card) and the other for combo board (combo sound card).
Another option is registration of many components allowing developer to
represent each logical block with a single component. This comes down to
invoking snd_soc_register_component() multiple times.
This is especially useful if one or more of your four FEs available on
the R-Car board has nothing to do with CodecA. Let's say FEs 1,2,3 are
actually routed through CodecA whereas FE 4 through CodecB. It is
logical to split the CPU functionality so that FE 4 is being serviced by
the CPU component that is responsible for just that one part. This can
be modified further if we want to expose entire set of FEs for both
CodecA and CodecB. In such case the essence of PCM operations should be
moved to some common code so that functions exposed via dai->ops become
wrappers - eliminates code duplication. Then just create two instances
of your CPU component, assign dai_driver(s) and register them both.
Currently, you're calling snd_soc_register_component() just once in your
driver so option 2) is not possible without altering
rsnd_dai_probe()/rsnd_probe().
Perhaps there is something I'm missing but considering that ASoC does
have solutions to the raised problem, I do not see why either 1) or 2)
cannot be made use of to deal with the problem. I and Amadeo can
definitely help with 2) should you select it :)
Regards,
Czarek
next prev parent reply other threads:[~2022-06-07 7:47 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-05-24 4:40 About Cleanup ASoC Kuninori Morimoto
2022-05-24 11:17 ` Amadeusz Sławiński
2022-05-24 14:53 ` Cezary Rojewski
2022-05-25 2:54 ` Kuninori Morimoto
2022-05-25 16:11 ` Pierre-Louis Bossart
2022-05-26 2:13 ` Kuninori Morimoto
2022-05-26 9:57 ` Amadeusz Sławiński
2022-05-26 13:48 ` Pierre-Louis Bossart
2022-05-26 13:58 ` Mark Brown
2022-05-26 14:17 ` Cezary Rojewski
2022-05-26 14:45 ` Pierre-Louis Bossart
2022-05-27 6:50 ` Kuninori Morimoto
2022-05-31 12:25 ` Mark Brown
2022-06-01 6:13 ` Kuninori Morimoto
2022-06-02 9:26 ` Cezary Rojewski
2022-06-02 23:57 ` Kuninori Morimoto
2022-06-07 7:46 ` Cezary Rojewski [this message]
2022-06-09 0:07 ` Kuninori Morimoto
2022-05-27 8:38 ` Cezary Rojewski
2022-05-31 14:37 ` Pierre-Louis Bossart
2022-05-24 13:24 ` Mark Brown
2022-05-24 15:06 ` Cezary Rojewski
2022-05-24 16:11 ` Pierre-Louis Bossart
2022-05-25 3:02 ` Kuninori Morimoto
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=554ad23c-1113-cd91-235c-268a198b12c2@intel.com \
--to=cezary.rojewski@intel.com \
--cc=alsa-devel@alsa-project.org \
--cc=amadeuszx.slawinski@linux.intel.com \
--cc=broonie@kernel.org \
--cc=kuninori.morimoto.gx@renesas.com \
--cc=pierre-louis.bossart@linux.intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.