From: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> ALSA SoC has many type of Generic Audio Card driver (Simple Audio Card, Audio Graph Card, Audio Graph Card2), and Renesas/Kuninori Morimoto want to test these. Generic Audio Card driver had been requested on ALSA SoC. It has many type of device connection method, and historically, requested connection support range of generic driver have been upgraded. Upgrading connection support range itself was possible on generic driver, but could not implemented, because we need to keep compatibility on Device-Tree. This is one of the reason why we have many type of Generic Audio Card driver. ULCB/KF is good board to test these. Kuninori has been testing these Generic Audio Card driver by using his local patch to switching drivers. But it is good idea to upstream these from information sharing point of view, because DT setting is complex. It can be good sample for user. This patch is one of them. >From normal user point of view who don't need to test the driver, it should keep as-is, nothing changed. This patch adds "Audio Graph Card + MIXer + TDM Split" DT setting file for ULCB/KF. Because it reach to subdevice maximum, it ignore HDMI. We can switch to use it if ulcb.dtsi / ulcb-kf.dtsi were updated. Because it needs "switching driver", not "add extra feature", it doesn't use Device-Tree overlay. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> --- .../ulcb-audio-graph-card-mix+split.dtsi | 89 ++++++++++ .../ulcb-kf-audio-graph-card-mix+split.dtsi | 162 ++++++++++++++++++ arch/arm64/boot/dts/renesas/ulcb-kf.dtsi | 1 + arch/arm64/boot/dts/renesas/ulcb.dtsi | 1 + 4 files changed, 253 insertions(+) create mode 100644 arch/arm64/boot/dts/renesas/ulcb-audio-graph-card-mix+split.dtsi create mode 100644 arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card-mix+split.dtsi 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..55acfe6c1268 --- /dev/null +++ b/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card-mix+split.dtsi @@ -0,0 +1,89 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree for ULCB + Audio Graph Card (MIX) + * + * Copyright (C) 2022 Renesas Electronics Corp. + */ + +/* + * Note: + * Because there is subdevice maximum, it will ignore HDMI output + * + * (A) CPU0 (2ch) ------ (2ch) 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) ak4613 (MIX-0) */ + &rsnd_port1 /* (B) ak4613 (MIX-1) */ + >; + }; +}; + +&ak4613 { + port { + #address-cells = <1>; + #size-cells = <0>; + + /* + * (A)/(B) ak4613 + */ + prefix = "ak4613"; + convert-rate = <48000>; + + ak4613_ep1: endpoint@0 { + reg = <0>; + remote-endpoint = <&rsnd_for_ak4613_1>; + }; + 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..92cc06353746 --- /dev/null +++ b/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card-mix+split.dtsi @@ -0,0 +1,162 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree for ULCB + Kingfisher + Audio Graph Card (MIX + TDM Split) + * + * Copyright (C) 2022 Renesas Electronics Corp. + */ + +/* + * Because it reach to subdevice maximum, it ignore HDMI + * + * (A) CPU0 (2ch) ------ (2ch) ak4613 (MIX-0) + * (B) CPU1 (2ch) --/ (MIX-1) + * (C) CPU3 (2ch) ------ (8ch) PCM3168A-p (TDM-0 : 0,1ch) + * (D) CPU2 (2ch) --/ (TDM-1 : 2,3ch) + * (E) CPU4 (2ch) --/ (TDM-2 : 4,5ch) + * (F) CPU5 (2ch) --/ (TDM-3 : 6,7ch) + * (G) CPU6 (6ch) ------ (6ch) 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) ak4613 (MIX-0) */ + &rsnd_port1 /* (B) ak4613 (MIX-1) */ + &rsnd_port2 /* (C) pcm3168a (TDM-0) */ + &rsnd_port3 /* (D) pcm3168a (TDM-1) */ + &rsnd_port4 /* (E) pcm3168a (TDM-2) */ + &rsnd_port5 /* (F) pcm3168a (TDM-3) */ + &rsnd_port6 /* (G) pcm3168a */ + >; +}; + +&pcm3168a { + ports { + #address-cells = <1>; + #size-cells = <0>; + mclk-fs = <512>; + + /* + * (C) CPU2 <-> pcm3168a (TDM-0) + * (D) CPU3 <-> pcm3168a (TDM-1) + * (E) CPU4 <-> pcm3168a (TDM-1) + * (F) CPU5 <-> pcm3168a (TDM-1) + */ + port@0 { + #address-cells = <1>; + #size-cells = <0>; + reg = <0>; + prefix = "pcm3168a"; + convert-channels = <8>; /* to 8ch TDM */ + + pcm3168a_endpoint_p1: endpoint@0 { + reg = <0>; + remote-endpoint = <&rsnd_for_pcm3168a_play1>; + clocks = <&clksndsel>; + }; + pcm3168a_endpoint_p2: endpoint@1 { + reg = <1>; + remote-endpoint = <&rsnd_for_pcm3168a_play2>; + clocks = <&clksndsel>; + }; + pcm3168a_endpoint_p3: endpoint@2 { + reg = <2>; + remote-endpoint = <&rsnd_for_pcm3168a_play3>; + clocks = <&clksndsel>; + }; + pcm3168a_endpoint_p4: endpoint@3 { + reg = <3>; + remote-endpoint = <&rsnd_for_pcm3168a_play4>; + clocks = <&clksndsel>; + }; + }; + /* + * (G) CPU6 <-> pcm3168a + */ + port@1 { + reg = <1>; + 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 <-> pcm3168a (TDM-0) + * (D) CPU3 <-> pcm3168a (TDM-1) + * (E) CPU4 <-> pcm3168a (TDM-1) + * (F) CPU5 <-> pcm3168a (TDM-1) + */ + rsnd_port2: port@2 { + reg = <2>; + rsnd_for_pcm3168a_play1: endpoint { + remote-endpoint = <&pcm3168a_endpoint_p1>; + bitclock-master; + frame-master; + playback = <&ssiu30 &ssi3>; + }; + }; + rsnd_port3: port@3 { + reg = <3>; + rsnd_for_pcm3168a_play2: endpoint { + remote-endpoint = <&pcm3168a_endpoint_p2>; + bitclock-master; + frame-master; + playback = <&ssiu31 &ssi3>; + }; + }; + rsnd_port4: port@4 { + reg = <4>; + rsnd_for_pcm3168a_play3: endpoint { + remote-endpoint = <&pcm3168a_endpoint_p3>; + bitclock-master; + frame-master; + playback = <&ssiu32 &ssi3>; + }; + }; + 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 <-> pcm3168a + */ + 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 0690c1b1b5e9..131846dde002 100644 --- a/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi +++ b/arch/arm64/boot/dts/renesas/ulcb-kf.dtsi @@ -455,6 +455,7 @@ &xhci0 { * * #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 b357267a9083..d8b0b07404ca 100644 --- a/arch/arm64/boot/dts/renesas/ulcb.dtsi +++ b/arch/arm64/boot/dts/renesas/ulcb.dtsi @@ -503,6 +503,7 @@ &usb2_phy1 { * * #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" -- 2.25.1