Unverified Commit 97198614 authored by Kuninori Morimoto's avatar Kuninori Morimoto Committed by Mark Brown
Browse files

ASoC: audio-graph-card: switch to yaml base Documentation



This patch switches from .txt base to .yaml base Document.

Signed-off-by: default avatarKuninori Morimoto <kuninori.morimoto.gx@renesas.com>
Acked-by: default avatarSameer Pujar <spujar@nvidia.com>
Reviewed-by: default avatarRob Herring <robh@kernel.org>
Link: https://lore.kernel.org/r/87d00sbawh.wl-kuninori.morimoto.gx@renesas.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent b8f94957
Loading
Loading
Loading
Loading
+0 −337
Original line number Diff line number Diff line
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.yaml

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>;
					...
				};
			};
		};
	};
+153 −0
Original line number Diff line number Diff line
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/audio-graph-card.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title: Audio Graph Card Driver Device Tree Bindings

maintainers:
  - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>

properties:
  compatible:
    enum:
      - audio-graph-card
      - audio-graph-scu-card

  dais:
    $ref: /schemas/types.yaml#/definitions/phandle-array
  label:
    maxItems: 1
  prefix:
    description: "device name prefix"
    $ref: /schemas/types.yaml#/definitions/string
  routing:
    description: |
      A list of the connections between audio components.
      Each entry is a pair of strings, the first being the
      connection's sink, the second being the connection's source.
    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
  widgets:
    description: User specified audio sound widgets.
    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
  convert-rate:
    description: CPU to Codec rate convert.
    $ref: /schemas/types.yaml#/definitions/uint32
  convert-channels:
    description: CPU to Codec rate channels.
    $ref: /schemas/types.yaml#/definitions/uint32
  pa-gpios:
    maxItems: 1
  hp-det-gpio:
    maxItems: 1
  mic-det-gpio:
    maxItems: 1

  port:
    description: single OF-Graph subnode
    type: object
    properties:
      reg:
        maxItems: 1
      prefix:
        description: "device name prefix"
        $ref: /schemas/types.yaml#/definitions/string
      convert-rate:
        description: CPU to Codec rate convert.
        $ref: /schemas/types.yaml#/definitions/uint32
      convert-channels:
        description: CPU to Codec rate channels.
        $ref: /schemas/types.yaml#/definitions/uint32
    patternProperties:
      "^endpoint(@[0-9a-f]+)?":
        type: object
        properties:
          remote-endpoint:
            maxItems: 1
          mclk-fs:
            description: |
              Multiplication factor between stream rate and codec mclk.
              When defined, mclk-fs property defined in dai-link sub nodes are ignored.
            $ref: /schemas/types.yaml#/definitions/uint32
          frame-inversion:
            description: dai-link uses frame clock inversion
            $ref: /schemas/types.yaml#/definitions/flag
          bitclock-inversion:
            description: dai-link uses bit clock inversion
            $ref: /schemas/types.yaml#/definitions/flag
          frame-master:
            description: Indicates dai-link frame master.
            $ref: /schemas/types.yaml#/definitions/phandle-array
            maxItems: 1
          bitclock-master:
            description: Indicates dai-link bit clock master
            $ref: /schemas/types.yaml#/definitions/phandle-array
            maxItems: 1
          dai-format:
            description: audio format.
            items:
              enum:
                - i2s
                - right_j
                - left_j
                - dsp_a
                - dsp_b
                - ac97
                - pdm
                - msb
                - lsb
          convert-rate:
            description: CPU to Codec rate convert.
            $ref: /schemas/types.yaml#/definitions/uint32
          convert-channels:
            description: CPU to Codec rate channels.
            $ref: /schemas/types.yaml#/definitions/uint32
        required:
          - remote-endpoint

  ports:
    description: multi OF-Graph subnode
    type: object
    patternProperties:
      "^port(@[0-9a-f]+)?":
        $ref: "#/properties/port"

required:
  - compatible
  - dais

additionalProperties: false

examples:
  - |
    sound {
        compatible = "audio-graph-card";

        dais = <&cpu_port_a>;
    };

    cpu {
        /*
         * dai-controller own settings
         */

        port {
            cpu_endpoint: endpoint {
                remote-endpoint = <&codec_endpoint>;
                dai-format = "left_j";
            };
        };
    };

    codec {
        /*
         * codec own settings
         */

        port {
            codec_endpoint: endpoint {
                remote-endpoint = <&cpu_endpoint>;
            };
        };
    };