On Thu, Aug 27, 2020 at 09:24:54AM +0900, Kuninori Morimoto wrote:
From: Kuninori Morimoto kuninori.morimoto.gx@renesas.com
This patch switches from .txt base to .yaml base Document.
Signed-off-by: Kuninori Morimoto kuninori.morimoto.gx@renesas.com
.../bindings/sound/audio-graph-card.txt | 337 ------------------ .../bindings/sound/audio-graph-card.yaml | 135 +++++++ .../devicetree/bindings/vendor-prefixes.yaml | 2 +- 3 files changed, 136 insertions(+), 338 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 d5f6919a2d69..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.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>;...};};};- };
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..60d7b1504128 --- /dev/null +++ b/Documentation/devicetree/bindings/sound/audio-graph-card.yaml @@ -0,0 +1,135 @@ +# 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
+definitions:
Please don't use 'definitions' unless really needed. There's only 1 reference to 'endpoint' and 'port' so you don't here.
- endpoint:
- type: object
- properties:
remote-endpoint:maxItems: 1mclk-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:
reg:maxItems: 1prefix:$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:
"^endpoint(@[0-9a-f]+)?":$ref: "#/definitions/endpoint"- ports:
- description: multi OF-Graph subnode
- type: object
- properties:
reg:maxItems: 1
'ports' never has a 'reg' property.
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"
These shouldn't be valid under 'ports' either?
- patternProperties:
"^port(@[0-9a-f]+)?":$ref: "#/definitions/port"+properties:
- compatible:
- contains:
Any other additional string is valid?
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
- 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";/* ... */
Would be good if the example used all/most of the possible properties to have at least some testing of the schema.
};};- };
- codec {
/** codec own settings*/port {codec_endpoint: endpoint {remote-endpoint = <&cpu_endpoint>;};};- };
diff --git a/Documentation/devicetree/bindings/vendor-prefixes.yaml b/Documentation/devicetree/bindings/vendor-prefixes.yaml index 63996ab03521..5ada35ddac7e 100644 --- a/Documentation/devicetree/bindings/vendor-prefixes.yaml +++ b/Documentation/devicetree/bindings/vendor-prefixes.yaml @@ -20,7 +20,7 @@ patternProperties: "^(keypad|m25p|max8952|max8997|max8998|mpmc),.*": true "^(pinctrl-single|#pinctrl-single|PowerPC),.*": true "^(pl022|pxa-mmc|rcar_sound|rotary-encoder|s5m8767|sdhci),.*": true
- "^(simple-audio-card|st-plgpio|st-spics|ts),.*": true
- "^(simple-audio-card|audio-graph-card|st-plgpio|st-spics|ts),.*": true
This isn't needed as we got rid of the silly 'audio-graph-card,' prefix.
# Keep list in alphabetical order. "^70mai,.*": -- 2.25.1