All of lore.kernel.org
 help / color / mirror / Atom feed
From: "arnaud.mouiche@invoxia.com" <arnaud.mouiche@invoxia.com>
To: alsa-devel@alsa-project.org
Subject: Re: Multiple codecs on one sound card for multi-channel sound card
Date: Wed, 16 Sep 2015 11:57:10 +0200	[thread overview]
Message-ID: <55F93CF6.50208@invoxia.com> (raw)
In-Reply-To: <CAG5mAdzyQgOmTcAmHrjWRQzuv-ih9p-qXQsYxdTD_Qmr-Fep3A@mail.gmail.com>

Hello Caleb,

Multi-codec support is now working fine the current linux releases.
for previous releases, check if commit
     [PATCH] ASoC: dapm: Don't add prefix to widget stream name
is included. I remember this is the last required patch.

After that, I don't know if the "simple-card" can be configured for 
multi codec support as you wish.

On my side, I cooked a particular sound card for the purpose.
here is some tips:


     struct snd_soc_dai_link_component codecs[2];
     struct snd_soc_codec_conf codecs_conf[2];
[...]
     for (num_codecs=0; num_codecs<2; num_codecs++) {
         struct device_node *of_node;
         of_node = of_parse_phandle(pdev->dev.of_node, "audio-codec", 
num_codecs);
         if (!of_node) break;
         data->codecs[num_codecs].of_node = of_node;
         data->codecs[num_codecs].dai_name = "tlv320aic3x-foo";

         /* add a "C2" name prefix for every control of the 2nd codec */
         data->codecs_conf[num_codecs].of_node = of_node;
         if (num_codecs == 1) {
             data->codecs_conf[num_codecs].name_prefix = "C2";
         }
     }
[...]
     data->dai.codecs = data->codecs;
     data->dai.num_codecs = num_codecs;
     data->card.dai_link = &data->dai;
     data->card.codec_conf = data->codecs_conf;
     data->card.num_configs = num_codecs;
[...]


On DTS side, I have something like

     sound@0 {
         compatible = "fsl,imx-audio-foo";
         model = "foo-audio";
         ssi-controller = <&ssi1>;

         /*
          * list phandles for the 2 codecs used in the same TDM network
          */
         audio-codec = <&codec1>, <&codec2>;

         [...]

     };


You also need to have a particular hw_params() method to dispatch the 
TDM and sysclk configuration to your codecs, making the difference 
between your first codec (your bus master) and the others.


Arnaud

Le 15/09/2015 03:07, Caleb Crome a écrit :
> (re-sending hope it's not a duplicate -- I think I must have had HTML
> in my previous email and it was ignored)
>
>   Hi all,
>      What are the current best practices to specify multiple codecs on
> one sound card, with all codecs sharing a single TDM bus?
>
>   I have a card with up to 32 TLV320AIC33 codecs on it.  For the
> moment, we can limit the discussion to only 16 codecs, so we don't
> have to get extra serializers involved...
>
>   I currently have something like this in my am335x-boneblack.dts file:
>
>   (i.e. attempting to set tdm slot width and num in the i2c codec)
>
>   but it doesn't seem to be picking up the fact that I want all the
> codecs linked together as one.
>
>   (FYI, the first codec, i.e. tlv32aic3x_a should be the master, and
> all others including the CPU will be slaves).
>
>   Thanks for any help!
>
>   BTW, I'm happy to use whatever kernel will support me with the
> minimal amount of effort, currently using 4.1
>
>
>
> Thank you!
>     -Caleb
>
> &i2c1 {
>   ...
> tlv320aic3x_a: tlv320aic3x@18 {
> #sound-dai-cells = <1>;
> compatible = "ti,tlv320aic3x";
> reg = <0x18>;
> tdm-offset = <0>;
> status = "okay";
> };
> tlv320aic3x_b: tlv320aic3x@19 {
> #sound-dai-cells = <1>;
> compatible = "ti,tlv320aic3x";
> reg = <0x19>;
> tdm-offset = <32>;
> status = "okay";
> };
> tlv320aic3x_c: tlv320aic3x@1a {
> #sound-dai-cells = <1>;
> compatible = "ti,tlv320aic3x";
> reg = <0x1a>;
> tdm-offset = <64>;
> status = "okay";
> };
> tlv320aic3x_d: tlv320aic3x@1b {
> #sound-dai-cells = <1>;
> compatible = "ti,tlv320aic3x";
> reg = <0x1b>;
> tdm-offset = <96>;
> status = "okay";
> };
> };
>
> &mcasp0 {
> #sound-dai-cells = <0>;
> pinctrl-names = "default";
> pinctrl-0 = <&mcasp_0_pins_default>;
> status = "okay";
>
> op-mode = <0>;          /* MCASP_IIS_MODE */
> tdm-slots = <16>;
> num-serializer = <16>;
> serial-dir = <  /* 0: INACTIVE, 1: TX, 2: RX */
> 0 0 1 2
> 0 0 0 0
> 0 0 0 0
> 0 0 0 0
>> ;
> tx-num-evt = <1>;
> rx-num-evt = <1>;
> };
>
> / {
> sound {
> compatible = "simple-audio-card";
> simple-audio-card,name = "puppy-audio";
> simple-audio-card,mclk-fs = <256>;
> system-clock-frequency = <12288000>;
> status = "okay";
> simple-audio-card,bitclock-master = <&tlv320aic3x_a>;
>        simple-audio-card,frame-master    = <&tlv320aic3x_a>;
> simple-audio-card,widgets =
> "Line", "Line Out",
> "Line", "Line In";
> simple-audio-card,routing =
> "Line Out",       "HPLOUT",
> "Line Out",       "HPROUT",
> "Line In",        "LINE1L",
> "Line In",        "LINE1R";
>
> simple-audio-card,dai-link@0 {
> format = "left_j";
> cpu {
> sound-dai = <&mcasp0>;
> };
> codec {
> sound-dai = <&tlv320aic3x_a 0>;
> dai-tdm-slot-num = <0>;
> dai-tdm-slot-width = <16>;
> };
> };
> /**** The stuff below doesn't work -- I can't figure out how to get
> the name_prefixes set
>   on each codec... .How do I set up so that each codec gets its own name prfix
> and so that the soc core thinks all codecs are on the same DAI?
> **** */
>
> // simple-audio-card,dai-link@1 {
> // format = "left_j";
> // cpu {
> // sound-dai = <&mcasp0>;
> // };
> // codec {
> // sound-dai = <&tlv320aic3x_b 0>;
> // dai-tdm-slot-num = <2>;
> // dai-tdm-slot-width = <16>;
> // };
> // };
> // simple-audio-card,dai-link@2 {
> // format = "left_j";
> // cpu {
> // sound-dai = <&mcasp0>;
> // };
> // codec {
> // sound-dai = <&tlv320aic3x_c>;
> // dai-tdm-slot-num = <4>;
> // dai-tdm-slot-width = <16>;
> // };
> // };
> // simple-audio-card,dai-link@3 {
> // format = "left_j";
> // cpu {
> // sound-dai = <&mcasp0>;
> // };
> // codec {
> // sound-dai = <&tlv320aic3x_d>;
> // dai-tdm-slot-num = <6>;
> // dai-tdm-slot-width = <16>;
> // };
> // };
> };
> };
> _______________________________________________
> Alsa-devel mailing list
> Alsa-devel@alsa-project.org
> http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

  reply	other threads:[~2015-09-16  9:57 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-09-09  1:02 Multiple codecs on one sound card for multi-channel sound card Caleb Crome
2015-09-10 18:26 ` Caleb Crome
2015-09-15  1:07 ` Caleb Crome
2015-09-16  9:57   ` arnaud.mouiche [this message]
2015-09-16 22:07     ` Caleb Crome
2015-09-17  8:51       ` arnaud.mouiche
2015-09-17 13:38         ` Caleb Crome
2015-09-17 14:33           ` arnaud.mouiche
2015-09-17 15:34             ` Caleb Crome
2015-09-17 16:09               ` arnaud.mouiche
2015-09-17 17:39                 ` Caleb Crome
2019-02-12 10:55 Yann CARDAILLAC
2019-02-18  8:32 ` Arnaud Mouiche

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=55F93CF6.50208@invoxia.com \
    --to=arnaud.mouiche@invoxia.com \
    --cc=alsa-devel@alsa-project.org \
    /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.