2020-04-21 05:22:02

by Kuninori Morimoto

[permalink] [raw]
Subject: [PATCH] ASoC: dt-bindings: audio-graph-card: switch to yaml base Documentation

From: Kuninori Morimoto <[email protected]>

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

Signed-off-by: Kuninori Morimoto <[email protected]>
---
.../bindings/sound/audio-graph-card.txt | 337 --------------
.../bindings/sound/audio-graph-card.yaml | 416 ++++++++++++++++++
2 files changed, 416 insertions(+), 337 deletions(-)
delete mode 100644 Documentation/devicetree/bindings/sound/audio-graph-card.txt
create mode 100644 Documentation/devicetree/bindings/sound/audio-graph-card.yaml

diff --git a/Documentation/devicetree/bindings/sound/audio-graph-card.txt b/Documentation/devicetree/bindings/sound/audio-graph-card.txt
deleted file mode 100644
index 269682619a70..000000000000
--- a/Documentation/devicetree/bindings/sound/audio-graph-card.txt
+++ /dev/null
@@ -1,337 +0,0 @@
-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>;
- ...
- };
- };
- };
- };
diff --git a/Documentation/devicetree/bindings/sound/audio-graph-card.yaml b/Documentation/devicetree/bindings/sound/audio-graph-card.yaml
new file mode 100644
index 000000000000..fd0ac87ee2ed
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/audio-graph-card.yaml
@@ -0,0 +1,416 @@
+# SPDX-License-Identifier: GPL-2.0
+%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 <[email protected]>
+
+definitions:
+ endpoint:
+ type: object
+ properties:
+ remote-endpoint:
+ maxItems: 1
+ mclk-fs:
+ $ref: "simple-card.yaml#/definitions/mclk-fs"
+ frame-inversion:
+ $ref: "simple-card.yaml#/definitions/frame-inversion"
+ bitclock-inversion:
+ $ref: "simple-card.yaml#/definitions/bitclock-inversion"
+ frame-master:
+ $ref: "simple-card.yaml#/definitions/frame-master"
+ bitclock-master:
+ $ref: "simple-card.yaml#/definitions/bitclock-master"
+ dai-format:
+ $ref: "simple-card.yaml#/definitions/format"
+ convert-rate:
+ $ref: "simple-card.yaml#/definitions/convert-rate"
+ convert-channels:
+ $ref: "simple-card.yaml#/definitions/convert-channels"
+ required:
+ - remote-endpoint
+
+ port:
+ description: single OF-Graph subnode
+ type: object
+ properties:
+ prefix:
+ $ref: "simple-card.yaml#/definitions/prefix"
+ convert-rate:
+ $ref: "simple-card.yaml#/definitions/convert-rate"
+ convert-channels:
+ $ref: "simple-card.yaml#/definitions/convert-channels"
+ endpoint:
+ $ref: "#/definitions/endpoint"
+
+ ports:
+ description: multi OF-Graph subnode
+ type: object
+ properties:
+ prefix:
+ $ref: "simple-card.yaml#/definitions/prefix"
+ convert-rate:
+ $ref: "simple-card.yaml#/definitions/convert-rate"
+ convert-channels:
+ $ref: "simple-card.yaml#/definitions/convert-channels"
+ patternProperties:
+ "^port(@[0-9a-f]+)$":
+ $ref: "#/definitions/port"
+ additionalProperties: false
+
+properties:
+ compatible:
+ contains:
+ enum:
+ - audio-graph-card
+ - audio-graph-scu-card
+
+ dais:
+ $ref: /schemas/types.yaml#/definitions/phandle-array
+ label:
+ maxItems: 1
+ prefix:
+ $ref: "simple-card.yaml#/definitions/prefix"
+ routing:
+ $ref: "simple-card.yaml#/definitions/routing"
+ widgets:
+ $ref: "simple-card.yaml#/definitions/widgets"
+ convert-rate:
+ $ref: "simple-card.yaml#/definitions/convert-rate"
+ convert-channels:
+ $ref: "simple-card.yaml#/definitions/convert-channels"
+ pa-gpios:
+ maxItems: 1
+ hp-det-gpio:
+ maxItems: 1
+ mic-det-gpio:
+ maxItems: 1
+
+required:
+ - compatible
+
+additionalProperties: false
+
+examples:
+#-----------------------
+# Single DAI (_s)
+#-----------------------
+ - |
+ sound {
+ compatible = "audio-graph-card";
+
+ dais = <&cpu_port_a>;
+ };
+
+ dai-controller {
+ /*
+ * dai-controller own settings
+ */
+
+ cpu_port_s: port {
+ cpu_endpoint_s: endpoint {
+ remote-endpoint = <&codec_endpoint_s>;
+ dai-format = "left_j";
+ /* ... */
+ };
+ };
+ };
+
+ codec {
+ /*
+ * codec own settings
+ */
+
+ port {
+ codec_endpoint_s: endpoint {
+ remote-endpoint = <&cpu_endpoint_s>;
+ };
+ };
+ };
+
+#-----------------------
+# Multi DAI (_m)
+#-----------------------
+ - |
+ sound {
+ compatible = "audio-graph-card";
+
+ label = "sound-card";
+
+ dais = <&cpu_port0
+ &cpu_port1
+ &cpu_port2>;
+ };
+
+ audio-codec@0 {
+ /*
+ * codec0 own settings
+ */
+
+ port {
+ codec_endpoint_m0: endpoint {
+ remote-endpoint = <&cpu_endpoint_m0>;
+ };
+ };
+ };
+
+ audio-codec@1 {
+ /*
+ * codec1 own settings
+ */
+
+ port {
+ codec_endpoint_m1: endpoint {
+ remote-endpoint = <&cpu_endpoint_m1>;
+ };
+ };
+ };
+
+ audio-codec@2 {
+ /*
+ * codec2 own settings
+ */
+
+ port {
+ codec_endpoint_m2: endpoint {
+ remote-endpoint = <&cpu_endpoint_m2>;
+ };
+ };
+ };
+
+ dai-controller {
+ /*
+ * dai-controller own settings
+ */
+
+ ports {
+ cpu_port_m0: port@0 {
+ cpu_endpoint_m0: endpoint {
+ remote-endpoint = <&codec_endpoint_m0>;
+ dai-format = "left_j";
+ };
+ };
+
+ cpu_port_m1: port@1 {
+ cpu_endpoint_m1: endpoint {
+ remote-endpoint = <&codec_endpoint_m1>;
+ dai-format = "i2s";
+ };
+ };
+
+ cpu_port_m2: port@2 {
+ cpu_endpoint_m2: endpoint {
+ remote-endpoint = <&codec_endpoint_m2>;
+ dai-format = "i2s";
+ };
+ };
+ };
+ };
+
+#-----------------------
+# Sampling Rate Conversion (_r)
+#-----------------------
+
+ - |
+ sound {
+ compatible = "audio-graph-card";
+
+ label = "sound-card";
+ prefix = "codec";
+ routing = "codec Playback", "DAI0 Playback",
+ "DAI0 Capture", "codec Capture";
+ convert-rate = <48000>;
+
+ dais = <&cpu_port_x>;
+ };
+
+ codec {
+ /*
+ * codec own settings
+ */
+
+ port {
+ codec_endpoint_r: endpoint {
+ remote-endpoint = <&cpu_endpoint_r>;
+ };
+ };
+ };
+
+ dai-controller {
+ /*
+ * dai-controller own settings
+ */
+
+ cpu_port_r: port {
+ cpu_endpoint_r: endpoint {
+ remote-endpoint = <&codec_endpoint_r>;
+ dai-format = "left_j";
+ };
+ };
+ };
+
+#-----------------------
+# 2 CPU 1 Codec (Mixing) (_x)
+#-----------------------
+
+ - |
+ sound {
+ compatible = "audio-graph-card";
+
+ label = "sound-card";
+ routing = "codec Playback", "DAI0 Playback",
+ "codec Playback", "DAI1 Playback",
+ "DAI0 Capture", "codec Capture";
+
+ dais = <&cpu_port_y>;
+ };
+
+ codec {
+ /*
+ * codec own settings
+ */
+
+ audio-graph-card,prefix = "codec";
+ audio-graph-card,convert-rate = <48000>;
+
+ port {
+ codec_endpoint_x0: endpoint@0 {
+ remote-endpoint = <&cpu_endpoint_x0>;
+ };
+ codec_endpoint_x1: endpoint@1 {
+ remote-endpoint = <&cpu_endpoint_x1>;
+ };
+ };
+ };
+
+ dai-controller {
+ /*
+ * dai-controller own settings
+ */
+
+ port {
+ cpu_endpoint_x0: endpoint@0 {
+ remote-endpoint = <&codec_endpoint_x0>;
+ dai-format = "left_j";
+ };
+ cpu_endpoint_x1: endpoint@1 {
+ remote-endpoint = <&codec_endpoint_x1>;
+ dai-format = "left_j";
+ };
+ };
+ };
+
+#-----------------------
+# 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 {
+ 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 {
+ /*
+ * ak4613 own settings
+ */
+
+ port {
+ ak4613_endpoint: endpoint {
+ remote-endpoint = <&rsnd_endpoint0>;
+ };
+ };
+ };
+
+ pcm3168a: audio-codec@44 {
+ /*
+ * pcm3168a own settings
+ */
+
+ audio-graph-card,prefix = "pcm3168a";
+ audio-graph-card,convert-channels = <8>; /* TDM Split */
+ ports {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ 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>;
+ };
+ };
+ };
+ };
+
+ dai-controller {
+ /*
+ * dai-controller own settings
+ */
+
+ 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 {
+ 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>;
+ };
+ };
+ };
+ };
--
2.17.1


2020-05-01 20:16:07

by Rob Herring (Arm)

[permalink] [raw]
Subject: Re: [PATCH] ASoC: dt-bindings: audio-graph-card: switch to yaml base Documentation

On Tue, Apr 21, 2020 at 02:18:15PM +0900, Kuninori Morimoto wrote:
> From: Kuninori Morimoto <[email protected]>
>
> This patch switches from .txt base to .yaml base Document.
>
> Signed-off-by: Kuninori Morimoto <[email protected]>
> ---
> .../bindings/sound/audio-graph-card.txt | 337 --------------
> .../bindings/sound/audio-graph-card.yaml | 416 ++++++++++++++++++
> 2 files changed, 416 insertions(+), 337 deletions(-)
> delete mode 100644 Documentation/devicetree/bindings/sound/audio-graph-card.txt
> create mode 100644 Documentation/devicetree/bindings/sound/audio-graph-card.yaml

This needs to be a series, so they are applied together and don't break
the tools if only the ak4613 patch is applied.

As mentioned in the other patch, I think this needs to be broken up to
multiple schemas and avoid definitions.

I'd really like to see either simple-card deprecated to use the
graph-card or drop the 'simple-card,' prefix to align the property
names.

Rob