Commit d70be079 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Geert Uytterhoeven

arm64: dts: renesas: ulcb/kf: Use multi Component sound

	+-- ULCB -------------------+
	|+--------+       +--------+|
	||    SSI0| <---> |ak4613  ||
	||    SSI1| <---> |        ||
	||        |       +--------+|
	||        |       +--------+|
	||    SSI2| <---> |HDMI    ||
	||        |       +--------+|
	||    SSI3| <--+            |
	||    SSI4| <-+|            |
	|+--------+   ||            |
	+-------------||------------+
	+-- Kingfisher -------------+
	|             ||  +--------+|
	|             |+->|pcm3168a||
	|             +-->|        ||
	|                 +--------+|
	+---------------------------+

On UCLB/KF, we intuitively think we want to handle these as "2 Sound
Cards":

	card0,0: 1st sound of ULCB (SSI0 - ak4613)
	card0,1: 2nd sound of ULCB (SSI2 - HDMI)
	card1,0: 1st sound of KF   (SSI3 - pcm3168a)
	    ^ ^

However, because of ASoC Component vs. Card framework limitations, we
needed to handle this as "1 big Sound Card":

	card0,0: 1st sound of ULCB/KF (SSI0 - ak4613)
	card0,1: 2nd sound of ULCB/KF (SSI2 - HDMI)
	card0,2: 3rd sound of ULCB/KF (SSI3 - pcm3168a)
	    ^ ^

Now ASoC supports multi Component, which allows us to handle "2 Sound
Cards" such as "ULCB Sound Card" and "Kingfisher Sound Card", all
ULCB/KF Audio dtsi can be updated.

Note that this changes the Sound Card specification method from
userland, especially for Kingfisher Sound.
Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Reviewed-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/r/87fs382yhk.wl-kuninori.morimoto.gx@renesas.comSigned-off-by: default avatarGeert Uytterhoeven <geert+renesas@glider.be>
parent 98537eb7
......@@ -21,14 +21,14 @@
/ {
sound_card: sound {
compatible = "audio-graph-scu-card";
label = "rcar-sound";
label = "snd-ulcb-mix";
routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture";
dais = <&rsnd_port0 /* (A) CPU0 */
&rsnd_port1 /* (B) CPU1 */
dais = <&snd_ulcb1 /* (A) CPU0 */
&snd_ulcb2 /* (B) CPU1 */
>;
};
};
......@@ -58,14 +58,18 @@ ak4613_ep2: endpoint@1 {
};
&rcar_sound {
ports {
#address-cells = <1>;
#size-cells = <0>;
ports@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
/*
* (A) CPU0
*/
rsnd_port0: port@0 {
snd_ulcb1: port@0 {
reg = <0>;
rsnd_for_ak4613_1: endpoint {
remote-endpoint = <&ak4613_ep1>;
......@@ -78,7 +82,7 @@ rsnd_for_ak4613_1: endpoint {
/*
* (B) CPU1
*/
rsnd_port1: port@1 {
snd_ulcb2: port@1 {
reg = <1>;
rsnd_for_ak4613_2: endpoint {
remote-endpoint = <&ak4613_ep2>;
......
......@@ -18,10 +18,10 @@
/ {
sound_card: sound {
compatible = "audio-graph-card";
label = "rcar-sound";
label = "snd-ulcb";
dais = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */
&rsnd_port1 /* (B) CPU1 -> HDMI */
dais = <&snd_ulcb1 /* (A) CPU0 <-> ak4613 */
&snd_ulcb2 /* (B) CPU1 -> HDMI */
>;
};
};
......@@ -53,10 +53,15 @@ dw_hdmi0_snd_in: endpoint {
};
&rcar_sound {
ports {
#address-cells = <1>;
#size-cells = <0>;
rsnd_port0: port@0 {
ports@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
snd_ulcb1: port@0 {
/*
* (A) CPU0 <-> ak4613
*/
......@@ -69,7 +74,7 @@ rsnd_for_ak4613: endpoint {
capture = <&ssi1>, <&src1>, <&dvc1>;
};
};
rsnd_port1: port@1 {
snd_ulcb2: port@1 {
/*
* (B) CPU1 -> HDMI
*/
......
......@@ -20,13 +20,12 @@
/ {
sound_card: sound {
compatible = "audio-graph-card2";
label = "rcar-sound";
label = "snd-ulcb-mix";
routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture";
/delete-property/ dais;
links = <&fe_a /* (A) CPU0 */
&fe_b /* (B) CPU1 */
&be_x /* (X) ak4613 */
......@@ -50,14 +49,12 @@ ports@0 {
};
ports@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/*
* BE
* (X) ak4613
*/
be_x: port@0 { reg = <0>; be_x_ep: endpoint { remote-endpoint = <&ak4613_x_ep>; }; };
be_x: port { be_x_ep: endpoint { remote-endpoint = <&ak4613_x_ep>; }; };
};
};
};
......@@ -78,10 +75,14 @@ ak4613_x_ep: endpoint {
};
&rcar_sound {
ports {
#address-cells = <1>;
#size-cells = <0>;
ports@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
/*
* (A) CPU0
*/
......
......@@ -20,7 +20,7 @@ &sound_card {
compatible = "audio-graph-card2";
/delete-property/ dais;
links = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */
&rsnd_port1 /* (B) CPU1 -> HDMI */
links = <&snd_ulcb1 /* (A) CPU0 <-> ak4613 */
&snd_ulcb2 /* (B) CPU1 -> HDMI */
>;
};
......@@ -19,32 +19,31 @@
*
* (A) aplay -D plughw:0,0 xxx.wav (MIX-0)
* (B) aplay -D plughw:0,1 xxx.wav (MIX-1)
* (C) aplay -D plughw:0,2 xxx.wav (TDM-0)
* (D) aplay -D plughw:0,3 xxx.wav (TDM-1)
* (E) aplay -D plughw:0,4 xxx.wav (TDM-2)
* (F) aplay -D plughw:0,5 xxx.wav (TDM-3)
* (C) aplay -D plughw:1,0 xxx.wav (TDM-0)
* (D) aplay -D plughw:1,1 xxx.wav (TDM-1)
* (E) aplay -D plughw:1,2 xxx.wav (TDM-2)
* (F) aplay -D plughw:1,3 xxx.wav (TDM-3)
*
* (A) arecord -D plughw:0,0 xxx.wav
* (G) arecord -D plughw:0,6 xxx.wav
* (G) arecord -D plughw:1,4 xxx.wav
*/
/ {
sound_card_kf: expand-sound {
compatible = "audio-graph-scu-card";
label = "snd-kf-split";
&sound_card {
routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture",
"pcm3168a Playback", "DAI2 Playback",
routing = "pcm3168a Playback", "DAI2 Playback",
"pcm3168a Playback", "DAI3 Playback",
"pcm3168a Playback", "DAI4 Playback",
"pcm3168a Playback", "DAI5 Playback";
dais = <&rsnd_port0 /* (A) CPU0 */
&rsnd_port1 /* (B) CPU1 */
&rsnd_port2 /* (C) CPU2 */
&rsnd_port3 /* (D) CPU3 */
&rsnd_port4 /* (E) CPU4 */
&rsnd_port5 /* (F) CPU5 */
&rsnd_port6 /* (G) GPU6 */
dais = <&snd_kf1 /* (C) CPU2 */
&snd_kf2 /* (D) CPU3 */
&snd_kf3 /* (E) CPU4 */
&snd_kf4 /* (F) CPU5 */
&snd_kf5 /* (G) GPU6 */
>;
};
};
&pcm3168a {
......@@ -103,13 +102,15 @@ pcm3168a_endpoint_c: endpoint {
};
&rcar_sound {
ports {
/* rsnd_port0-1 are defined in ulcb.dtsi */
ports@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/*
* (C) CPU2
*/
rsnd_port2: port@2 {
snd_kf1: port@2 {
reg = <2>;
rsnd_for_pcm3168a_play1: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p1>;
......@@ -121,7 +122,7 @@ rsnd_for_pcm3168a_play1: endpoint {
/*
* (D) CPU3
*/
rsnd_port3: port@3 {
snd_kf2: port@3 {
reg = <3>;
rsnd_for_pcm3168a_play2: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p2>;
......@@ -133,7 +134,7 @@ rsnd_for_pcm3168a_play2: endpoint {
/*
* (E) CPU4
*/
rsnd_port4: port@4 {
snd_kf3: port@4 {
reg = <4>;
rsnd_for_pcm3168a_play3: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p3>;
......@@ -145,7 +146,7 @@ rsnd_for_pcm3168a_play3: endpoint {
/*
* (F) CPU5
*/
rsnd_port5: port@5 {
snd_kf4: port@5 {
reg = <5>;
rsnd_for_pcm3168a_play4: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p4>;
......@@ -157,7 +158,7 @@ rsnd_for_pcm3168a_play4: endpoint {
/*
* (G) CPU6
*/
rsnd_port6: port@6 {
snd_kf5: port@6 {
reg = <6>;
rsnd_for_pcm3168a_capture: endpoint {
remote-endpoint = <&pcm3168a_endpoint_c>;
......
......@@ -13,18 +13,20 @@
*
* (A) aplay -D plughw:0,0 xxx.wav
* (B) aplay -D plughw:0,1 xxx.wav
* (C) aplay -D plughw:0,2 xxx.wav
* (C) aplay -D plughw:1,0 xxx.wav
*
* (A) arecord -D plughw:0,0 xxx.wav
* (D) arecord -D plughw:0,3 xxx.wav
* (D) arecord -D plughw:1,1 xxx.wav
*/
/ {
sound_card_kf: expand-sound {
compatible = "audio-graph-card";
label = "snd-kf";
&sound_card {
dais = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */
&rsnd_port1 /* (B) CPU1 -> HDMI */
&rsnd_port2 /* (C) CPU2 -> PCM3168A-p */
&rsnd_port3 /* (D) CPU3 <- PCM3168A-c */
dais = <&snd_kf1 /* (C) CPU2 -> PCM3168A-p */
&snd_kf2 /* (D) CPU3 <- PCM3168A-c */
>;
};
};
&pcm3168a {
......@@ -56,12 +58,15 @@ pcm3168a_endpoint_c: endpoint {
};
&rcar_sound {
ports {
/* rsnd_port0/1 are defined in ulcb.dtsi */
ports@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/*
* (C) CPU2 -> PCM3168A-p
*/
rsnd_port2: port@2 {
snd_kf1: port@2 {
reg = <2>;
rsnd_for_pcm3168a_play: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p>;
......@@ -74,7 +79,7 @@ rsnd_for_pcm3168a_play: endpoint {
/*
* (D) CPU3 <- PCM3168A-c
*/
rsnd_port3: port@3 {
snd_kf2: port@3 {
reg = <3>;
rsnd_for_pcm3168a_capture: endpoint {
remote-endpoint = <&pcm3168a_endpoint_c>;
......
......@@ -19,42 +19,45 @@
*
* (A) aplay -D plughw:0,0 xxx.wav (MIX-0)
* (B) aplay -D plughw:0,1 xxx.wav (MIX-1)
* (C) aplay -D plughw:0,2 xxx.wav (TDM-0)
* (D) aplay -D plughw:0,3 xxx.wav (TDM-1)
* (E) aplay -D plughw:0,4 xxx.wav (TDM-2)
* (F) aplay -D plughw:0,5 xxx.wav (TDM-3)
* (C) aplay -D plughw:1,0 xxx.wav (TDM-0)
* (D) aplay -D plughw:1,1 xxx.wav (TDM-1)
* (E) aplay -D plughw:1,2 xxx.wav (TDM-2)
* (F) aplay -D plughw:1,3 xxx.wav (TDM-3)
*
* (A) arecord -D plughw:0,0 xxx.wav
* (G) arecord -D plughw:0,6 xxx.wav
* (G) arecord -D plughw:1,4 xxx.wav
*/
&sound_card {
routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture",
"pcm3168a Playback", "DAI2 Playback",
/ {
sound_card_kf: expand-sound {
compatible = "audio-graph-card2";
label = "snd-kf-split";
routing = "pcm3168a Playback", "DAI2 Playback",
"pcm3168a Playback", "DAI3 Playback",
"pcm3168a Playback", "DAI4 Playback",
"pcm3168a Playback", "DAI5 Playback",
"DAI6 Capture", "pcm3168a Capture";
/delete-property/ dais;
links = <&fe_a /* (A) CPU0 */
&fe_b /* (B) CPU1 */
&fe_c /* (C) CPU2 */
links = <&fe_c /* (C) CPU2 */
&fe_d /* (D) CPU3 */
&fe_e /* (E) CPU4 */
&fe_f /* (F) CPU5 */
&rsnd_g /* (G) CPU6 */
&be_x /* (X) ak4613 */
&be_y /* (Y) PCM3168A-p */
>;
dpcm {
#address-cells = <1>;
#size-cells = <0>;
ports@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>;
/*
* FE
*
* (A)/(B) are defined on ulcb
* (C) CPU2
* (D) CPU3
* (E) CPU4
......@@ -67,13 +70,14 @@ ports@0 {
};
ports@1 {
reg = <1>;
/*
* BE
*
* (X) is defined on ulcb
* (Y) PCM3168A-p
*/
be_y: port@1 { reg = <1>; be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; };
be_y: port { be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; };
};
};
};
};
......@@ -111,8 +115,10 @@ pcm3168a_z_ep: endpoint {
};
&rcar_sound {
ports {
/* (A)/(B) are defined in ulcb.dtsi */
ports@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/*
* (C) CPU2
......
......@@ -13,18 +13,18 @@
*
* (A) aplay -D plughw:0,0 xxx.wav
* (B) aplay -D plughw:0,1 xxx.wav
* (C) aplay -D plughw:0,2 xxx.wav
* (C) aplay -D plughw:1,0 xxx.wav
*
* (A) arecord -D plughw:0,0 xxx.wav
* (D) arecord -D plughw:0,3 xxx.wav
* (D) arecord -D plughw:1,1 xxx.wav
*/
#include "ulcb-kf-audio-graph-card.dtsi"
&sound_card {
&sound_card_kf {
compatible = "audio-graph-card2";
/delete-property/ dais;
links = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */
&rsnd_port1 /* (B) CPU1 -> HDMI */
&rsnd_port2 /* (C) CPU2 -> PCM3168A-p */
&rsnd_port3 /* (D) CPU3 <- PCM3168A-c */
links = <&snd_kf1 /* (C) CPU2 -> PCM3168A-p */
&snd_kf2 /* (D) CPU3 <- PCM3168A-c */
>;
};
......@@ -19,31 +19,32 @@
*
* (A) aplay -D plughw:0,0 xxx.wav (MIX-0)
* (B) aplay -D plughw:0,1 xxx.wav (MIX-1)
* (C) aplay -D plughw:0,2 xxx.wav (TDM-0)
* (D) aplay -D plughw:0,3 xxx.wav (TDM-1)
* (E) aplay -D plughw:0,4 xxx.wav (TDM-2)
* (F) aplay -D plughw:0,5 xxx.wav (TDM-3)
* (C) aplay -D plughw:1,0 xxx.wav (TDM-0)
* (D) aplay -D plughw:1,1 xxx.wav (TDM-1)
* (E) aplay -D plughw:1,2 xxx.wav (TDM-2)
* (F) aplay -D plughw:1,3 xxx.wav (TDM-3)
*
* (A) arecord -D plughw:0,0 xxx.wav
* (G) arecord -D plughw:0,6 xxx.wav
* (G) arecord -D plughw:1,4 xxx.wav
*/
&sound_card {
/ {
sound_card_kf: expand-sound {
#address-cells = <1>;
#size-cells = <0>;
simple-audio-card,routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture",
"pcm3168a Playback", "DAI2 Playback",
compatible = "simple-scu-audio-card";
label = "snd-kf-split";
simple-audio-card,routing = "pcm3168a Playback", "DAI2 Playback",
"pcm3168a Playback", "DAI3 Playback",
"pcm3168a Playback", "DAI4 Playback",
"pcm3168a Playback", "DAI5 Playback";
/* dai-link@0 is defined in ulcb.dtsi */
simple-audio-card,dai-link@1 {
simple-audio-card,dai-link@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>;
reg = <0>;
convert-channels = <8>; /* to 8ch TDM */
/*
......@@ -85,8 +86,9 @@ codec {
sound-dai = <&pcm3168a 0>;
};
};
simple-audio-card,dai-link@2 {
reg = <2>;
simple-audio-card,dai-link@1 {
reg = <1>;
/*
* (G) CPU6
*/
......@@ -104,6 +106,7 @@ codec {
sound-dai = <&pcm3168a 1>;
};
};
};
};
&pcm3168a {
......@@ -115,7 +118,8 @@ &pcm3168a {
};
&rcar_sound {
rcar_sound,dai {
rcar_sound,dai@1 {
reg = <1>;
/* dai0-1 are defined in ulcb.dtsi */
......
......@@ -13,20 +13,25 @@
*
* (A) aplay -D plughw:0,0 xxx.wav
* (B) aplay -D plughw:0,1 xxx.wav
* (C) aplay -D plughw:0,2 xxx.wav
* (C) aplay -D plughw:1,0 xxx.wav
*
* (A) arecord -D plughw:0,0 xxx.wav
* (D) arecord -D plughw:0,3 xxx.wav
* (D) arecord -D plughw:1,1 xxx.wav
*/
&sound_card {
/* dai-link@0/1 are defined in ulcb.dtsi */
/ {
sound_card_kf: expand-sound {
compatible = "simple-audio-card";
label = "snd-kf";
#address-cells = <1>;
#size-cells = <0>;
/*
* (C) CPU2 -> PCM3168A-p
*/
simple-audio-card,dai-link@2 {
reg = <2>;
simple-audio-card,dai-link@0 {
reg = <0>;
cpu {
bitclock-master;
frame-master;
......@@ -41,8 +46,8 @@ codec {
/*
* (D) CPU3 <- PCM3168A-c
*/
simple-audio-card,dai-link@3 {
reg = <3>;
simple-audio-card,dai-link@1 {
reg = <1>;
cpu {
bitclock-master;
frame-master;
......@@ -54,6 +59,7 @@ codec {
sound-dai = <&pcm3168a 1>;
};
};
};
};
&pcm3168a {
......@@ -65,9 +71,8 @@ &pcm3168a {
};
&rcar_sound {
rcar_sound,dai {
/* dai0-1 are defined in ulcb.dtsi */
rcar_sound,dai@1 {
reg = <1>;
/*
* (C) CPU2 -> PCM3168A-p
......
......@@ -24,7 +24,7 @@ sound_card: sound {
#size-cells = <0>;
compatible = "simple-scu-audio-card";
label = "rcar-sound";
label = "snd-ulcb-mix";
simple-audio-card,prefix = "ak4613";
simple-audio-card,routing = "ak4613 Playback", "DAI0 Playback",
......@@ -72,9 +72,13 @@ &ak4613 {
};
&rcar_sound {
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <1>;
rcar_sound,dai {
rcar_sound,dai@0 {
reg = <0>;
/*
* (A) CPU0
*/
......
......@@ -18,7 +18,7 @@
/ {
sound_card: sound {
compatible = "simple-audio-card";
label = "rcar-sound";
label = "snd-ulcb";
#address-cells = <1>;
#size-cells = <0>;
......@@ -69,9 +69,13 @@ &hdmi0 {
};
&rcar_sound {
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <1>;
rcar_sound,dai {
rcar_sound,dai@0 {
reg = <0>;
/*
* (A) CPU0 <-> ak4613
*/
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment