On Thu, Aug 27, 2020 at 09:24:54AM +0900, Kuninori Morimoto wrote: > From: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > > This patch switches from .txt base to .yaml base Document. > > Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@xxxxxxxxxxx> > --- > .../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@xxxxxxxxxxx> > + > +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: 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: > + reg: > + maxItems: 1 > + 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: > + "^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 >