Message ID | 87a63qpxge.wl-kuninori.morimoto.gx@renesas.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | arm64: dts: renesas: Simple-Card / Audio-Graph-Card/Card2 dts for ULCB/KF | expand |
Hi Morimoto-san, On Wed, Dec 14, 2022 at 2:48 AM Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> wrote: > From: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> > > 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" DT setting file for ULCB/KF. > 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@renesas.com> Thanks for your patch! > --- /dev/null > +++ b/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card.dtsi > +&ak4613 { > + #sound-dai-cells = <0>; > + > + port { > + /* > + * (A) CPU0 <-> ak4613 > + */ > + ak4613_endpoint: endpoint { > + remote-endpoint = <&rsnd_for_ak4613>; > + }; > + }; > +}; > + > +&hdmi0 { > + ports { > + port@2 { > + /* > + * (B) CPU1 <-> HDMI As this is used for playback only, "CPU1 -> HDMI"? > + */ > + dw_hdmi0_snd_in: endpoint { > + remote-endpoint = <&rsnd_for_hdmi>; > + }; > + }; > + }; > +}; > + > +&rcar_sound { > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + rsnd_port0: port@0 { > + /* > + * (A) CPU0 <-> ak4613 > + */ > + reg = <0>; > + rsnd_for_ak4613: endpoint { > + remote-endpoint = <&ak4613_endpoint>; > + bitclock-master; > + frame-master; > + playback = <&ssi0>, <&src0>, <&dvc0>; > + capture = <&ssi1>, <&src1>, <&dvc1>; > + }; > + }; > + rsnd_port1: port@1 { > + /* > + * (B) CPU1 <-> HDMI CPU1 -> HDMI > + */ > + reg = <1>; > + rsnd_for_hdmi: endpoint { > + remote-endpoint = <&dw_hdmi0_snd_in>; > + bitclock-master; > + frame-master; > + playback = <&ssi2>; > + }; > + }; > + }; > +}; > --- /dev/null > +++ b/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card.dtsi > +&pcm3168a { > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + mclk-fs = <512>; > + /* > + * (C) CPU2 <-> PCM3168A-p CPU2 -> PCM3168A-p > + */ > + port@0 { > + reg = <0>; > + pcm3168a_endpoint_p: endpoint { > + remote-endpoint = <&rsnd_for_pcm3168a_play>; > + clocks = <&clksndsel>; > + }; > + }; > + /* > + * (D) CPU3 <-> PCM3168A-c As this is used for capture only, "CPU3 <- PCM3168A-c"? > + */ > + 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-p CPU2 -> PCM3168A-p > + */ > + rsnd_port2: port@2 { > + reg = <2>; > + rsnd_for_pcm3168a_play: endpoint { > + remote-endpoint = <&pcm3168a_endpoint_p>; > + bitclock-master; > + frame-master; > + dai-tdm-slot-num = <8>; > + playback = <&ssi3>; > + }; > + }; > + /* > + * (D) CPU3 <-> PCM3168A-c CPU3 <- PCM3168A-c > + */ > + rsnd_port3: port@3 { > + reg = <3>; > + rsnd_for_pcm3168a_capture: endpoint { > + remote-endpoint = <&pcm3168a_endpoint_c>; > + bitclock-master; > + frame-master; > + dai-tdm-slot-num = <6>; > + capture = <&ssi4>; > + }; > + }; > + }; > +}; Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds
diff --git a/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card.dtsi b/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card.dtsi new file mode 100644 index 000000000000..8a1ca100cef8 --- /dev/null +++ b/arch/arm64/boot/dts/renesas/ulcb-audio-graph-card.dtsi @@ -0,0 +1,85 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree for ULCB + Audio Graph Card + * + * Copyright (C) 2022 Renesas Electronics Corp. + */ + +/* + * (A) CPU0 ------ ak4613 + * (B) CPU1 ------ HDMI + * + * (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-card"; + label = "rcar-sound"; + + dais = <&rsnd_port0 /* (A) ak4613 */ + &rsnd_port1 /* (B) HDMI0 */ + >; + }; +}; + +&ak4613 { + #sound-dai-cells = <0>; + + port { + /* + * (A) CPU0 <-> ak4613 + */ + ak4613_endpoint: endpoint { + remote-endpoint = <&rsnd_for_ak4613>; + }; + }; +}; + +&hdmi0 { + ports { + port@2 { + /* + * (B) CPU1 <-> HDMI + */ + dw_hdmi0_snd_in: endpoint { + remote-endpoint = <&rsnd_for_hdmi>; + }; + }; + }; +}; + +&rcar_sound { + ports { + #address-cells = <1>; + #size-cells = <0>; + rsnd_port0: port@0 { + /* + * (A) CPU0 <-> ak4613 + */ + reg = <0>; + rsnd_for_ak4613: endpoint { + remote-endpoint = <&ak4613_endpoint>; + bitclock-master; + frame-master; + playback = <&ssi0>, <&src0>, <&dvc0>; + capture = <&ssi1>, <&src1>, <&dvc1>; + }; + }; + rsnd_port1: port@1 { + /* + * (B) CPU1 <-> HDMI + */ + reg = <1>; + rsnd_for_hdmi: endpoint { + remote-endpoint = <&dw_hdmi0_snd_in>; + bitclock-master; + frame-master; + playback = <&ssi2>; + }; + }; + }; +}; diff --git a/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card.dtsi b/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card.dtsi new file mode 100644 index 000000000000..fcdd2e949b5f --- /dev/null +++ b/arch/arm64/boot/dts/renesas/ulcb-kf-audio-graph-card.dtsi @@ -0,0 +1,88 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Device Tree for ULCB + Kingfisher + Audio Graph Card + * + * Copyright (C) 2022 Renesas Electronics Corp. + */ + +/* + * (A) CPU0 ------ ak4613 + * (B) CPU1 ------ HDMI + * (C) CPU2 ------ PCM3168A-p (8ch) + * (D) CPU3 ------ PCM3168A-c (6ch) + * + * (A) aplay -D plughw:0,0 xxx.wav + * (B) aplay -D plughw:0,1 xxx.wav + * (C) aplay -D plughw:0,2 xxx.wav + * + * (A) arecord -D plughw:0,0 xxx.wav + * (D) arecord -D plughw:0,3 xxx.wav + */ + +&sound_card { + dais = <&rsnd_port0 /* (A) ak4613 */ + &rsnd_port1 /* (B) HDMI0 */ + &rsnd_port2 /* (C) pcm3168a playback */ + &rsnd_port3 /* (D) pcm3168a capture */ + >; +}; + +&pcm3168a { + ports { + #address-cells = <1>; + #size-cells = <0>; + mclk-fs = <512>; + /* + * (C) CPU2 <-> PCM3168A-p + */ + port@0 { + reg = <0>; + pcm3168a_endpoint_p: endpoint { + remote-endpoint = <&rsnd_for_pcm3168a_play>; + clocks = <&clksndsel>; + }; + }; + /* + * (D) CPU3 <-> PCM3168A-c + */ + 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-p + */ + rsnd_port2: port@2 { + reg = <2>; + rsnd_for_pcm3168a_play: endpoint { + remote-endpoint = <&pcm3168a_endpoint_p>; + bitclock-master; + frame-master; + dai-tdm-slot-num = <8>; + playback = <&ssi3>; + }; + }; + /* + * (D) CPU3 <-> PCM3168A-c + */ + rsnd_port3: port@3 { + reg = <3>; + rsnd_for_pcm3168a_capture: endpoint { + remote-endpoint = <&pcm3168a_endpoint_c>; + bitclock-master; + frame-master; + dai-tdm-slot-num = <6>; + capture = <&ssi4>; + }; + }; + }; +};