401 lines
11 KiB
Plaintext
401 lines
11 KiB
Plaintext
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* audio-graph-card2-custom-sample.dtsi
|
|
*
|
|
* Copyright (C) 2020 Renesas Electronics Corp.
|
|
* Copyright (C) 2020 Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
|
|
*
|
|
* This sample indicates how to use audio-graph-card2 and its
|
|
* custom driver. "audio-graph-card2-custom-sample" is the custome driver
|
|
* which is using audio-graph-card2.
|
|
*
|
|
* You can easily use this sample by adding below line on your DT file,
|
|
* and add new CONFIG to your .config.
|
|
*
|
|
* #include "../../../../../sound/soc/generic/audio-graph-card2-custom-sample.dtsi"
|
|
*
|
|
* CONFIG_SND_AUDIO_GRAPH_CARD2
|
|
* CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE
|
|
* CONFIG_SND_TEST_COMPONENT
|
|
*
|
|
*
|
|
* You can indicate more detail each device behavior as debug if you modify
|
|
* "compatible" on each test-component. see below
|
|
*
|
|
* test_cpu {
|
|
* - compatible = "test-cpu";
|
|
* + compatible = "test-cpu-verbose";
|
|
* ...
|
|
* };
|
|
*
|
|
* test_codec {
|
|
* - compatible = "test-codec";
|
|
* + compatible = "test-codec-verbose";
|
|
* ...
|
|
* };
|
|
*
|
|
*
|
|
* Below sample doesn't use "format" property,
|
|
* because test-component driver (test-cpu/test-codec) is supporting
|
|
* snd_soc_dai_ops :: .auto_selectable_formats.
|
|
* see
|
|
* snd_soc_runtime_get_dai_fmt()
|
|
* linux/sound/soc/generic/test-component.c :: test_dai_formats
|
|
*/
|
|
/ {
|
|
/*
|
|
* @ : used at links
|
|
*
|
|
* [Normal]
|
|
* cpu0 <-@-----------------> codec0
|
|
*
|
|
* [Semi-Multi]
|
|
*
|
|
* CPU:Codec = 1:N
|
|
*
|
|
* +-+
|
|
* cpu7 <-@------->| |-> codec12
|
|
* | |-> codec13
|
|
* +-+
|
|
*
|
|
* [Multi-CPU/Codec]
|
|
* +-+ +-+
|
|
* cpu1 <--| |<-@--------->| |-> codec1
|
|
* cpu2 <--| | | |-> codec2
|
|
* +-+ +-+
|
|
*
|
|
* [DPCM]
|
|
*
|
|
* CPU3/CPU4 are converting rate to 44100
|
|
*
|
|
* FE BE
|
|
* ****
|
|
* cpu3 <-@--* *--@-> codec3
|
|
* cpu4 <-@--* * (44.1kHz)
|
|
* ****
|
|
*
|
|
* [DPCM-Multi]
|
|
*
|
|
* --NOTE--
|
|
* Multi-FE is not supported by ASoC.
|
|
*
|
|
* FE BE
|
|
* **** +-+
|
|
* cpu5 <-@--* *--@-> | | -> codec4
|
|
* cpu6 <-@--* * | | -> codec5
|
|
* **** +-+
|
|
*
|
|
* [Codec2Codec]
|
|
* +-@-> codec6
|
|
* |
|
|
* +---> codec7
|
|
*
|
|
* [Codec2Codec-Multi]
|
|
*
|
|
* --NOTE--
|
|
* Multi connect N:M is not supported by ASoC.
|
|
*
|
|
* +-+
|
|
* +-@->| |-> codec8
|
|
* | | |-> codec9
|
|
* | +-+
|
|
* | +-+
|
|
* +--->| |-> codec10
|
|
* | |-> codec11
|
|
* +-+
|
|
*/
|
|
audio-graph-card2-custom-sample {
|
|
/*
|
|
* You can use audio-graph-card2 directly by using
|
|
*
|
|
* compatible = "audio-graph-card2";
|
|
*/
|
|
compatible = "audio-graph-card2-custom-sample";
|
|
|
|
/* for [DPCM] */
|
|
/* BE FE */
|
|
routing = "TC DAI3 Playback", "DAI3 Playback",
|
|
"TC DAI3 Playback", "DAI4 Playback",
|
|
"DAI3 Capture", "TC DAI3 Capture",
|
|
"DAI4 Capture", "TC DAI3 Capture",
|
|
/* for [DPCM-Multi] */
|
|
/* BE FE */
|
|
"TC DAI4 Playback", "DAI5 Playback",
|
|
"TC DAI5 Playback", "DAI5 Playback",
|
|
"TC DAI4 Playback", "DAI6 Playback",
|
|
"TC DAI5 Playback", "DAI6 Playback",
|
|
"DAI5 Capture", "TC DAI4 Capture",
|
|
"DAI5 Capture", "TC DAI5 Capture",
|
|
"DAI6 Capture", "TC DAI4 Capture",
|
|
"DAI6 Capture", "TC DAI5 Capture",
|
|
/* for [Codec2Codec] */
|
|
"TC OUT", "TC DAI7 Playback",
|
|
"TC DAI6 Capture", "TC IN",
|
|
/* for [Codec2Codec-Multi] */
|
|
"TC OUT", "TC DAI10 Playback",
|
|
"TC DAI8 Capture", "TC IN",
|
|
"TC OUT", "TC DAI11 Playback",
|
|
"TC DAI9 Capture", "TC IN";
|
|
|
|
links = <
|
|
/*
|
|
* [Normal]: cpu side only
|
|
* cpu0/codec0
|
|
*/
|
|
&cpu0
|
|
|
|
/* [Semi-Multi] */
|
|
&sm0
|
|
|
|
/*
|
|
* [Multi-CPU/Codec]: cpu side only
|
|
* cpu1/cpu2/codec1/codec2
|
|
*/
|
|
&mcpu0
|
|
|
|
/*
|
|
* [DPCM]: both FE / BE
|
|
* cpu3/cpu4/codec3
|
|
*/
|
|
&fe00 &fe01 &be0
|
|
|
|
/*
|
|
* [DPCM-Multi]: both FE / BE
|
|
* cpu5/cpu6/codec4/codec5
|
|
*/
|
|
&fe10 &fe11 &be1
|
|
|
|
/*
|
|
* [Codec2Codec]: cpu side only
|
|
* codec6/codec7
|
|
*/
|
|
&c2c
|
|
|
|
/*
|
|
* [Codec2Codec-Multi]: cpu side only
|
|
* codec8/codec9/codec10/codec11
|
|
*/
|
|
&c2c_m
|
|
>;
|
|
|
|
multi {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
ports@0 {
|
|
reg = <0>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
/* [Multi-CPU] */
|
|
mcpu0: port@0 { reg = <0>; mcpu0_ep: endpoint { remote-endpoint = <&mcodec0_ep>; }; };
|
|
port@1 { reg = <1>; mcpu1_ep: endpoint { remote-endpoint = <&cpu1_ep>; }; };
|
|
port@2 { reg = <2>; mcpu2_ep: endpoint { remote-endpoint = <&cpu2_ep>; }; };
|
|
};
|
|
|
|
/* [Multi-Codec] */
|
|
ports@1 {
|
|
reg = <1>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; mcodec0_ep: endpoint { remote-endpoint = <&mcpu0_ep>; }; };
|
|
port@1 { reg = <1>; mcodec1_ep: endpoint { remote-endpoint = <&codec1_ep>; }; };
|
|
port@2 { reg = <2>; mcodec2_ep: endpoint { remote-endpoint = <&codec2_ep>; }; };
|
|
};
|
|
|
|
/* [DPCM-Multi]::BE */
|
|
ports@2 {
|
|
reg = <2>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; mbe_ep: endpoint { remote-endpoint = <&be10_ep>; }; };
|
|
port@1 { reg = <1>; mbe1_ep: endpoint { remote-endpoint = <&codec4_ep>; }; };
|
|
port@2 { reg = <2>; mbe2_ep: endpoint { remote-endpoint = <&codec5_ep>; }; };
|
|
};
|
|
|
|
/* [Codec2Codec-Multi]::CPU */
|
|
ports@3 {
|
|
reg = <3>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; mc2c0_ep: endpoint { remote-endpoint = <&c2cmf_ep>; }; };
|
|
port@1 { reg = <1>; mc2c00_ep: endpoint { remote-endpoint = <&codec8_ep>; }; };
|
|
port@2 { reg = <2>; mc2c01_ep: endpoint { remote-endpoint = <&codec9_ep>; }; };
|
|
};
|
|
|
|
/* [Codec2Codec-Multi]::Codec */
|
|
ports@4 {
|
|
reg = <4>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; mc2c1_ep: endpoint { remote-endpoint = <&c2cmb_ep>; }; };
|
|
port@1 { reg = <1>; mc2c10_ep: endpoint { remote-endpoint = <&codec10_ep>; }; };
|
|
port@2 { reg = <2>; mc2c11_ep: endpoint { remote-endpoint = <&codec11_ep>; }; };
|
|
};
|
|
|
|
/* [Semi-Multi] */
|
|
ports@5 {
|
|
reg = <5>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; smcodec0_ep: endpoint { remote-endpoint = <&cpu7_ep>; }; };
|
|
port@1 { reg = <1>; smcodec1_ep: endpoint { remote-endpoint = <&codec12_ep>; }; };
|
|
port@2 { reg = <2>; smcodec2_ep: endpoint { remote-endpoint = <&codec13_ep>; }; };
|
|
};
|
|
};
|
|
|
|
dpcm {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
ports@0 {
|
|
reg = <0>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
/* [DPCM]::FE */
|
|
fe00: port@0 { reg = <0>; fe00_ep: endpoint { remote-endpoint = <&cpu3_ep>; }; };
|
|
fe01: port@1 { reg = <1>; fe01_ep: endpoint { remote-endpoint = <&cpu4_ep>; }; };
|
|
|
|
/* [DPCM-Multi]::FE */
|
|
fe10: port@2 { reg = <2>; fe10_ep: endpoint { remote-endpoint = <&cpu5_ep>; }; };
|
|
fe11: port@3 { reg = <3>; fe11_ep: endpoint { remote-endpoint = <&cpu6_ep>; }; };
|
|
};
|
|
|
|
ports@1 {
|
|
reg = <1>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
/* [DPCM]::BE */
|
|
be0: port@0 { reg = <0>; be00_ep: endpoint { remote-endpoint = <&codec3_ep>; }; };
|
|
|
|
/* [DPCM-Multi]::BE */
|
|
be1: port@1 { reg = <1>; be10_ep: endpoint { remote-endpoint = <&mbe_ep>; }; };
|
|
};
|
|
};
|
|
|
|
codec2codec {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
/* [Codec2Codec] */
|
|
ports@0 {
|
|
reg = <0>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
/* use default settings */
|
|
c2c: port@0 { reg = <0>; c2cf_ep: endpoint { remote-endpoint = <&codec6_ep>; }; };
|
|
port@1 { reg = <1>; c2cb_ep: endpoint { remote-endpoint = <&codec7_ep>; }; };
|
|
};
|
|
|
|
/* [Codec2Codec-Multi] */
|
|
ports@1 {
|
|
reg = <1>;
|
|
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
/* use original settings */
|
|
rate = <48000>;
|
|
c2c_m: port@0 { reg = <0>; c2cmf_ep: endpoint { remote-endpoint = <&mc2c0_ep>; }; };
|
|
port@1 { reg = <1>; c2cmb_ep: endpoint { remote-endpoint = <&mc2c1_ep>; }; };
|
|
};
|
|
};
|
|
};
|
|
|
|
test_cpu {
|
|
/*
|
|
* update compatible to indicate more detail behaviour
|
|
* if you want. see test-compatible for more detail.
|
|
*
|
|
* ex)
|
|
* - compatible = "test-cpu";
|
|
* + compatible = "test-cpu-verbose";
|
|
*/
|
|
compatible = "test-cpu";
|
|
ports {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
bitclock-master;
|
|
frame-master;
|
|
/* [Normal] */
|
|
cpu0: port@0 { reg = <0>; cpu0_ep: endpoint { remote-endpoint = <&codec0_ep>; }; };
|
|
|
|
/* [Multi-CPU] */
|
|
port@1 { reg = <1>; cpu1_ep: endpoint { remote-endpoint = <&mcpu1_ep>; }; };
|
|
port@2 { reg = <2>; cpu2_ep: endpoint { remote-endpoint = <&mcpu2_ep>; }; };
|
|
|
|
/* [DPCM]::FE */
|
|
port@3 { reg = <3>; cpu3_ep: endpoint { remote-endpoint = <&fe00_ep>; }; };
|
|
port@4 { reg = <4>; cpu4_ep: endpoint { remote-endpoint = <&fe01_ep>; }; };
|
|
|
|
/* [DPCM-Multi]::FE */
|
|
port@5 { reg = <5>; cpu5_ep: endpoint { remote-endpoint = <&fe10_ep>; }; };
|
|
port@6 { reg = <6>; cpu6_ep: endpoint { remote-endpoint = <&fe11_ep>; }; };
|
|
|
|
/* [Semi-Multi] */
|
|
sm0: port@7 { reg = <7>; cpu7_ep: endpoint { remote-endpoint = <&smcodec0_ep>; }; };
|
|
};
|
|
};
|
|
|
|
test_codec {
|
|
/*
|
|
* update compatible to indicate more detail behaviour
|
|
* if you want. see test-compatible for more detail.
|
|
*
|
|
* ex)
|
|
* - compatible = "test-codec";
|
|
* + compatible = "test-codec-verbose";
|
|
*/
|
|
compatible = "test-codec";
|
|
ports {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
/*
|
|
* prefix can be added to *component*,
|
|
* see audio-graph-card2::routing
|
|
*/
|
|
prefix = "TC";
|
|
|
|
/* [Normal] */
|
|
port@0 { reg = <0>; codec0_ep: endpoint { remote-endpoint = <&cpu0_ep>; }; };
|
|
|
|
/* [Multi-Codec] */
|
|
port@1 { reg = <1>; codec1_ep: endpoint { remote-endpoint = <&mcodec1_ep>; }; };
|
|
port@2 { reg = <2>; codec2_ep: endpoint { remote-endpoint = <&mcodec2_ep>; }; };
|
|
|
|
/* [DPCM]::BE */
|
|
port@3 {
|
|
convert-rate = <44100>;
|
|
reg = <3>; codec3_ep: endpoint { remote-endpoint = <&be00_ep>; };
|
|
};
|
|
|
|
/* [DPCM-Multi]::BE */
|
|
port@4 { reg = <4>; codec4_ep: endpoint { remote-endpoint = <&mbe1_ep>; }; };
|
|
port@5 { reg = <5>; codec5_ep: endpoint { remote-endpoint = <&mbe2_ep>; }; };
|
|
|
|
/* [Codec2Codec] */
|
|
port@6 { bitclock-master;
|
|
frame-master;
|
|
reg = <6>; codec6_ep: endpoint { remote-endpoint = <&c2cf_ep>; }; };
|
|
port@7 { reg = <7>; codec7_ep: endpoint { remote-endpoint = <&c2cb_ep>; }; };
|
|
|
|
/* [Codec2Codec-Multi] */
|
|
port@8 { bitclock-master;
|
|
frame-master;
|
|
reg = <8>; codec8_ep: endpoint { remote-endpoint = <&mc2c00_ep>; }; };
|
|
port@9 { reg = <9>; codec9_ep: endpoint { remote-endpoint = <&mc2c01_ep>; }; };
|
|
port@a { reg = <10>; codec10_ep: endpoint { remote-endpoint = <&mc2c10_ep>; }; };
|
|
port@b { reg = <11>; codec11_ep: endpoint { remote-endpoint = <&mc2c11_ep>; }; };
|
|
|
|
/* [Semi-Multi] */
|
|
port@c { reg = <12>; codec12_ep: endpoint { remote-endpoint = <&smcodec1_ep>; }; };
|
|
port@d { reg = <13>; codec13_ep: endpoint { remote-endpoint = <&smcodec2_ep>; }; };
|
|
|
|
};
|
|
};
|
|
};
|