mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-08-05 16:54:27 +00:00

audio-graph-card2-custom-sample has many sample connections, but because ALSA card has number limition for links, it is impossible to have all samples into 1 ASoC card. Separate it and took the normal connection part. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://patch.msgid.link/87wmdo9hq0.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
396 lines
12 KiB
Text
396 lines
12 KiB
Text
// SPDX-License-Identifier: GPL-2.0
|
|
/*
|
|
* audio-graph-card2-custom-sample1.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-sample1.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
|
|
*/
|
|
/ {
|
|
audio-graph-card2-custom-sample-1 {
|
|
/*
|
|
* You can use audio-graph-card2 directly by using
|
|
*
|
|
* compatible = "audio-graph-card2";
|
|
*/
|
|
compatible = "audio-graph-card2-custom-sample";
|
|
label = "card2-custom-sample-1";
|
|
|
|
/*
|
|
* @ : used at links
|
|
*/
|
|
links = <
|
|
/*
|
|
*
|
|
* [Normal]
|
|
*
|
|
* <cpu1_0>
|
|
* cpu1_0 <-@-----> codec1_0
|
|
*/
|
|
&cpu1_0 /* CPU side only */
|
|
|
|
/*
|
|
* [Semi-Multi]
|
|
*
|
|
* CPU:Codec = 1:N
|
|
*
|
|
* <sm> +-+
|
|
* cpu1_1 <--@---->| |-> codec1_1
|
|
* | |-> codec1_2
|
|
* +-+
|
|
*/
|
|
&sm /* CPU side only */
|
|
|
|
/*
|
|
* [Multi-CPU/Codec-A]
|
|
*
|
|
* +-+ <mcpuA> +-+
|
|
* cpu1_2 <-| |<---@------>| |-> codec1_3
|
|
* cpu1_3 <-| | | |-> codec1_4
|
|
* +-+ +-+
|
|
*/
|
|
&mcpuA /* CPU side only */
|
|
|
|
/*
|
|
* [Multi-CPU/Codec-B]
|
|
*
|
|
* +-+ <mcpuB> +-+
|
|
* | |<---@------>| |
|
|
* | | | |
|
|
* cpu1_4 <-| |<---------->| |-> codec1_5
|
|
* cpu1_5 <-| |<---+------>| |-> codec1_6
|
|
* +-+ \----->| |-> codec1_7
|
|
* +-+
|
|
*/
|
|
&mcpuB /* CPU side only */
|
|
|
|
/*
|
|
* [Multi-CPU/Codec-C]
|
|
*
|
|
* +-+ <mcpuC> +-+
|
|
* | |<---@------>| |
|
|
* | | | |
|
|
* cpu1_6 <-| |<---------->| |-> codec1_8
|
|
* cpu1_7 <-| |<-----+---->| |-> codec1_9
|
|
* cpu1_8 <-| |<----/ +-+
|
|
* +-+
|
|
*/
|
|
&mcpuC /* CPU side only */
|
|
>;
|
|
|
|
multi {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
|
|
/*
|
|
* [Semi-Multi]
|
|
*
|
|
* <sm> +---+
|
|
* cpu1_1 <---@--->|X A|-> codec1_1
|
|
* | B|-> codec1_2
|
|
* +---+
|
|
*/
|
|
ports@0 {
|
|
reg = <0>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; smcodec_ep: endpoint { remote-endpoint = <&cpu1_1_ep>; };};/* (X) to pair */
|
|
port@1 { reg = <1>; smcodec_A_ep: endpoint { remote-endpoint = <&codec1_1_ep>; };};/* (A) Multi Element */
|
|
port@2 { reg = <2>; smcodec_B_ep: endpoint { remote-endpoint = <&codec1_2_ep>; };};/* (B) Multi Element */
|
|
};
|
|
|
|
/*
|
|
* [Multi-CPU-A]
|
|
*
|
|
* +---+ <mcpuA> +---+
|
|
* cpu1_2 <-|A X|<---@---->|x a|-> codec1_3
|
|
* cpu1_3 <-|B | | b|-> codec1_4
|
|
* +---+ +---+
|
|
*/
|
|
ports@1 {
|
|
reg = <1>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
mcpuA: port@0 { reg = <0>; mcpu_A_ep: endpoint { remote-endpoint = <&mcodec_A_ep>; };}; /* (X) to pair */
|
|
port@1 { reg = <1>; mcpu_AA_ep: endpoint { remote-endpoint = <&cpu1_2_ep>; };}; /* (A) Multi Element */
|
|
port@2 { reg = <2>; mcpu_AB_ep: endpoint { remote-endpoint = <&cpu1_3_ep>; };}; /* (B) Multi Element */
|
|
};
|
|
|
|
/*
|
|
* [Multi-Codec-A]
|
|
*
|
|
* +---+ <mcpuA> +---+
|
|
* cpu1_2 <-|A X|<-@------>|x a|-> codec1_3
|
|
* cpu1_3 <-|B | | b|-> codec1_4
|
|
* +---+ +---+
|
|
*/
|
|
ports@2 {
|
|
reg = <2>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 { reg = <0>; mcodec_A_ep: endpoint { remote-endpoint = <&mcpu_A_ep>; };}; /* (x) to pair */
|
|
port@1 { reg = <1>; mcodec_Aa_ep: endpoint { remote-endpoint = <&codec1_3_ep>; };}; /* (a) Multi Element */
|
|
port@2 { reg = <2>; mcodec_Ab_ep: endpoint { remote-endpoint = <&codec1_4_ep>; };}; /* (b) Multi Element */
|
|
};
|
|
|
|
/*
|
|
* [Multi-CPU-B]
|
|
*
|
|
* +---+ <mcpuB> +---+
|
|
* | X|<---@---->|x |
|
|
* | | | |
|
|
* cpu1_4 <-|A 1|<-------->|3 a|-> codec1_5
|
|
* cpu1_5 <-|B 2|<---+---->|4 b|-> codec1_6
|
|
* +---+ \--->|5 c|-> codec1_7
|
|
* +---+
|
|
*/
|
|
ports@3 {
|
|
reg = <3>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
mcpuB: port@0 {
|
|
reg = <0>;
|
|
mcpu_BX_ep: endpoint { remote-endpoint = <&mcodec_Bx_ep>; }; /* (X) to pair */
|
|
};
|
|
port@1 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <1>;
|
|
mcpu_BA_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu1_4_ep>; }; /* (A) Multi Element */
|
|
mcpu_B1_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec_B3_ep>; }; /* (1) connected Codec */
|
|
};
|
|
port@2 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <2>;
|
|
mcpu_BB_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu1_5_ep>; }; /* (B) Multi Element */
|
|
mcpu_B2_0_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec_B4_ep>; }; /* (2) connected Codec */
|
|
mcpu_B2_1_ep: endpoint@2 { reg = <2>; remote-endpoint = <&mcodec_B5_ep>; }; /* (2) connected Codec */
|
|
};
|
|
};
|
|
|
|
/*
|
|
* [Multi-Codec-B]
|
|
*
|
|
* +---+ <mcpuB> +---+
|
|
* | X|<-@------>|x |
|
|
* | | | |
|
|
* cpu1_4 <-|A 1|<-------->|3 a|-> codec1_5
|
|
* cpu1_5 <-|B 2|<---+---->|4 b|-> codec1_6
|
|
* +---+ \--->|5 c|-> codec1_7
|
|
* +---+
|
|
*/
|
|
ports@4 {
|
|
reg = <4>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 {
|
|
reg = <0>;
|
|
mcodec_Bx_ep: endpoint { remote-endpoint = <&mcpu_BX_ep>; }; /* (x) to pair */
|
|
};
|
|
port@1 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <1>;
|
|
mcodec_Ba_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec1_5_ep>;}; /* (a) Multi Element */
|
|
mcodec_B3_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu_B1_ep>; }; /* (3) connected CPU */
|
|
};
|
|
port@2 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <2>;
|
|
mcodec_Bb_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec1_6_ep>; }; /* (b) Multi Element */
|
|
mcodec_B4_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu_B2_0_ep>;}; /* (4) connected CPU */
|
|
};
|
|
port@3 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <3>;
|
|
mcodec_Bc_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec1_7_ep>; }; /* (c) Multi Element */
|
|
mcodec_B5_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu_B2_1_ep>;}; /* (5) connected CPU */
|
|
};
|
|
};
|
|
|
|
/*
|
|
* [Multi-CPU-C]
|
|
*
|
|
* +---+ <mcpuC> +---+
|
|
* | X|<-@------>|x |
|
|
* | | | |
|
|
* cpu1_6 <-|A 1|<-------->|4 a|-> codec1_8
|
|
* cpu1_7 <-|B 2|<-----+-->|5 b|-> codec1_9
|
|
* cpu1_8 <-|C 3|<----/ +---+
|
|
* +---+
|
|
*/
|
|
ports@5 {
|
|
reg = <5>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
mcpuC: port@0 {
|
|
reg = <0>;
|
|
mcpu_CX_ep: endpoint { remote-endpoint = <&mcodec_Cx_ep>; }; /* (X) to pair */
|
|
};
|
|
port@1 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <1>;
|
|
mcpu_CA_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu1_6_ep>; }; /* (A) Multi Element */
|
|
mcpu_C1_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec_C4_ep>; }; /* (1) connected Codec */
|
|
};
|
|
port@2 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <2>;
|
|
mcpu_CB_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu1_7_ep>; }; /* (B) Multi Element */
|
|
mcpu_C2_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec_C5_0_ep>; }; /* (2) connected Codec */
|
|
};
|
|
port@3 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <3>;
|
|
mcpu_CC_ep: endpoint@0 { reg = <0>; remote-endpoint = <&cpu1_8_ep>; }; /* (C) Multi Element */
|
|
mcpu_C3_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcodec_C5_1_ep>; }; /* (3) connected Codec */
|
|
};
|
|
};
|
|
|
|
/*
|
|
* [Multi-Codec-C]
|
|
*
|
|
* +---+ <mcpuC> +---+
|
|
* | X|<-@------>|x |
|
|
* | | | |
|
|
* cpu1_6 <-|A 1|<-------->|4 a|-> codec1_8
|
|
* cpu1_7 <-|B 2|<-----+-->|5 b|-> codec1_9
|
|
* cpu1_8 <-|C 3|<----/ +---+
|
|
* +---+
|
|
*/
|
|
ports@6 {
|
|
reg = <6>;
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
port@0 {
|
|
reg = <0>;
|
|
mcodec_Cx_ep: endpoint { remote-endpoint = <&mcpu_CX_ep>; }; /* (x) to pair */
|
|
};
|
|
port@1 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <1>;
|
|
mcodec_Ca_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec1_8_ep>;}; /* (a) Multi Element */
|
|
mcodec_C4_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu_C1_ep>; }; /* (4) connected CPU */
|
|
};
|
|
port@2 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
reg = <2>;
|
|
mcodec_Cb_ep: endpoint@0 { reg = <0>; remote-endpoint = <&codec1_9_ep>;}; /* (b) Multi Element */
|
|
mcodec_C5_0_ep: endpoint@1 { reg = <1>; remote-endpoint = <&mcpu_C2_ep>; }; /* (5) connected CPU */
|
|
mcodec_C5_1_ep: endpoint@2 { reg = <2>; remote-endpoint = <&mcpu_C3_ep>; }; /* (5) connected CPU */
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
test_cpu_1 {
|
|
/*
|
|
* 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] */
|
|
cpu1_0: port@0 { reg = <0>; cpu1_0_ep: endpoint { remote-endpoint = <&codec1_0_ep>;}; };
|
|
/* [Semi-Multi] */
|
|
sm: port@1 { reg = <1>; cpu1_1_ep: endpoint { remote-endpoint = <&smcodec_ep>; }; };
|
|
/* [Multi-CPU-A] */
|
|
port@2 { reg = <2>; cpu1_2_ep: endpoint { remote-endpoint = <&mcpu_AA_ep>; }; };
|
|
port@3 { reg = <3>; cpu1_3_ep: endpoint { remote-endpoint = <&mcpu_AB_ep>; }; };
|
|
/* [Multi-CPU-B] */
|
|
port@4 { reg = <4>; cpu1_4_ep: endpoint { remote-endpoint = <&mcpu_BA_ep>; }; };
|
|
port@5 { reg = <5>; cpu1_5_ep: endpoint { remote-endpoint = <&mcpu_BB_ep>; }; };
|
|
/* [Multi-CPU-C] */
|
|
port@6 { reg = <6>; cpu1_6_ep: endpoint { remote-endpoint = <&mcpu_CA_ep>; }; };
|
|
port@7 { reg = <7>; cpu1_7_ep: endpoint { remote-endpoint = <&mcpu_CB_ep>; }; };
|
|
port@8 { reg = <8>; cpu1_8_ep: endpoint { remote-endpoint = <&mcpu_CC_ep>; }; };
|
|
};
|
|
};
|
|
|
|
test_codec_1 {
|
|
/*
|
|
* 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>;
|
|
|
|
/* [Normal] */
|
|
port@0 { reg = <0>; codec1_0_ep: endpoint { remote-endpoint = <&cpu1_0_ep>; }; };
|
|
/* [Semi-Multi] */
|
|
port@1 { reg = <1>; codec1_1_ep: endpoint { remote-endpoint = <&smcodec_A_ep>; }; };
|
|
port@2 { reg = <2>; codec1_2_ep: endpoint { remote-endpoint = <&smcodec_B_ep>; }; };
|
|
/* [Multi-Codec-0] */
|
|
port@3 { reg = <3>; codec1_3_ep: endpoint { remote-endpoint = <&mcodec_Aa_ep>; }; };
|
|
port@4 { reg = <4>; codec1_4_ep: endpoint { remote-endpoint = <&mcodec_Ab_ep>; }; };
|
|
/* [Multi-Codec-1] */
|
|
port@5 { reg = <5>; codec1_5_ep: endpoint { remote-endpoint = <&mcodec_Ba_ep>; }; };
|
|
port@6 { reg = <6>; codec1_6_ep: endpoint { remote-endpoint = <&mcodec_Bb_ep>; }; };
|
|
port@7 { reg = <7>; codec1_7_ep: endpoint { remote-endpoint = <&mcodec_Bc_ep>; }; };
|
|
/* [Multi-Codec-2] */
|
|
port@8 { reg = <8>; codec1_8_ep: endpoint { remote-endpoint = <&mcodec_Ca_ep>; }; };
|
|
port@9 { reg = <9>; codec1_9_ep: endpoint { remote-endpoint = <&mcodec_Cb_ep>; }; };
|
|
};
|
|
};
|
|
};
|