Hi
According to Documentation/devicetree/bindings/sound/audio-graph-card.txt it should be something like this: &mcbsp3 { #sound-dai-cells = <0>; pinctrl-names = "default"; pinctrl-0 = <&mcbsp3_pins>; status = "okay";
ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; cpu_dai3: endpoint@0 { dai-format = "dsp_a"; frame-master = <&cpcap_audio_codec1>; bitclock-master = <&cpcap_audio_codec1>; remote-endpoint = <&cpcap_audio_codec1>; }; cpu_dai_mdm: endpoint@1 { dai-format = "dsp_a"; frame-master = <&cpcap_audio_codec1>; bitclock-master = <&cpcap_audio_codec1>; remote-endpoint = <&mot_mdm6600_audio_codec0>; }; };
}; };
(snip)
I guess Morimoto-san can explain if he carries out of tree patches to get the described setup working on top of mainline...
# I think ALSA ML is rejecting mail (?), # I couldn't find original patch / Mail and Discussion at ALSA ML. # Thus, I'm not 100% understanding what is the issue...
I confirmed attached patch on my local platform (= Renesas ULCB + KF board), and it works well for me on at least v5.5 kernel.
--- kernel log -------------- ... [ 2.184193] rcar_sound ec500000.sound: probed ... [ 2.227837] asoc-audio-graph-card sound: ak4613-hifi <-> rsnd-dai.0 mapping ok [ 2.235474] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.2 mapping ok [ 2.243472] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.3 mapping ok [ 2.251463] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.4 mapping ok [ 2.259451] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.5 mapping ok [ 2.267448] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.6 mapping ok [ 2.275439] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.7 mapping ok [ 2.283429] asoc-audio-graph-card sound: snd-soc-dummy-dai <-> rsnd-dai.8 mapping ok [ 2.291460] asoc-audio-graph-card sound: pcm3168a-dac <-> snd-soc-dummy-dai mapping ok [ 2.299460] asoc-audio-graph-card sound: pcm3168a-adc <-> snd-soc-dummy-dai mapping ok ... [ 5.479675] ALSA device list: [ 5.482694] #0: rcar-sound ...
--- local patch -------------------
From 8d25a2ce640ec5be506584ab50e685d0a962aa2d Mon Sep 17 00:00:00 2001 From: Kuninori Morimoto kuninori.morimoto.gx@renesas.com Date: Fri, 14 Dec 2018 09:47:47 +0900 Subject: [PATCH] Local v5.4: ulcb-kf: add TDM Split support
CPU0 ------ ak4613 CPU1 ------ PCM3168A-p /* 1ch/2ch */ CPU2 --/ /* 3ch/4ch */ CPU3 --/ /* 5ch/6ch */ CPU4 --/ /* 7ch/8ch */ CPU5 ------ PCM3168A-c /* 1ch/2ch */ CPU6 --/ /* 3ch/4ch */ CPU7 --/ /* 5ch/6ch */
aplay -D plughw:0,0 xxx.wav // ak4613 aplay -D plughw:0,1 xxx.wav // PCM3168A playback 1ch/2ch aplay -D plughw:0,2 xxx.wav // PCM3168A playback 3ch/4ch aplay -D plughw:0,3 xxx.wav // PCM3168A playback 5ch/6ch aplay -D plughw:0,4 xxx.wav // PCM3168A playback 7ch/8ch arecord -D plughw:0,5 xxx // PCM8168A capture 1ch/2ch arecord -D plughw:0,6 xxx // PCM8168A capture 3ch/4ch arecord -D plughw:0,7 xxx // PCM8168A capture 5ch/6ch
It seems 1 sound card DAI number is limited by SNDRV_MINOR(). Because of this size limit, total 8 DAI seems maximam. So, this patch removes HDMI so far.
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com --- arch/arm64/boot/dts/renesas/ulcb-kf.dtsi | 103 +++++++++++++++++++++-- 1 file changed, 94 insertions(+), 9 deletions(-)
diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi index 202177706cde..5eaf97ea7480 100644 --- a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi +++ b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi @@ -115,18 +115,39 @@ #size-cells = <0>; mclk-fs = <512>; port@0 { + prefix = "pcm3168a"; + convert-channels = <8>; /* TDM Split */ reg = <0>; - pcm3168a_endpoint_p: endpoint { + pcm3168a_endpoint_p: endpoint@0 { remote-endpoint = <&rsnd_for_pcm3168a_play>; clocks = <&clksndsel>; }; + pcm3168a_endpoint_p2: endpoint@1 { + remote-endpoint = <&rsnd_for_pcm3168a_play2>; + }; + pcm3168a_endpoint_p3: endpoint@2 { + remote-endpoint = <&rsnd_for_pcm3168a_play3>; + }; + pcm3168a_endpoint_p4: endpoint@3 { + remote-endpoint = <&rsnd_for_pcm3168a_play4>; + }; }; port@1 { + prefix = "pcm3168a"; + convert-channels = <6>; /* TDM Split */ reg = <1>; - pcm3168a_endpoint_c: endpoint { + pcm3168a_endpoint_c: endpoint@0 { remote-endpoint = <&rsnd_for_pcm3168a_capture>; clocks = <&clksndsel>; }; + pcm3168a_endpoint_c2: endpoint@1 { + remote-endpoint = <&rsnd_for_pcm3168a_capture2>; + clocks = <&clksndsel>; + }; + pcm3168a_endpoint_c3: endpoint@2 { + remote-endpoint = <&rsnd_for_pcm3168a_capture3>; + clocks = <&clksndsel>; + }; }; }; }; @@ -298,29 +319,83 @@ ports { /* rsnd_port0/1 are on salvator-common */ rsnd_port2: port@2 { + #address-cells = <1>; + #size-cells = <0>; reg = <2>; - rsnd_for_pcm3168a_play: endpoint { + rsnd_for_pcm3168a_play: endpoint@2 { + reg = <2>; remote-endpoint = <&pcm3168a_endpoint_p>;
dai-format = "i2s"; bitclock-master = <&rsnd_for_pcm3168a_play>; frame-master = <&rsnd_for_pcm3168a_play>; - dai-tdm-slot-num = <8>;
- playback = <&ssi3>; + playback = <&ssiu30 &ssi3>; + }; + rsnd_for_pcm3168a_play2: endpoint@3 { + reg = <3>; + remote-endpoint = <&pcm3168a_endpoint_p2>; + + dai-format = "i2s"; + bitclock-master = <&rsnd_for_pcm3168a_play2>; + frame-master = <&rsnd_for_pcm3168a_play2>; + + playback = <&ssiu31 &ssi3>; + }; + rsnd_for_pcm3168a_play3: endpoint@4 { + reg = <4>; + remote-endpoint = <&pcm3168a_endpoint_p3>; + + dai-format = "i2s"; + bitclock-master = <&rsnd_for_pcm3168a_play3>; + frame-master = <&rsnd_for_pcm3168a_play3>; + + playback = <&ssiu32 &ssi3>; + }; + rsnd_for_pcm3168a_play4: endpoint@5 { + reg = <5>; + remote-endpoint = <&pcm3168a_endpoint_p4>; + + dai-format = "i2s"; + bitclock-master = <&rsnd_for_pcm3168a_play4>; + frame-master = <&rsnd_for_pcm3168a_play4>; + + playback = <&ssiu33 &ssi3>; }; }; rsnd_port3: port@3 { + #address-cells = <1>; + #size-cells = <0>; reg = <3>; - rsnd_for_pcm3168a_capture: endpoint { + rsnd_for_pcm3168a_capture: endpoint@6 { + reg = <6>; remote-endpoint = <&pcm3168a_endpoint_c>;
dai-format = "i2s"; bitclock-master = <&rsnd_for_pcm3168a_capture>; frame-master = <&rsnd_for_pcm3168a_capture>; - dai-tdm-slot-num = <6>;
- capture = <&ssi4>; + capture = <&ssiu40 &ssi4>; + }; + rsnd_for_pcm3168a_capture2: endpoint@7 { + reg = <7>; + remote-endpoint = <&pcm3168a_endpoint_c2>; + + dai-format = "i2s"; + bitclock-master = <&rsnd_for_pcm3168a_capture2>; + frame-master = <&rsnd_for_pcm3168a_capture2>; + + capture = <&ssiu41 &ssi4>; + }; + rsnd_for_pcm3168a_capture3: endpoint@8 { + reg = <8>; + remote-endpoint = <&pcm3168a_endpoint_c3>; + + dai-format = "i2s"; + bitclock-master = <&rsnd_for_pcm3168a_capture3>; + frame-master = <&rsnd_for_pcm3168a_capture3>; + + capture = <&ssiu42 &ssi4>; }; }; }; @@ -359,8 +434,18 @@ };
&sound_card { + compatible = "audio-graph-scu-card"; + + routing = "pcm3168a Playback", "DAI2 Playback", + "pcm3168a Playback", "DAI3 Playback", + "pcm3168a Playback", "DAI4 Playback", + "pcm3168a Playback", "DAI5 Playback", + "DAI6 Capture", "pcm3168a Capture", + "DAI7 Capture", "pcm3168a Capture", + "DAI8 Capture", "pcm3168a Capture"; + dais = <&rsnd_port0 /* ak4613 */ - &rsnd_port1 /* HDMI0 */ +// &rsnd_port1 /* HDMI0 */ &rsnd_port2 /* pcm3168a playback */ &rsnd_port3 /* pcm3168a capture */ >;