mirror of
https://github.com/linux-msm/laptops-kernel.git
synced 2026-08-13 14:19:53 -07:00
ASoC: audio-graph-card2-custom-sample2.dtsi: Separate Sample DT
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 DPCM / Codec2Codec connection part. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Link: https://patch.msgid.link/87v7t89hpt.wl-kuninori.morimoto.gx@renesas.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -0,0 +1,382 @@
|
||||
// SPDX-License-Identifier: GPL-2.0
|
||||
/*
|
||||
* audio-graph-card2-custom-sample2.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-sample2.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-2 {
|
||||
/*
|
||||
* You can use audio-graph-card2 directly by using
|
||||
*
|
||||
* compatible = "audio-graph-card2";
|
||||
*/
|
||||
compatible = "audio-graph-card2-custom-sample";
|
||||
label = "card2-custom-sample-2";
|
||||
|
||||
/* for [DPCM] */
|
||||
/* BE FE */
|
||||
routing = "TC DAI0 Playback", "DAI0 Playback",
|
||||
"TC DAI0 Playback", "DAI1 Playback",
|
||||
"DAI0 Capture", "TC DAI0 Capture",
|
||||
"DAI1 Capture", "TC DAI0 Capture",
|
||||
/* for [DPCM-Multi] */
|
||||
/* BE FE */
|
||||
"TC DAI1 Playback", "DAI2 Playback",
|
||||
"TC DAI2 Playback", "DAI2 Playback",
|
||||
"TC DAI1 Playback", "DAI3 Playback",
|
||||
"TC DAI2 Playback", "DAI3 Playback",
|
||||
"DAI2 Capture", "TC DAI1 Capture",
|
||||
"DAI2 Capture", "TC DAI2 Capture",
|
||||
"DAI3 Capture", "TC DAI1 Capture",
|
||||
"DAI3 Capture", "TC DAI2 Capture",
|
||||
/* for [Codec2Codec] */
|
||||
"TC OUT", "TC DAI4 Playback",
|
||||
"TC DAI3 Capture", "TC IN",
|
||||
/* for [Codec2Codec-Multi] */
|
||||
"TC OUT", "TC DAI7 Playback",
|
||||
"TC DAI5 Capture", "TC IN",
|
||||
"TC OUT", "TC DAI8 Playback",
|
||||
"TC DAI6 Capture", "TC IN";
|
||||
|
||||
/*
|
||||
* @ : used at links
|
||||
*/
|
||||
links = <
|
||||
/*
|
||||
* [DPCM]
|
||||
*
|
||||
* cpu20/cpu21 are converting rate to 44.1kHz
|
||||
*
|
||||
* FE BE
|
||||
* <feA> **** <beA>
|
||||
* cpu2_0 <----@---* *------@---> codec2_0 (44.1kHz)
|
||||
* cpu2_1 <----@---* *
|
||||
* <feB> ****
|
||||
*/
|
||||
&feA &feB &beA /* both FE / BE */
|
||||
|
||||
/*
|
||||
* [DPCM-Multi]
|
||||
*
|
||||
* FE BE
|
||||
* <feC> **** <beB> +-+
|
||||
* cpu2_2 <----@---* *------@---> | | -> codec2_1
|
||||
* cpu2_3 <----@---* * | | -> codec2_2
|
||||
* <feD> **** +-+
|
||||
*/
|
||||
&feC &feD &beB /* both FE / BE*/
|
||||
|
||||
/*
|
||||
* [Codec2Codec]
|
||||
*
|
||||
* <c2c>
|
||||
* +-@-> codec2_3
|
||||
* |
|
||||
* +---> codec2_4
|
||||
*/
|
||||
&c2c /* CPU side only */
|
||||
|
||||
/*
|
||||
* [Codec2Codec-Multi]
|
||||
*
|
||||
* --NOTE--
|
||||
* Multi connect N:M is not supported by ASoC.
|
||||
*
|
||||
* <c2c_m> +-+
|
||||
* +---@-->| |-> codec2_5
|
||||
* | | |-> codec2_6
|
||||
* | +-+
|
||||
* | +-+
|
||||
* +------>| |-> codec2_7
|
||||
* | |-> codec2_8
|
||||
* +-+
|
||||
*/
|
||||
&c2c_m /* CPU side only */
|
||||
>;
|
||||
|
||||
multi {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/*
|
||||
* [DPCM-Multi]::BE
|
||||
*
|
||||
* FE BE
|
||||
* <feC> **** <beB> +---+
|
||||
* cpu2_2 <----@---* *------@---> |x a| -> codec2_1
|
||||
* cpu2_3 <----@---* * | b| -> codec2_2
|
||||
* <feD> **** +---+
|
||||
*/
|
||||
ports@2 {
|
||||
reg = <2>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 { reg = <0>; mbe_x_ep: endpoint { remote-endpoint = <&beB_ep>; };};/* (x) to pair */
|
||||
port@1 { reg = <1>; mbe_a_ep: endpoint { remote-endpoint = <&codec2_1_ep>; };};/* (a) Multi Element */
|
||||
port@2 { reg = <2>; mbe_b_ep: endpoint { remote-endpoint = <&codec2_2_ep>; };};/* (b) Multi Element */
|
||||
};
|
||||
|
||||
/*
|
||||
* [Codec2Codec-Multi]::CPU
|
||||
*
|
||||
* <c2c_m> c2cmf +---+
|
||||
* +---@---------->|X A|-> codec2_5
|
||||
* | | B|-> codec2_6
|
||||
* | +---+
|
||||
* | c2cmb +---+
|
||||
* +-------------->|x a|-> codec2_7
|
||||
* | b|-> codec2_8
|
||||
* +---+
|
||||
*/
|
||||
ports@3 {
|
||||
reg = <3>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 { reg = <0>; mc2c0X_ep: endpoint { remote-endpoint = <&c2cmf_ep>; };};/* (X) to pair */
|
||||
port@1 { reg = <1>; mc2c0A_ep: endpoint { remote-endpoint = <&codec2_5_ep>; };};/* (A) Multi Element */
|
||||
port@2 { reg = <2>; mc2c0B_ep: endpoint { remote-endpoint = <&codec2_6_ep>; };};/* (B) Multi Element */
|
||||
};
|
||||
|
||||
/*
|
||||
* [Codec2Codec-Multi]::Codec
|
||||
*
|
||||
* <c2c_m> c2cmf +---+
|
||||
* +---@---------->|X A|-> codec2_5
|
||||
* | | B|-> codec2_6
|
||||
* | +---+
|
||||
* | c2cmb +---+
|
||||
* +-------------->|x a|-> codec2_7
|
||||
* | b|-> codec2_8
|
||||
* +---+
|
||||
*/
|
||||
ports@4 {
|
||||
reg = <4>;
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
port@0 { reg = <0>; mc2c1x_ep: endpoint { remote-endpoint = <&c2cmb_ep>; };};/* (x) to pair */
|
||||
port@1 { reg = <1>; mc2c1a_ep: endpoint { remote-endpoint = <&codec2_7_ep>; };};/* (a) Multi Element */
|
||||
port@2 { reg = <2>; mc2c1b_ep: endpoint { remote-endpoint = <&codec2_8_ep>; };};/* (b) Multi Element */
|
||||
};
|
||||
};
|
||||
|
||||
dpcm {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/* FE part */
|
||||
ports@0 {
|
||||
reg = <0>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
/*
|
||||
* [DPCM]::FE
|
||||
*
|
||||
* FE BE
|
||||
* <feA> **** <beA>
|
||||
* cpu2_0 <----@---* *------@---> codec2_0 (44.1kHz)
|
||||
* cpu2_1 <----@---* *
|
||||
* <feB> ****
|
||||
*/
|
||||
feA: port@0 { reg = <0>; feA_ep: endpoint { remote-endpoint = <&cpu2_0_ep>; }; };
|
||||
feB: port@1 { reg = <1>; feB_ep: endpoint { remote-endpoint = <&cpu2_1_ep>; }; };
|
||||
|
||||
/*
|
||||
* [DPCM-Multi]::FE
|
||||
*
|
||||
* FE BE
|
||||
* <feC> **** <beB> +-+
|
||||
* cpu2_2 <----@---* *------@---> | | -> codec2_1
|
||||
* cpu2_3 <----@---* * | | -> codec2_2
|
||||
* <feD> **** +-+
|
||||
*/
|
||||
feC: port@2 { reg = <2>; feC_ep: endpoint { remote-endpoint = <&cpu2_2_ep>; }; };
|
||||
feD: port@3 { reg = <3>; feD_ep: endpoint { remote-endpoint = <&cpu2_3_ep>; }; };
|
||||
};
|
||||
|
||||
/* BE part */
|
||||
ports@1 {
|
||||
reg = <1>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
/*
|
||||
* [DPCM]::BE
|
||||
*
|
||||
* FE BE
|
||||
* <feA> **** <beA>
|
||||
* cpu2_0 <----@---* *------@---> codec2_0 (44.1kHz)
|
||||
* cpu2_1 <----@---* *
|
||||
* <feB> ****
|
||||
*/
|
||||
beA: port@0 { reg = <0>; beA_ep: endpoint { remote-endpoint = <&codec2_0_ep>; }; };
|
||||
|
||||
/*
|
||||
* [DPCM-Multi]::BE
|
||||
*
|
||||
* FE BE
|
||||
* <feC> **** <beB> +-------+
|
||||
* cpu2_2 <----@---* *------@---> |mbe_x | -> codec2_1
|
||||
* cpu2_3 <----@---* * | | -> codec2_2
|
||||
* <feD> **** +-------+
|
||||
*/
|
||||
beB: port@1 { reg = <1>; beB_ep: endpoint { remote-endpoint = <&mbe_x_ep>; }; };
|
||||
};
|
||||
};
|
||||
|
||||
codec2codec {
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
/*
|
||||
* [Codec2Codec]
|
||||
*
|
||||
* <c2c>
|
||||
* +-@--> codec2_3
|
||||
* |
|
||||
* +----> codec2_4
|
||||
*/
|
||||
ports@0 {
|
||||
reg = <0>;
|
||||
|
||||
#address-cells = <1>;
|
||||
#size-cells = <0>;
|
||||
|
||||
/* use default settings */
|
||||
c2c: port@0 { reg = <0>; c2cf_ep: endpoint { remote-endpoint = <&codec2_3_ep>; }; };
|
||||
port@1 { reg = <1>; c2cb_ep: endpoint { remote-endpoint = <&codec2_4_ep>; }; };
|
||||
};
|
||||
|
||||
/*
|
||||
* [Codec2Codec-Multi]
|
||||
*
|
||||
* <c2c_m> c2cmf +--------+
|
||||
* +---@---------->|mc2c0X |-> codec2_5
|
||||
* | | |-> codec2_6
|
||||
* | +--------+
|
||||
* | c2cmb +--------+
|
||||
* +-------------->|mc2c1x |-> codec2_7
|
||||
* | |-> codec2_8
|
||||
* +--------+
|
||||
*/
|
||||
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 = <&mc2c0X_ep>; }; };
|
||||
port@1 { reg = <1>; c2cmb_ep: endpoint { remote-endpoint = <&mc2c1x_ep>; }; };
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
test_cpu_2 {
|
||||
/*
|
||||
* 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;
|
||||
|
||||
/* [DPCM]::FE */
|
||||
port@0 { reg = <0>; cpu2_0_ep: endpoint { remote-endpoint = <&feA_ep>; };};
|
||||
port@1 { reg = <1>; cpu2_1_ep: endpoint { remote-endpoint = <&feB_ep>; };};
|
||||
/* [DPCM-Multi]::FE */
|
||||
port@2 { reg = <2>; cpu2_2_ep: endpoint { remote-endpoint = <&feC_ep>; };};
|
||||
port@3 { reg = <3>; cpu2_3_ep: endpoint { remote-endpoint = <&feD_ep>; };};
|
||||
};
|
||||
};
|
||||
|
||||
test_codec_2 {
|
||||
/*
|
||||
* 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";
|
||||
|
||||
/* [DPCM]::BE */
|
||||
port@0 {
|
||||
convert-rate = <44100>;
|
||||
reg = <0>; codec2_0_ep: endpoint { remote-endpoint = <&beA_ep>; };
|
||||
};
|
||||
/* [DPCM-Multi]::BE */
|
||||
port@1 { reg = <1>; codec2_1_ep: endpoint { remote-endpoint = <&mbe_a_ep>; };};
|
||||
port@2 { reg = <2>; codec2_2_ep: endpoint { remote-endpoint = <&mbe_b_ep>; };};
|
||||
/* [Codec2Codec] */
|
||||
port@3 { bitclock-master;
|
||||
frame-master;
|
||||
reg = <3>; codec2_3_ep: endpoint { remote-endpoint = <&c2cf_ep>; };};
|
||||
port@4 { reg = <4>; codec2_4_ep: endpoint { remote-endpoint = <&c2cb_ep>; };};
|
||||
/* [Codec2Codec-Multi] */
|
||||
port@5 { bitclock-master;
|
||||
frame-master;
|
||||
reg = <5>; codec2_5_ep: endpoint { remote-endpoint = <&mc2c0A_ep>; };};
|
||||
port@6 { reg = <6>; codec2_6_ep: endpoint { remote-endpoint = <&mc2c0B_ep>; };};
|
||||
port@7 { reg = <7>; codec2_7_ep: endpoint { remote-endpoint = <&mc2c1a_ep>; };};
|
||||
port@8 { reg = <8>; codec2_8_ep: endpoint { remote-endpoint = <&mc2c1b_ep>; };};
|
||||
};
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user