mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
91a531e48b
audio-graph-card and audio-graph-scu-card are very similar driver, but the former is supporting normal sound card, the latter is supporting DPCM sound card. We couldn't use normal sound and DPCM sound in same sound card by audio-graph-card. This patch merges both feature into it on Documentation. Now we can use both feature on same driver. Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> Signed-off-by: Mark Brown <broonie@kernel.org>
338 lines
5.9 KiB
Plaintext
338 lines
5.9 KiB
Plaintext
Audio Graph Card:
|
|
|
|
Audio Graph Card specifies audio DAI connections of SoC <-> codec.
|
|
It is based on common bindings for device graphs.
|
|
see ${LINUX}/Documentation/devicetree/bindings/graph.txt
|
|
|
|
Basically, Audio Graph Card property is same as Simple Card.
|
|
see ${LINUX}/Documentation/devicetree/bindings/sound/simple-card.txt
|
|
|
|
Below are same as Simple-Card.
|
|
|
|
- label
|
|
- widgets
|
|
- routing
|
|
- dai-format
|
|
- frame-master
|
|
- bitclock-master
|
|
- bitclock-inversion
|
|
- frame-inversion
|
|
- mclk-fs
|
|
- hp-det-gpio
|
|
- mic-det-gpio
|
|
- dai-tdm-slot-num
|
|
- dai-tdm-slot-width
|
|
- clocks / system-clock-frequency
|
|
|
|
Required properties:
|
|
|
|
- compatible : "audio-graph-card";
|
|
- dais : list of CPU DAI port{s}
|
|
|
|
Optional properties:
|
|
- pa-gpios: GPIO used to control external amplifier.
|
|
|
|
-----------------------
|
|
Example: Single DAI case
|
|
-----------------------
|
|
|
|
sound_card {
|
|
compatible = "audio-graph-card";
|
|
|
|
dais = <&cpu_port>;
|
|
};
|
|
|
|
dai-controller {
|
|
...
|
|
cpu_port: port {
|
|
cpu_endpoint: endpoint {
|
|
remote-endpoint = <&codec_endpoint>;
|
|
|
|
dai-format = "left_j";
|
|
...
|
|
};
|
|
};
|
|
};
|
|
|
|
audio-codec {
|
|
...
|
|
port {
|
|
codec_endpoint: endpoint {
|
|
remote-endpoint = <&cpu_endpoint>;
|
|
};
|
|
};
|
|
};
|
|
|
|
-----------------------
|
|
Example: Multi DAI case
|
|
-----------------------
|
|
|
|
sound-card {
|
|
compatible = "audio-graph-card";
|
|
|
|
label = "sound-card";
|
|
|
|
dais = <&cpu_port0
|
|
&cpu_port1
|
|
&cpu_port2>;
|
|
};
|
|
|
|
audio-codec@0 {
|
|
...
|
|
port {
|
|
codec0_endpoint: endpoint {
|
|
remote-endpoint = <&cpu_endpoint0>;
|
|
};
|
|
};
|
|
};
|
|
|
|
audio-codec@1 {
|
|
...
|
|
port {
|
|
codec1_endpoint: endpoint {
|
|
remote-endpoint = <&cpu_endpoint1>;
|
|
};
|
|
};
|
|
};
|
|
|
|
audio-codec@2 {
|
|
...
|
|
port {
|
|
codec2_endpoint: endpoint {
|
|
remote-endpoint = <&cpu_endpoint2>;
|
|
};
|
|
};
|
|
};
|
|
|
|
dai-controller {
|
|
...
|
|
ports {
|
|
cpu_port0: port@0 {
|
|
cpu_endpoint0: endpoint {
|
|
remote-endpoint = <&codec0_endpoint>;
|
|
|
|
dai-format = "left_j";
|
|
...
|
|
};
|
|
};
|
|
cpu_port1: port@1 {
|
|
cpu_endpoint1: endpoint {
|
|
remote-endpoint = <&codec1_endpoint>;
|
|
|
|
dai-format = "i2s";
|
|
...
|
|
};
|
|
};
|
|
cpu_port2: port@2 {
|
|
cpu_endpoint2: endpoint {
|
|
remote-endpoint = <&codec2_endpoint>;
|
|
|
|
dai-format = "i2s";
|
|
...
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
|
|
-----------------------
|
|
Example: Sampling Rate Conversion
|
|
-----------------------
|
|
|
|
sound_card {
|
|
compatible = "audio-graph-card";
|
|
|
|
label = "sound-card";
|
|
prefix = "codec";
|
|
routing = "codec Playback", "DAI0 Playback",
|
|
"DAI0 Capture", "codec Capture";
|
|
convert-rate = <48000>;
|
|
|
|
dais = <&cpu_port>;
|
|
};
|
|
|
|
audio-codec {
|
|
...
|
|
port {
|
|
codec_endpoint: endpoint {
|
|
remote-endpoint = <&cpu_endpoint>;
|
|
};
|
|
};
|
|
};
|
|
|
|
dai-controller {
|
|
...
|
|
cpu_port: port {
|
|
cpu_endpoint: endpoint {
|
|
remote-endpoint = <&codec_endpoint>;
|
|
|
|
dai-format = "left_j";
|
|
...
|
|
};
|
|
};
|
|
};
|
|
|
|
-----------------------
|
|
Example: 2 CPU 1 Codec (Mixing)
|
|
-----------------------
|
|
|
|
sound_card {
|
|
compatible = "audio-graph-card";
|
|
|
|
label = "sound-card";
|
|
routing = "codec Playback", "DAI0 Playback",
|
|
"codec Playback", "DAI1 Playback",
|
|
"DAI0 Capture", "codec Capture";
|
|
|
|
dais = <&cpu_port>;
|
|
};
|
|
|
|
audio-codec {
|
|
...
|
|
|
|
audio-graph-card,prefix = "codec";
|
|
audio-graph-card,convert-rate = <48000>;
|
|
port {
|
|
reg = <0>;
|
|
codec_endpoint0: endpoint@0 {
|
|
remote-endpoint = <&cpu_endpoint0>;
|
|
};
|
|
codec_endpoint1: endpoint@1 {
|
|
remote-endpoint = <&cpu_endpoint1>;
|
|
};
|
|
};
|
|
};
|
|
|
|
dai-controller {
|
|
...
|
|
cpu_port: port {
|
|
cpu_endpoint0: endpoint@0 {
|
|
remote-endpoint = <&codec_endpoint0>;
|
|
|
|
dai-format = "left_j";
|
|
...
|
|
};
|
|
cpu_endpoint1: endpoint@1 {
|
|
remote-endpoint = <&codec_endpoint1>;
|
|
|
|
dai-format = "left_j";
|
|
...
|
|
};
|
|
};
|
|
};
|
|
|
|
-----------------------
|
|
Example: Multi DAI with DPCM
|
|
-----------------------
|
|
|
|
CPU0 ------ ak4613
|
|
CPU1 ------ HDMI
|
|
CPU2 ------ PCM3168A-p /* DPCM 1ch/2ch */
|
|
CPU3 --/ /* DPCM 3ch/4ch */
|
|
CPU4 --/ /* DPCM 5ch/6ch */
|
|
CPU5 --/ /* DPCM 7ch/8ch */
|
|
CPU6 ------ PCM3168A-c
|
|
|
|
sound_card: sound {
|
|
compatible = "audio-graph-card";
|
|
|
|
label = "sound-card";
|
|
|
|
routing = "pcm3168a Playback", "DAI2 Playback",
|
|
"pcm3168a Playback", "DAI3 Playback",
|
|
"pcm3168a Playback", "DAI4 Playback",
|
|
"pcm3168a Playback", "DAI5 Playback";
|
|
|
|
dais = <&snd_port0 /* ak4613 */
|
|
&snd_port1 /* HDMI0 */
|
|
&snd_port2 /* pcm3168a playback */
|
|
&snd_port3 /* pcm3168a capture */
|
|
>;
|
|
};
|
|
|
|
ak4613: codec@10 {
|
|
...
|
|
port {
|
|
ak4613_endpoint: endpoint {
|
|
remote-endpoint = <&rsnd_endpoint0>;
|
|
};
|
|
};
|
|
};
|
|
|
|
pcm3168a: audio-codec@44 {
|
|
...
|
|
audio-graph-card,prefix = "pcm3168a";
|
|
audio-graph-card,convert-channels = <8>; /* TDM Split */
|
|
ports {
|
|
port@0 {
|
|
reg = <0>;
|
|
pcm3168a_endpoint_p1: endpoint@1 {
|
|
remote-endpoint = <&rsnd_endpoint2>;
|
|
...
|
|
};
|
|
pcm3168a_endpoint_p2: endpoint@2 {
|
|
remote-endpoint = <&rsnd_endpoint3>;
|
|
...
|
|
};
|
|
pcm3168a_endpoint_p3: endpoint@3 {
|
|
remote-endpoint = <&rsnd_endpoint4>;
|
|
...
|
|
};
|
|
pcm3168a_endpoint_p4: endpoint@4 {
|
|
remote-endpoint = <&rsnd_endpoint5>;
|
|
...
|
|
};
|
|
};
|
|
port@1 {
|
|
reg = <1>;
|
|
pcm3168a_endpoint_c: endpoint {
|
|
remote-endpoint = <&rsnd_endpoint6>;
|
|
...
|
|
};
|
|
};
|
|
};
|
|
};
|
|
|
|
&sound {
|
|
ports {
|
|
snd_port0: port@0 {
|
|
rsnd_endpoint0: endpoint {
|
|
remote-endpoint = <&ak4613_endpoint>;
|
|
...
|
|
};
|
|
};
|
|
snd_port1: port@1 {
|
|
rsnd_endpoint1: endpoint {
|
|
remote-endpoint = <&dw_hdmi0_snd_in>;
|
|
...
|
|
};
|
|
};
|
|
snd_port2: port@2 {
|
|
#address-cells = <1>;
|
|
#size-cells = <0>;
|
|
rsnd_endpoint2: endpoint@2 {
|
|
remote-endpoint = <&pcm3168a_endpoint_p1>;
|
|
...
|
|
};
|
|
rsnd_endpoint3: endpoint@3 {
|
|
remote-endpoint = <&pcm3168a_endpoint_p2>;
|
|
...
|
|
};
|
|
rsnd_endpoint4: endpoint@4 {
|
|
remote-endpoint = <&pcm3168a_endpoint_p3>;
|
|
...
|
|
};
|
|
rsnd_endpoint5: endpoint@5 {
|
|
remote-endpoint = <&pcm3168a_endpoint_p4>;
|
|
...
|
|
};
|
|
};
|
|
snd_port3: port@6 {
|
|
rsnd_endpoint6: endpoint {
|
|
remote-endpoint = <&pcm3168a_endpoint_c>;
|
|
...
|
|
};
|
|
};
|
|
};
|
|
};
|