summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKuninori Morimoto <kuninori.morimoto.gx@renesas.com>2023-01-13 05:04:27 +0300
committerGeert Uytterhoeven <geert+renesas@glider.be>2023-01-26 18:03:04 +0300
commitccb26ac5e7dbc28a0d957ea4e911345b74c768c6 (patch)
tree6a1e03fe88d4ceb0c42857cc29ecebe627b89063
parent15ec87e017d36afc0b39a91b62b32511a84fb171 (diff)
downloadlinux-ccb26ac5e7dbc28a0d957ea4e911345b74c768c6.tar.xz
arm64: dts: renesas: Add ulcb{-kf} Audio Graph Card MIX + TDM Split dtsi
ALSA SoC has many types of Generic Audio Card drivers (Simple Audio Card, Audio Graph Card, Audio Graph Card2), and Renesas/Kuninori Morimoto wants to test these. The Generic Audio Card driver had been requested on ALSA SoC. It supports many types of device connection methods, and historically, the requested connection support range of the generic driver has been upgraded. Upgrading the connection support range itself could not be implemented in the generic driver, because we need to keep compatibility with old DTBs. This is one of the reasons why we have many types of Generic Audio Card driver. The ULCB/KF combo is a good board stack to test these. Kuninori has been testing these Generic Audio Card drivers by using his local patches to switching drivers. But from an information sharing point of view, it is a good idea to upstream these, because the DT configuration is complex. Hence this can be a good sample for the user. Hence add an "Audio Graph Card + MIXer + TDM Split" DT setting file for ULCB/KF. Because of the limited number of subdevices, the HDMI output is ignored. This setting can be enabled by updating ulcb.dtsi / ulcb-kf.dtsi. From a normal user point of view who doesn't need to test the driver, everything should stay as-is, and nothing changes. Note that because this needs "switching driver", and not "adding extra feature", this does not use a Device Tree overlay. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be> Link: https://lore.kernel.org/r/875ydbi40l.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
-rw-r--r--arch/arm64/boot/dts/renesas/ulcb-audio-graph-card-mix+split.dtsi91
-rw-r--r--arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card-mix+split.dtsi171
-rw-r--r--arch/arm64/boot/dts/renesas/ulcb-kf.dtsi1
-rw-r--r--arch/arm64/boot/dts/renesas/ulcb.dtsi1
4 files changed, 264 insertions, 0 deletions
diff --git a/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card-mix+split.dtsi b/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card-mix+split.dtsi
new file mode 100644
index 000000000000..672b0a224ef9
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card-mix+split.dtsi
@@ -0,0 +1,91 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree for ULCB + Audio Graph Card (MIX)
+ *
+ * Copyright (C) 2022 Renesas Electronics Corp.
+ */
+
+/*
+ * Note:
+ * The HDMI output is ignored due to the limited number of subdevices
+ *
+ * (A) CPU0 (2ch) <-----> (2ch) (X) ak4613 (MIX-0)
+ * (B) CPU1 (2ch) --/ (MIX-1)
+ *
+ * (A) aplay -D plughw:0,0 xxx.wav
+ * (B) aplay -D plughw:0,1 xxx.wav
+ *
+ * (A) arecord -D plughw:0,0 xxx.wav
+ */
+
+/ {
+ sound_card: sound {
+ compatible = "audio-graph-scu-card";
+ label = "rcar-sound";
+
+ routing = "ak4613 Playback", "DAI0 Playback",
+ "ak4613 Playback", "DAI1 Playback",
+ "DAI0 Capture", "ak4613 Capture";
+
+ dais = <&rsnd_port0 /* (A) CPU0 */
+ &rsnd_port1 /* (B) CPU1 */
+ >;
+ };
+};
+
+&ak4613 {
+ port {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /*
+ * (X) ak4613
+ */
+ prefix = "ak4613";
+ convert-rate = <48000>;
+
+ /* (A) CPU0 <-> (X) ak4613 */
+ ak4613_ep1: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&rsnd_for_ak4613_1>;
+ };
+ /* (B) CPU1 -> (X) ak4613 */
+ ak4613_ep2: endpoint@1 {
+ reg = <1>;
+ remote-endpoint = <&rsnd_for_ak4613_2>;
+ };
+ };
+};
+
+&rcar_sound {
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ /*
+ * (A) CPU0
+ */
+ rsnd_port0: port@0 {
+ reg = <0>;
+ rsnd_for_ak4613_1: endpoint {
+ remote-endpoint = <&ak4613_ep1>;
+ bitclock-master;
+ frame-master;
+ playback = <&src1 &ctu02 &mix0 &dvc0 &ssi0>;
+ capture = <&ssi1 &src0 &dvc1>;
+ };
+ };
+ /*
+ * (B) CPU1
+ */
+ rsnd_port1: port@1 {
+ reg = <1>;
+ rsnd_for_ak4613_2: endpoint {
+ remote-endpoint = <&ak4613_ep2>;
+ bitclock-master;
+ frame-master;
+ playback = <&src2 &ctu03 &mix0 &dvc0 &ssi0>;
+ };
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card-mix+split.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card-mix+split.dtsi
new file mode 100644
index 000000000000..9b01354940fd
--- /dev/null
+++ b/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card-mix+split.dtsi
@@ -0,0 +1,171 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Device Tree for ULCB + Kingfisher + Audio Graph Card (MIX + TDM Split)
+ *
+ * Copyright (C) 2022 Renesas Electronics Corp.
+ */
+
+/*
+ * Note:
+ * The HDMI output is ignored due to the limited number of subdevices
+ *
+ * (A) CPU0 (2ch) <----> (2ch) (X) ak4613 (MIX-0)
+ * (B) CPU1 (2ch) --/ (MIX-1)
+ * (C) CPU2 (2ch) ----> (8ch) (Y) PCM3168A-p (TDM-0 : 0,1ch)
+ * (D) CPU3 (2ch) --/ (TDM-1 : 2,3ch)
+ * (E) CPU4 (2ch) --/ (TDM-2 : 4,5ch)
+ * (F) CPU5 (2ch) --/ (TDM-3 : 6,7ch)
+ * (G) CPU6 (6ch) <---- (6ch) (Z) PCM3168A-c
+ *
+ * (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)
+ *
+ * (A) arecord -D plughw:0,0 xxx.wav
+ * (G) arecord -D plughw:0,6 xxx.wav
+ */
+
+&sound_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";
+
+ 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 */
+ >;
+};
+
+&pcm3168a {
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ mclk-fs = <512>;
+
+ /*
+ * (Y) PCM3168A-p
+ */
+ port@0 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ reg = <0>;
+ prefix = "pcm3168a";
+ convert-channels = <8>; /* to 8ch TDM */
+
+ /* (C) CPU2 -> (Y) PCM3168A-p */
+ pcm3168a_endpoint_p1: endpoint@0 {
+ reg = <0>;
+ remote-endpoint = <&rsnd_for_pcm3168a_play1>;
+ clocks = <&clksndsel>;
+ };
+ /* (D) CPU3 -> (Y) PCM3168A-p */
+ pcm3168a_endpoint_p2: endpoint@1 {
+ reg = <1>;
+ remote-endpoint = <&rsnd_for_pcm3168a_play2>;
+ clocks = <&clksndsel>;
+ };
+ /* (E) CPU4 -> (Y) PCM3168A-p */
+ pcm3168a_endpoint_p3: endpoint@2 {
+ reg = <2>;
+ remote-endpoint = <&rsnd_for_pcm3168a_play3>;
+ clocks = <&clksndsel>;
+ };
+ /* (F) CPU5 -> (Y) PCM3168A-p */
+ pcm3168a_endpoint_p4: endpoint@3 {
+ reg = <3>;
+ remote-endpoint = <&rsnd_for_pcm3168a_play4>;
+ clocks = <&clksndsel>;
+ };
+ };
+ /*
+ * (Z) PCM3168A-c
+ */
+ port@1 {
+ reg = <1>;
+ /* (G) CPU6 <- PCM3168A-c */
+ pcm3168a_endpoint_c: endpoint {
+ remote-endpoint = <&rsnd_for_pcm3168a_capture>;
+ clocks = <&clksndsel>;
+ };
+ };
+ };
+};
+
+&rcar_sound {
+ ports {
+ /* rsnd_port0-1 are defined in ulcb.dtsi */
+
+ /*
+ * (C) CPU2
+ */
+ rsnd_port2: port@2 {
+ reg = <2>;
+ rsnd_for_pcm3168a_play1: endpoint {
+ remote-endpoint = <&pcm3168a_endpoint_p1>;
+ bitclock-master;
+ frame-master;
+ playback = <&ssiu30 &ssi3>;
+ };
+ };
+ /*
+ * (D) CPU3
+ */
+ rsnd_port3: port@3 {
+ reg = <3>;
+ rsnd_for_pcm3168a_play2: endpoint {
+ remote-endpoint = <&pcm3168a_endpoint_p2>;
+ bitclock-master;
+ frame-master;
+ playback = <&ssiu31 &ssi3>;
+ };
+ };
+ /*
+ * (E) CPU4
+ */
+ rsnd_port4: port@4 {
+ reg = <4>;
+ rsnd_for_pcm3168a_play3: endpoint {
+ remote-endpoint = <&pcm3168a_endpoint_p3>;
+ bitclock-master;
+ frame-master;
+ playback = <&ssiu32 &ssi3>;
+ };
+ };
+ /*
+ * (F) CPU5
+ */
+ rsnd_port5: port@5 {
+ reg = <5>;
+ rsnd_for_pcm3168a_play4: endpoint {
+ remote-endpoint = <&pcm3168a_endpoint_p4>;
+ bitclock-master;
+ frame-master;
+ playback = <&ssiu33 &ssi3>;
+ };
+ };
+ /*
+ * (G) CPU6
+ */
+ rsnd_port6: port@6 {
+ reg = <6>;
+ rsnd_for_pcm3168a_capture: endpoint {
+ remote-endpoint = <&pcm3168a_endpoint_c>;
+ bitclock-master;
+ frame-master;
+ dai-tdm-slot-num = <6>;
+ capture = <&ssi4>;
+ };
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi
index 9b50f9881d25..0735769df89f 100644
--- a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi
+++ b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi
@@ -449,6 +449,7 @@
*
* #include "ulcb-kf-simple-audio-card.dtsi"
* #include "ulcb-kf-audio-graph-card.dtsi"
+ * #include "ulcb-kf-audio-graph-card-mix+split.dtsi"
* #include "ulcb-kf-audio-graph-card2-mix+split.dtsi"
*/
#include "ulcb-kf-audio-graph-card2.dtsi"
diff --git a/arch/arm64/boot/dts/renesas/ulcb.dtsi b/arch/arm64/boot/dts/renesas/ulcb.dtsi
index bb93ba4ff946..172d065d70bb 100644
--- a/arch/arm64/boot/dts/renesas/ulcb.dtsi
+++ b/arch/arm64/boot/dts/renesas/ulcb.dtsi
@@ -495,6 +495,7 @@
*
* #include "ulcb-simple-audio-card.dtsi"
* #include "ulcb-audio-graph-card.dtsi"
+ * #include "ulcb-audio-graph-card-mix+split.dtsi"
* #include "ulcb-audio-graph-card2-mix+split.dtsi"
*/
#include "ulcb-audio-graph-card2.dtsi"