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 @@ ...@@ -21,14 +21,14 @@
/ { / {
sound_card: sound { sound_card: sound {
compatible = "audio-graph-scu-card"; compatible = "audio-graph-scu-card";
label = "rcar-sound"; label = "snd-ulcb-mix";
routing = "ak4613 Playback", "DAI0 Playback", routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback", "ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture"; "DAI0 Capture", "ak4613 Capture";
dais = <&rsnd_port0 /* (A) CPU0 */ dais = <&snd_ulcb1 /* (A) CPU0 */
&rsnd_port1 /* (B) CPU1 */ &snd_ulcb2 /* (B) CPU1 */
>; >;
}; };
}; };
...@@ -58,14 +58,18 @@ ak4613_ep2: endpoint@1 { ...@@ -58,14 +58,18 @@ ak4613_ep2: endpoint@1 {
}; };
&rcar_sound { &rcar_sound {
ports { #address-cells = <1>;
#size-cells = <0>;
ports@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
reg = <0>;
/* /*
* (A) CPU0 * (A) CPU0
*/ */
rsnd_port0: port@0 { snd_ulcb1: port@0 {
reg = <0>; reg = <0>;
rsnd_for_ak4613_1: endpoint { rsnd_for_ak4613_1: endpoint {
remote-endpoint = <&ak4613_ep1>; remote-endpoint = <&ak4613_ep1>;
...@@ -78,7 +82,7 @@ rsnd_for_ak4613_1: endpoint { ...@@ -78,7 +82,7 @@ rsnd_for_ak4613_1: endpoint {
/* /*
* (B) CPU1 * (B) CPU1
*/ */
rsnd_port1: port@1 { snd_ulcb2: port@1 {
reg = <1>; reg = <1>;
rsnd_for_ak4613_2: endpoint { rsnd_for_ak4613_2: endpoint {
remote-endpoint = <&ak4613_ep2>; remote-endpoint = <&ak4613_ep2>;
......
...@@ -18,10 +18,10 @@ ...@@ -18,10 +18,10 @@
/ { / {
sound_card: sound { sound_card: sound {
compatible = "audio-graph-card"; compatible = "audio-graph-card";
label = "rcar-sound"; label = "snd-ulcb";
dais = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */ dais = <&snd_ulcb1 /* (A) CPU0 <-> ak4613 */
&rsnd_port1 /* (B) CPU1 -> HDMI */ &snd_ulcb2 /* (B) CPU1 -> HDMI */
>; >;
}; };
}; };
...@@ -53,10 +53,15 @@ dw_hdmi0_snd_in: endpoint { ...@@ -53,10 +53,15 @@ dw_hdmi0_snd_in: endpoint {
}; };
&rcar_sound { &rcar_sound {
ports { #address-cells = <1>;
#size-cells = <0>;
ports@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
rsnd_port0: port@0 { reg = <0>;
snd_ulcb1: port@0 {
/* /*
* (A) CPU0 <-> ak4613 * (A) CPU0 <-> ak4613
*/ */
...@@ -69,7 +74,7 @@ rsnd_for_ak4613: endpoint { ...@@ -69,7 +74,7 @@ rsnd_for_ak4613: endpoint {
capture = <&ssi1>, <&src1>, <&dvc1>; capture = <&ssi1>, <&src1>, <&dvc1>;
}; };
}; };
rsnd_port1: port@1 { snd_ulcb2: port@1 {
/* /*
* (B) CPU1 -> HDMI * (B) CPU1 -> HDMI
*/ */
......
...@@ -20,13 +20,12 @@ ...@@ -20,13 +20,12 @@
/ { / {
sound_card: sound { sound_card: sound {
compatible = "audio-graph-card2"; compatible = "audio-graph-card2";
label = "rcar-sound"; label = "snd-ulcb-mix";
routing = "ak4613 Playback", "DAI0 Playback", routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback", "ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture"; "DAI0 Capture", "ak4613 Capture";
/delete-property/ dais;
links = <&fe_a /* (A) CPU0 */ links = <&fe_a /* (A) CPU0 */
&fe_b /* (B) CPU1 */ &fe_b /* (B) CPU1 */
&be_x /* (X) ak4613 */ &be_x /* (X) ak4613 */
...@@ -50,14 +49,12 @@ ports@0 { ...@@ -50,14 +49,12 @@ ports@0 {
}; };
ports@1 { ports@1 {
#address-cells = <1>;
#size-cells = <0>;
reg = <1>; reg = <1>;
/* /*
* BE * BE
* (X) ak4613 * (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,9 +75,13 @@ ak4613_x_ep: endpoint { ...@@ -78,9 +75,13 @@ ak4613_x_ep: endpoint {
}; };
&rcar_sound { &rcar_sound {
ports { #address-cells = <1>;
#size-cells = <0>;
ports@0 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
reg = <0>;
/* /*
* (A) CPU0 * (A) CPU0
......
...@@ -20,7 +20,7 @@ &sound_card { ...@@ -20,7 +20,7 @@ &sound_card {
compatible = "audio-graph-card2"; compatible = "audio-graph-card2";
/delete-property/ dais; /delete-property/ dais;
links = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */ links = <&snd_ulcb1 /* (A) CPU0 <-> ak4613 */
&rsnd_port1 /* (B) CPU1 -> HDMI */ &snd_ulcb2 /* (B) CPU1 -> HDMI */
>; >;
}; };
...@@ -19,32 +19,31 @@ ...@@ -19,32 +19,31 @@
* *
* (A) aplay -D plughw:0,0 xxx.wav (MIX-0) * (A) aplay -D plughw:0,0 xxx.wav (MIX-0)
* (B) aplay -D plughw:0,1 xxx.wav (MIX-1) * (B) aplay -D plughw:0,1 xxx.wav (MIX-1)
* (C) aplay -D plughw:0,2 xxx.wav (TDM-0) * (C) aplay -D plughw:1,0 xxx.wav (TDM-0)
* (D) aplay -D plughw:0,3 xxx.wav (TDM-1) * (D) aplay -D plughw:1,1 xxx.wav (TDM-1)
* (E) aplay -D plughw:0,4 xxx.wav (TDM-2) * (E) aplay -D plughw:1,2 xxx.wav (TDM-2)
* (F) aplay -D plughw:0,5 xxx.wav (TDM-3) * (F) aplay -D plughw:1,3 xxx.wav (TDM-3)
* *
* (A) arecord -D plughw:0,0 xxx.wav * (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 = "pcm3168a Playback", "DAI2 Playback",
routing = "ak4613 Playback", "DAI0 Playback", "pcm3168a Playback", "DAI3 Playback",
"ak4613 Playback", "DAI1 Playback", "pcm3168a Playback", "DAI4 Playback",
"DAI0 Capture", "ak4613 Capture", "pcm3168a Playback", "DAI5 Playback";
"pcm3168a Playback", "DAI2 Playback",
"pcm3168a Playback", "DAI3 Playback",
"pcm3168a Playback", "DAI4 Playback",
"pcm3168a Playback", "DAI5 Playback";
dais = <&rsnd_port0 /* (A) CPU0 */ dais = <&snd_kf1 /* (C) CPU2 */
&rsnd_port1 /* (B) CPU1 */ &snd_kf2 /* (D) CPU3 */
&rsnd_port2 /* (C) CPU2 */ &snd_kf3 /* (E) CPU4 */
&rsnd_port3 /* (D) CPU3 */ &snd_kf4 /* (F) CPU5 */
&rsnd_port4 /* (E) CPU4 */ &snd_kf5 /* (G) GPU6 */
&rsnd_port5 /* (F) CPU5 */ >;
&rsnd_port6 /* (G) GPU6 */ };
>;
}; };
&pcm3168a { &pcm3168a {
...@@ -103,13 +102,15 @@ pcm3168a_endpoint_c: endpoint { ...@@ -103,13 +102,15 @@ pcm3168a_endpoint_c: endpoint {
}; };
&rcar_sound { &rcar_sound {
ports { ports@1 {
/* rsnd_port0-1 are defined in ulcb.dtsi */ #address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/* /*
* (C) CPU2 * (C) CPU2
*/ */
rsnd_port2: port@2 { snd_kf1: port@2 {
reg = <2>; reg = <2>;
rsnd_for_pcm3168a_play1: endpoint { rsnd_for_pcm3168a_play1: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p1>; remote-endpoint = <&pcm3168a_endpoint_p1>;
...@@ -121,7 +122,7 @@ rsnd_for_pcm3168a_play1: endpoint { ...@@ -121,7 +122,7 @@ rsnd_for_pcm3168a_play1: endpoint {
/* /*
* (D) CPU3 * (D) CPU3
*/ */
rsnd_port3: port@3 { snd_kf2: port@3 {
reg = <3>; reg = <3>;
rsnd_for_pcm3168a_play2: endpoint { rsnd_for_pcm3168a_play2: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p2>; remote-endpoint = <&pcm3168a_endpoint_p2>;
...@@ -133,7 +134,7 @@ rsnd_for_pcm3168a_play2: endpoint { ...@@ -133,7 +134,7 @@ rsnd_for_pcm3168a_play2: endpoint {
/* /*
* (E) CPU4 * (E) CPU4
*/ */
rsnd_port4: port@4 { snd_kf3: port@4 {
reg = <4>; reg = <4>;
rsnd_for_pcm3168a_play3: endpoint { rsnd_for_pcm3168a_play3: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p3>; remote-endpoint = <&pcm3168a_endpoint_p3>;
...@@ -145,7 +146,7 @@ rsnd_for_pcm3168a_play3: endpoint { ...@@ -145,7 +146,7 @@ rsnd_for_pcm3168a_play3: endpoint {
/* /*
* (F) CPU5 * (F) CPU5
*/ */
rsnd_port5: port@5 { snd_kf4: port@5 {
reg = <5>; reg = <5>;
rsnd_for_pcm3168a_play4: endpoint { rsnd_for_pcm3168a_play4: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p4>; remote-endpoint = <&pcm3168a_endpoint_p4>;
...@@ -157,7 +158,7 @@ rsnd_for_pcm3168a_play4: endpoint { ...@@ -157,7 +158,7 @@ rsnd_for_pcm3168a_play4: endpoint {
/* /*
* (G) CPU6 * (G) CPU6
*/ */
rsnd_port6: port@6 { snd_kf5: port@6 {
reg = <6>; reg = <6>;
rsnd_for_pcm3168a_capture: endpoint { rsnd_for_pcm3168a_capture: endpoint {
remote-endpoint = <&pcm3168a_endpoint_c>; remote-endpoint = <&pcm3168a_endpoint_c>;
......
...@@ -13,18 +13,20 @@ ...@@ -13,18 +13,20 @@
* *
* (A) aplay -D plughw:0,0 xxx.wav * (A) aplay -D plughw:0,0 xxx.wav
* (B) aplay -D plughw:0,1 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 * (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 = <&snd_kf1 /* (C) CPU2 -> PCM3168A-p */
dais = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */ &snd_kf2 /* (D) CPU3 <- PCM3168A-c */
&rsnd_port1 /* (B) CPU1 -> HDMI */
&rsnd_port2 /* (C) CPU2 -> PCM3168A-p */
&rsnd_port3 /* (D) CPU3 <- PCM3168A-c */
>; >;
};
}; };
&pcm3168a { &pcm3168a {
...@@ -56,12 +58,15 @@ pcm3168a_endpoint_c: endpoint { ...@@ -56,12 +58,15 @@ pcm3168a_endpoint_c: endpoint {
}; };
&rcar_sound { &rcar_sound {
ports { ports@1 {
/* rsnd_port0/1 are defined in ulcb.dtsi */ #address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/* /*
* (C) CPU2 -> PCM3168A-p * (C) CPU2 -> PCM3168A-p
*/ */
rsnd_port2: port@2 { snd_kf1: port@2 {
reg = <2>; reg = <2>;
rsnd_for_pcm3168a_play: endpoint { rsnd_for_pcm3168a_play: endpoint {
remote-endpoint = <&pcm3168a_endpoint_p>; remote-endpoint = <&pcm3168a_endpoint_p>;
...@@ -74,7 +79,7 @@ rsnd_for_pcm3168a_play: endpoint { ...@@ -74,7 +79,7 @@ rsnd_for_pcm3168a_play: endpoint {
/* /*
* (D) CPU3 <- PCM3168A-c * (D) CPU3 <- PCM3168A-c
*/ */
rsnd_port3: port@3 { snd_kf2: port@3 {
reg = <3>; reg = <3>;
rsnd_for_pcm3168a_capture: endpoint { rsnd_for_pcm3168a_capture: endpoint {
remote-endpoint = <&pcm3168a_endpoint_c>; remote-endpoint = <&pcm3168a_endpoint_c>;
......
...@@ -19,61 +19,65 @@ ...@@ -19,61 +19,65 @@
* *
* (A) aplay -D plughw:0,0 xxx.wav (MIX-0) * (A) aplay -D plughw:0,0 xxx.wav (MIX-0)
* (B) aplay -D plughw:0,1 xxx.wav (MIX-1) * (B) aplay -D plughw:0,1 xxx.wav (MIX-1)
* (C) aplay -D plughw:0,2 xxx.wav (TDM-0) * (C) aplay -D plughw:1,0 xxx.wav (TDM-0)
* (D) aplay -D plughw:0,3 xxx.wav (TDM-1) * (D) aplay -D plughw:1,1 xxx.wav (TDM-1)
* (E) aplay -D plughw:0,4 xxx.wav (TDM-2) * (E) aplay -D plughw:1,2 xxx.wav (TDM-2)
* (F) aplay -D plughw:0,5 xxx.wav (TDM-3) * (F) aplay -D plughw:1,3 xxx.wav (TDM-3)
* *
* (A) arecord -D plughw:0,0 xxx.wav * (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", sound_card_kf: expand-sound {
"ak4613 Playback", "DAI1 Playback", compatible = "audio-graph-card2";
"DAI0 Capture", "ak4613 Capture", label = "snd-kf-split";
"pcm3168a Playback", "DAI2 Playback",
"pcm3168a Playback", "DAI3 Playback",
"pcm3168a Playback", "DAI4 Playback",
"pcm3168a Playback", "DAI5 Playback",
"DAI6 Capture", "pcm3168a Capture";
/delete-property/ dais; routing = "pcm3168a Playback", "DAI2 Playback",
links = <&fe_a /* (A) CPU0 */ "pcm3168a Playback", "DAI3 Playback",
&fe_b /* (B) CPU1 */ "pcm3168a Playback", "DAI4 Playback",
&fe_c /* (C) CPU2 */ "pcm3168a Playback", "DAI5 Playback",
&fe_d /* (D) CPU3 */ "DAI6 Capture", "pcm3168a Capture";
&fe_e /* (E) CPU4 */
&fe_f /* (F) CPU5 */
&rsnd_g /* (G) CPU6 */
&be_x /* (X) ak4613 */
&be_y /* (Y) PCM3168A-p */
>;
dpcm { links = <&fe_c /* (C) CPU2 */
ports@0 { &fe_d /* (D) CPU3 */
/* &fe_e /* (E) CPU4 */
* FE &fe_f /* (F) CPU5 */
* &rsnd_g /* (G) CPU6 */
* (A)/(B) are defined on ulcb &be_y /* (Y) PCM3168A-p */
* (C) CPU2 >;
* (D) CPU3
* (E) CPU4
* (F) CPU5
*/
fe_c: port@2 { reg = <2>; fe_c_ep: endpoint { remote-endpoint = <&rsnd_c_ep>; }; };
fe_d: port@3 { reg = <3>; fe_d_ep: endpoint { remote-endpoint = <&rsnd_d_ep>; }; };
fe_e: port@4 { reg = <4>; fe_e_ep: endpoint { remote-endpoint = <&rsnd_e_ep>; }; };
fe_f: port@5 { reg = <5>; fe_f_ep: endpoint { remote-endpoint = <&rsnd_f_ep>; }; };
};
ports@1 { dpcm {
/* #address-cells = <1>;
* BE #size-cells = <0>;
*
* (X) is defined on ulcb ports@0 {
* (Y) PCM3168A-p #address-cells = <1>;
*/ #size-cells = <0>;
be_y: port@1 { reg = <1>; be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; }; reg = <0>;
/*
* FE
*
* (C) CPU2
* (D) CPU3
* (E) CPU4
* (F) CPU5
*/
fe_c: port@2 { reg = <2>; fe_c_ep: endpoint { remote-endpoint = <&rsnd_c_ep>; }; };
fe_d: port@3 { reg = <3>; fe_d_ep: endpoint { remote-endpoint = <&rsnd_d_ep>; }; };
fe_e: port@4 { reg = <4>; fe_e_ep: endpoint { remote-endpoint = <&rsnd_e_ep>; }; };
fe_f: port@5 { reg = <5>; fe_f_ep: endpoint { remote-endpoint = <&rsnd_f_ep>; }; };
};
ports@1 {
reg = <1>;
/*
* BE
*
* (Y) PCM3168A-p
*/
be_y: port { be_y_ep: endpoint { remote-endpoint = <&pcm3168a_y_ep>; }; };
};
}; };
}; };
}; };
...@@ -111,8 +115,10 @@ pcm3168a_z_ep: endpoint { ...@@ -111,8 +115,10 @@ pcm3168a_z_ep: endpoint {
}; };
&rcar_sound { &rcar_sound {
ports { ports@1 {
/* (A)/(B) are defined in ulcb.dtsi */ #address-cells = <1>;
#size-cells = <0>;
reg = <1>;
/* /*
* (C) CPU2 * (C) CPU2
......
...@@ -13,18 +13,18 @@ ...@@ -13,18 +13,18 @@
* *
* (A) aplay -D plughw:0,0 xxx.wav * (A) aplay -D plughw:0,0 xxx.wav
* (B) aplay -D plughw:0,1 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 * (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" #include "ulcb-kf-audio-graph-card.dtsi"
&sound_card { &sound_card_kf {
compatible = "audio-graph-card2";
/delete-property/ dais; /delete-property/ dais;
links = <&rsnd_port0 /* (A) CPU0 <-> ak4613 */ links = <&snd_kf1 /* (C) CPU2 -> PCM3168A-p */
&rsnd_port1 /* (B) CPU1 -> HDMI */ &snd_kf2 /* (D) CPU3 <- PCM3168A-c */
&rsnd_port2 /* (C) CPU2 -> PCM3168A-p */
&rsnd_port3 /* (D) CPU3 <- PCM3168A-c */
>; >;
}; };
...@@ -19,89 +19,92 @@ ...@@ -19,89 +19,92 @@
* *
* (A) aplay -D plughw:0,0 xxx.wav (MIX-0) * (A) aplay -D plughw:0,0 xxx.wav (MIX-0)
* (B) aplay -D plughw:0,1 xxx.wav (MIX-1) * (B) aplay -D plughw:0,1 xxx.wav (MIX-1)
* (C) aplay -D plughw:0,2 xxx.wav (TDM-0) * (C) aplay -D plughw:1,0 xxx.wav (TDM-0)
* (D) aplay -D plughw:0,3 xxx.wav (TDM-1) * (D) aplay -D plughw:1,1 xxx.wav (TDM-1)
* (E) aplay -D plughw:0,4 xxx.wav (TDM-2) * (E) aplay -D plughw:1,2 xxx.wav (TDM-2)
* (F) aplay -D plughw:0,5 xxx.wav (TDM-3) * (F) aplay -D plughw:1,3 xxx.wav (TDM-3)
* *
* (A) arecord -D plughw:0,0 xxx.wav * (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 {
simple-audio-card,routing = "ak4613 Playback", "DAI0 Playback",
"ak4613 Playback", "DAI1 Playback",
"DAI0 Capture", "ak4613 Capture",
"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 {
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
reg = <1>;
convert-channels = <8>; /* to 8ch TDM */
/* compatible = "simple-scu-audio-card";
* (C) CPU2 label = "snd-kf-split";
*/
cpu@0 { simple-audio-card,routing = "pcm3168a Playback", "DAI2 Playback",
"pcm3168a Playback", "DAI3 Playback",
"pcm3168a Playback", "DAI4 Playback",
"pcm3168a Playback", "DAI5 Playback";
simple-audio-card,dai-link@0 {
#address-cells = <1>;
#size-cells = <0>;
reg = <0>; reg = <0>;
bitclock-master; convert-channels = <8>; /* to 8ch TDM */
frame-master;
sound-dai = <&rcar_sound 2>; /*
* (C) CPU2
*/
cpu@0 {
reg = <0>;
bitclock-master;
frame-master;
sound-dai = <&rcar_sound 2>;
};
/*
* (D) CPU3
*/
cpu@1 {
reg = <1>;
sound-dai = <&rcar_sound 3>;
};
/*
* (E) CPU4
*/
cpu@2 {
reg = <2>;
sound-dai = <&rcar_sound 4>;
};
/*
* (F) CPU5
*/
cpu@3 {
reg = <3>;
sound-dai = <&rcar_sound 5>;
};
/*
* (Y) PCM3168A-p
*/
codec {
prefix = "pcm3168a";
mclk-fs = <512>;
sound-dai = <&pcm3168a 0>;
};
}; };
/*
* (D) CPU3 simple-audio-card,dai-link@1 {
*/
cpu@1 {
reg = <1>; reg = <1>;
sound-dai = <&rcar_sound 3>; /*
}; * (G) CPU6
/* */
* (E) CPU4 cpu {
*/ bitclock-master;
cpu@2 { frame-master;
reg = <2>; sound-dai = <&rcar_sound 6>;
sound-dai = <&rcar_sound 4>; };
}; /*
/* * (Z) PCM3168A-c
* (F) CPU5 */
*/ codec {
cpu@3 { prefix = "pcm3168a";
reg = <3>; mclk-fs = <512>;
sound-dai = <&rcar_sound 5>; sound-dai = <&pcm3168a 1>;
}; };
/*
* (Y) PCM3168A-p
*/
codec {
prefix = "pcm3168a";
mclk-fs = <512>;
sound-dai = <&pcm3168a 0>;
};
};
simple-audio-card,dai-link@2 {
reg = <2>;
/*
* (G) CPU6
*/
cpu {
bitclock-master;
frame-master;
sound-dai = <&rcar_sound 6>;
};
/*
* (Z) PCM3168A-c
*/
codec {
prefix = "pcm3168a";
mclk-fs = <512>;
sound-dai = <&pcm3168a 1>;
}; };
}; };
}; };
...@@ -115,7 +118,8 @@ &pcm3168a { ...@@ -115,7 +118,8 @@ &pcm3168a {
}; };
&rcar_sound { &rcar_sound {
rcar_sound,dai { rcar_sound,dai@1 {
reg = <1>;
/* dai0-1 are defined in ulcb.dtsi */ /* dai0-1 are defined in ulcb.dtsi */
......
...@@ -13,45 +13,51 @@ ...@@ -13,45 +13,51 @@
* *
* (A) aplay -D plughw:0,0 xxx.wav * (A) aplay -D plughw:0,0 xxx.wav
* (B) aplay -D plughw:0,1 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 * (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>;
* (C) CPU2 -> PCM3168A-p #size-cells = <0>;
*/
simple-audio-card,dai-link@2 { /*
reg = <2>; * (C) CPU2 -> PCM3168A-p
cpu { */
bitclock-master; simple-audio-card,dai-link@0 {
frame-master; reg = <0>;
dai-tdm-slot-num = <8>; cpu {
sound-dai = <&rcar_sound 2>; bitclock-master;
}; frame-master;
codec { dai-tdm-slot-num = <8>;
mclk-fs = <512>; sound-dai = <&rcar_sound 2>;
sound-dai = <&pcm3168a 0>; };
}; codec {
}; mclk-fs = <512>;
/* sound-dai = <&pcm3168a 0>;
* (D) CPU3 <- PCM3168A-c };
*/
simple-audio-card,dai-link@3 {
reg = <3>;
cpu {
bitclock-master;
frame-master;
dai-tdm-slot-num = <6>;
sound-dai = <&rcar_sound 3>;
}; };
codec { /*
mclk-fs = <512>; * (D) CPU3 <- PCM3168A-c
sound-dai = <&pcm3168a 1>; */
simple-audio-card,dai-link@1 {
reg = <1>;
cpu {
bitclock-master;
frame-master;
dai-tdm-slot-num = <6>;
sound-dai = <&rcar_sound 3>;
};
codec {
mclk-fs = <512>;
sound-dai = <&pcm3168a 1>;
};
}; };
}; };
}; };
...@@ -65,9 +71,8 @@ &pcm3168a { ...@@ -65,9 +71,8 @@ &pcm3168a {
}; };
&rcar_sound { &rcar_sound {
rcar_sound,dai@1 {
rcar_sound,dai { reg = <1>;
/* dai0-1 are defined in ulcb.dtsi */
/* /*
* (C) CPU2 -> PCM3168A-p * (C) CPU2 -> PCM3168A-p
......
...@@ -24,7 +24,7 @@ sound_card: sound { ...@@ -24,7 +24,7 @@ sound_card: sound {
#size-cells = <0>; #size-cells = <0>;
compatible = "simple-scu-audio-card"; compatible = "simple-scu-audio-card";
label = "rcar-sound"; label = "snd-ulcb-mix";
simple-audio-card,prefix = "ak4613"; simple-audio-card,prefix = "ak4613";
simple-audio-card,routing = "ak4613 Playback", "DAI0 Playback", simple-audio-card,routing = "ak4613 Playback", "DAI0 Playback",
...@@ -72,9 +72,13 @@ &ak4613 { ...@@ -72,9 +72,13 @@ &ak4613 {
}; };
&rcar_sound { &rcar_sound {
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <1>; #sound-dai-cells = <1>;
rcar_sound,dai { rcar_sound,dai@0 {
reg = <0>;
/* /*
* (A) CPU0 * (A) CPU0
*/ */
......
...@@ -18,7 +18,7 @@ ...@@ -18,7 +18,7 @@
/ { / {
sound_card: sound { sound_card: sound {
compatible = "simple-audio-card"; compatible = "simple-audio-card";
label = "rcar-sound"; label = "snd-ulcb";
#address-cells = <1>; #address-cells = <1>;
#size-cells = <0>; #size-cells = <0>;
...@@ -69,9 +69,13 @@ &hdmi0 { ...@@ -69,9 +69,13 @@ &hdmi0 {
}; };
&rcar_sound { &rcar_sound {
#address-cells = <1>;
#size-cells = <0>;
#sound-dai-cells = <1>; #sound-dai-cells = <1>;
rcar_sound,dai { rcar_sound,dai@0 {
reg = <0>;
/* /*
* (A) CPU0 <-> ak4613 * (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