diff mbox series

[resend] ASoC: simple-card: switch to yaml base Documentation

Message ID 87pnftsd93.wl-kuninori.morimoto.gx@renesas.com (mailing list archive)
State New, archived
Headers show
Series [resend] ASoC: simple-card: switch to yaml base Documentation | expand

Commit Message

Kuninori Morimoto Jan. 9, 2020, 12:08 a.m. UTC
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>
---
 .../devicetree/bindings/sound/simple-card.txt      | 351 ---------------
 .../devicetree/bindings/sound/simple-card.yaml     | 472 +++++++++++++++++++++
 2 files changed, 472 insertions(+), 351 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/sound/simple-card.txt
 create mode 100644 Documentation/devicetree/bindings/sound/simple-card.yaml

Comments

Rob Herring Jan. 9, 2020, 12:51 a.m. UTC | #1
On Wed, Jan 8, 2020 at 6:08 PM Kuninori Morimoto
<kuninori.morimoto.gx@renesas.com> wrote:
>

If you want things reviewed in a timely fashion, use
get_maintainers.pl and send to the right lists. Otherwise you can just
hope I happen to see it.

> 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>
> ---
>  .../devicetree/bindings/sound/simple-card.txt      | 351 ---------------
>  .../devicetree/bindings/sound/simple-card.yaml     | 472 +++++++++++++++++++++
>  2 files changed, 472 insertions(+), 351 deletions(-)
>  delete mode 100644 Documentation/devicetree/bindings/sound/simple-card.txt
>  create mode 100644 Documentation/devicetree/bindings/sound/simple-card.yaml

> diff --git a/Documentation/devicetree/bindings/sound/simple-card.yaml b/Documentation/devicetree/bindings/sound/simple-card.yaml
> new file mode 100644
> index 0000000..ac3975f
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/simple-card.yaml
> @@ -0,0 +1,472 @@
> +# SPDX-License-Identifier: GPL-2.0
> +%YAML 1.2
> +---
> +$id: http://devicetree.org/schemas/sound/simple-card.yaml#
> +$schema: http://devicetree.org/meta-schemas/core.yaml#
> +
> +title: Simple Audio Card Driver Device Tree Bindings
> +
> +maintainers:
> +  - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
> +
> +definitions:
> +
> +  frame-master:
> +    description: Indicates dai-link frame master.
> +    $ref: /schemas/types.yaml#/definitions/phandle-array
> +
> +  bitclock-master:
> +    description: Indicates dai-link bit clock master
> +    $ref: /schemas/types.yaml#/definitions/phandle-array
> +
> +  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
> +
> +  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
> +
> +  hp-det-gpio:
> +    description: |
> +      Reference to GPIO that signals when headphones are attached.
> +    $ref: /schemas/types.yaml#/definitions/phandle

*-gpio already hass  a type.

> +
> +  aux-devs:
> +    description: |
> +      List of phandles pointing to auxiliary devices, such
> +      as amplifiers, to be added to the sound card.
> +    $ref: /schemas/types.yaml#/definitions/phandle-array
> +
> +  mic-det-gpio:
> +    description: |
> +      Reference to GPIO that signals when a microphone is attached.
> +    $ref: /schemas/types.yaml#/definitions/phandle
> +
> +  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
> +
> +  prefix:
> +    description: "device name prefix"
> +    $ref: /schemas/types.yaml#/definitions/string
> +
> +  pin-switches:
> +    description: the widget names for which pin switches must be created.
> +    $ref: /schemas/types.yaml#/definitions/string-array
> +
> +  format:
> +    description: audio format.
> +    oneOf:

Don't need oneOf as there is only 1.

> +      - items:
> +          enum:
> +            - i2s
> +            - right_j
> +            - left_j
> +            - dsp_a
> +            - dsp_b
> +            - ac97
> +            - pdm
> +            - msb
> +            - lsb
> +
> +  dai:
> +    type: object
> +    properties:
> +      sound-dai:
> +        $ref: /schemas/types.yaml#/definitions/phandle-array
> +
> +      # common properties
> +      mclk-fs:
> +        $ref: "#/definitions/mclk-fs"
> +      prefix:
> +        $ref: "#/definitions/prefix"
> +      frame-inversion:
> +        $ref: "#/definitions/frame-inversion"
> +      bitclock-inversion:
> +        $ref: "#/definitions/bitclock-inversion"
> +      frame-master:
> +        $ref: /schemas/types.yaml#/definitions/flag
> +      bitclock-master:
> +        $ref: /schemas/types.yaml#/definitions/flag
> +
> +      dai-tdm-slot-num:
> +        description: see tdm-slot.txt.
> +        $ref: /schemas/types.yaml#/definitions/uint32
> +      dai-tdm-slot-width:
> +        description: see tdm-slot.txt.
> +        $ref: /schemas/types.yaml#/definitions/uint32
> +      clocks:
> +        description: |
> +          If a clock is specified and a multiplication factor is given with
> +          mclk-fs, the clock will be set to the calculated mclk frequency
> +          when the stream starts.
> +        $ref: /schemas/types.yaml#/definitions/phandle-array
> +      system-clock-frequency:
> +        description: |
> +          If a clock is specified and a multiplication factor is given with
> +          mclk-fs, the clock will be set to the calculated mclk frequency
> +          when the stream starts.
> +        $ref: /schemas/types.yaml#/definitions/uint32
> +      system-clock-direction-out:
> +        description: |
> +          specifies clock direction as 'out' on initialization.
> +          It is useful for some aCPUs with fixed clocks.
> +        $ref: /schemas/types.yaml#/definitions/flag
> +    required:
> +      - sound-dai
> +
> +properties:
> +  compatible:
> +    contains:
> +      enum:
> +        - simple-audio-card
> +        - simple-scu-audio-card
> +
> +  "#address-cells": true
> +  "#size-cells": true
> +
> +  simple-audio-card,name:
> +    description: User specified audio sound card name.
> +    $ref: /schemas/types.yaml#/definitions/string
> +
> +  simple-audio-card,widgets:
> +    description: User specified audio sound card name.
> +    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
> +
> +  simple-audio-card,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
> +
> +patternProperties:
> +  "^simple-audio-card,cpu.*":

What other names are allowed/used? '.*' leaves it wide open.

I guess it's just unit-addresses, but we really shouldn't have
unit-addresses as there aren't any 'reg' properties.

> +    description: CPU node
> +    $ref: "#/definitions/dai"

This is $ref is a description and another $ref. Just do away with 'definitions'.

> +  "^simple-audio-card,codec.*":
> +    description: CPU node
> +    $ref: "#/definitions/dai"
> +
> +  # common properties
> +  "^simple-audio-card,frame-master$":

Not a pattern. Put these under 'properties'.

> +    $ref: "#/definitions/frame-master"
> +  "^simple-audio-card,bitclock-master$":
> +    $ref: "#/definitions/bitclock-master"
> +  "^simple-audio-card,frame-inversion$":
> +    $ref: "#/definitions/frame-inversion"
> +  "^simple-audio-card,bitclock-inversion$":
> +    $ref: "#/definitions/bitclock-inversion"
> +  "^simple-audio-card,format$":
> +    $ref: "#/definitions/format"
> +  "^simple-audio-card,mclk-fs$":
> +    $ref: "#/definitions/mclk-fs"
> +  "^simple-audio-card,hp-det-gpio$":
> +    $ref: "#/definitions/hp-det-gpio"
> +  "^simple-audio-card,mic-det-gpio$":
> +    $ref: "#/definitions/mic-det-gpio"
> +  "^simple-audio-card,aux-devs$":
> +    $ref: "#/definitions/aux-devs"
> +  "^simple-audio-card,convert-rate$":
> +    $ref: "#/definitions/convert-rate"
> +  "^simple-audio-card,convert-channels$":
> +    $ref: "#/definitions/convert-channels"
> +  "^simple-audio-card,prefix$":
> +    $ref: "#/definitions/prefix"
> +  "^simple-audio-card,pin-switches$":
> +    $ref: "#/definitions/pin-switches"
> +
> +  "^simple-audio-card,dai-link":
> +    description: |
> +      Container for dai-link level properties and the CPU and CODEC sub-nodes.
> +      This container may be omitted when the card has only one DAI link.
> +    type: object
> +    properties:
> +      reg:
> +        $ref: /schemas/types.yaml#/definitions/uint32
> +
> +      # common properties
> +      frame-master:
> +        $ref: "#/definitions/frame-master"
> +      bitclock-master:
> +        $ref: "#/definitions/bitclock-master"
> +      frame-inversion:
> +        $ref: "#/definitions/frame-inversion"
> +      bitclock-inversion:
> +        $ref: "#/definitions/bitclock-inversion"
> +      format:
> +        $ref: "#/definitions/format"
> +      mclk-fs:
> +        $ref: "#/definitions/mclk-fs"
> +      hp-det-gpio:
> +        $ref: "#/definitions/hp-det-gpio"
> +      mic-det-gpio:
> +        $ref: "#/definitions/mic-det-gpio"
> +      aux-devs:
> +        $ref: "#/definitions/aux-devs"
> +      convert-rate:
> +        $ref: "#/definitions/convert-rate"
> +      convert-channels:
> +        $ref: "#/definitions/convert-channels"
> +      prefix:
> +        $ref: "#/definitions/prefix"
> +      pin-switches:
> +        $ref: "#/definitions/pin-switches"
> +
> +    patternProperties:
> +      "^cpu.*":
> +        $ref: "#/definitions/dai"
> +      "^codec.*":
> +        $ref: "#/definitions/dai"
> +    additionalProperties: false
> +
> +required:
> +  - compatible
> +
> +additionalProperties: false
> +
> +examples:
> +#--------------------
> +# single DAI link
> +#--------------------
> +  - |
> +    sound {
> +        compatible = "simple-audio-card";
> +        simple-audio-card,name = "VF610-Tower-Sound-Card";
> +        simple-audio-card,format = "left_j";
> +        simple-audio-card,bitclock-master = <&dailink0_master>;
> +        simple-audio-card,frame-master = <&dailink0_master>;
> +        simple-audio-card,widgets =
> +                "Microphone", "Microphone Jack",
> +                "Headphone", "Headphone Jack",
> +                "Speaker", "External Speaker";
> +        simple-audio-card,routing =
> +                "MIC_IN", "Microphone Jack",
> +                "Headphone Jack", "HP_OUT",
> +                "External Speaker", "LINE_OUT";
> +
> +        simple-audio-card,cpu {
> +            sound-dai = <&sh_fsi2 0>;
> +        };
> +
> +        dailink0_master: simple-audio-card,codec {
> +            sound-dai = <&ak4648>;
> +            clocks = <&osc>;
> +        };
> +    };
> +
> +#--------------------
> +# Multi DAI links
> +#--------------------
> +  - |
> +    sound {
> +        compatible = "simple-audio-card";
> +        simple-audio-card,name = "Cubox Audio";
> +
> +        #address-cells = <1>;
> +        #size-cells = <0>;
> +
> +        simple-audio-card,dai-link@0 {         /* I2S - HDMI */
> +            reg = <0>;
> +            format = "i2s";
> +            cpu {
> +                sound-dai = <&audio0>;
> +            };
> +            codec {
> +                sound-dai = <&tda998x0>;
> +            };
> +        };
> +
> +        simple-audio-card,dai-link@1 {         /* S/PDIF - HDMI */
> +            reg = <1>;
> +            cpu {
> +                sound-dai = <&audio1>;
> +            };
> +            codec {
> +                sound-dai = <&tda998x1>;
> +            };
> +        };
> +
> +        simple-audio-card,dai-link@2 {         /* S/PDIF - S/PDIF */
> +            reg = <2>;
> +            cpu {
> +                sound-dai = <&audio2>;
> +            };
> +            codec {
> +                sound-dai = <&spdif_codec>;
> +            };
> +        };
> +    };
> +
> +#--------------------
> +# route audio from IMX6 SSI2 through TLV320DAC3100 codec
> +# through TPA6130A2 amplifier to headphones:
> +#--------------------
> +  - |
> +    sound {
> +        compatible = "simple-audio-card";
> +
> +        simple-audio-card,widgets =
> +            "Headphone", "Headphone Jack";
> +        simple-audio-card,routing =
> +            "Headphone Jack", "HPLEFT",
> +            "Headphone Jack", "HPRIGHT",
> +            "LEFTIN", "HPL",
> +            "RIGHTIN", "HPR";
> +        simple-audio-card,aux-devs = <&amp>;
> +        simple-audio-card,cpu {
> +            sound-dai = <&ssi2>;
> +        };
> +        simple-audio-card,codec {
> +            sound-dai = <&codec>;
> +            clocks = <&clocks>;
> +        };
> +    };
> +
> +#--------------------
> +# Sampling Rate Conversion
> +#--------------------
> +  - |
> +    sound {
> +        compatible = "simple-audio-card";
> +
> +        simple-audio-card,name = "rsnd-ak4643";
> +        simple-audio-card,format = "left_j";
> +        simple-audio-card,bitclock-master = <&sndcodec>;
> +        simple-audio-card,frame-master = <&sndcodec>;
> +
> +        simple-audio-card,convert-rate = <48000>;
> +
> +        simple-audio-card,prefix = "ak4642";
> +        simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
> +                                    "DAI0 Capture", "ak4642 Capture";
> +
> +        sndcpu: simple-audio-card,cpu {
> +            sound-dai = <&rcar_sound>;
> +        };
> +
> +        sndcodec: simple-audio-card,codec {
> +            sound-dai = <&ak4643>;
> +            system-clock-frequency = <11289600>;
> +        };
> +    };
> +
> +#--------------------
> +# 2 CPU 1 Codec (Mixing)
> +#--------------------
> +  - |
> +    sound {
> +        compatible = "simple-audio-card";
> +
> +        simple-audio-card,name = "rsnd-ak4643";
> +        simple-audio-card,format = "left_j";
> +        simple-audio-card,bitclock-master = <&dpcmcpu>;
> +        simple-audio-card,frame-master = <&dpcmcpu>;
> +
> +        simple-audio-card,convert-rate = <48000>;
> +        simple-audio-card,convert-channels = <2>;
> +
> +        simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
> +                                    "ak4642 Playback", "DAI1 Playback";
> +
> +        dpcmcpu: simple-audio-card,cpu@0 {
> +            sound-dai = <&rcar_sound 0>;
> +        };
> +
> +        simple-audio-card,cpu@1 {
> +            sound-dai = <&rcar_sound 1>;
> +        };
> +
> +        simple-audio-card,codec {
> +            prefix = "ak4642";
> +            sound-dai = <&ak4643>;
> +            clocks = <&audio_clock>;
> +        };
> +    };
> +
> +#--------------------
> +# Multi DAI links with DPCM:
> +#
> +# CPU0 ------ ak4613
> +# CPU1 ------ PCM3168A-p  /* DPCM 1ch/2ch */
> +# CPU2 --/                /* DPCM 3ch/4ch */
> +# CPU3 --/                /* DPCM 5ch/6ch */
> +# CPU4 --/                /* DPCM 7ch/8ch */
> +# CPU5 ------ PCM3168A-c
> +#--------------------
> +  - |
> +    sound {
> +        compatible = "simple-audio-card";
> +
> +        simple-audio-card,routing =
> +            "pcm3168a Playback", "DAI1 Playback",
> +            "pcm3168a Playback", "DAI2 Playback",
> +            "pcm3168a Playback", "DAI3 Playback",
> +            "pcm3168a Playback", "DAI4 Playback";
> +
> +        simple-audio-card,dai-link@0 {
> +            format = "left_j";
> +            bitclock-master = <&sndcpu0>;
> +            frame-master = <&sndcpu0>;
> +
> +            sndcpu0: cpu {
> +                sound-dai = <&rcar_sound 0>;
> +            };
> +            codec {
> +                sound-dai = <&ak4613>;
> +            };
> +        };
> +
> +        simple-audio-card,dai-link@1 {
> +            format = "i2s";
> +            bitclock-master = <&sndcpu1>;
> +            frame-master = <&sndcpu1>;
> +
> +            convert-channels = <8>; /* TDM Split */
> +
> +            sndcpu1: cpu@0 {
> +                sound-dai = <&rcar_sound 1>;
> +            };
> +            cpu@1 {
> +                sound-dai = <&rcar_sound 2>;
> +            };
> +            cpu@2 {
> +                sound-dai = <&rcar_sound 3>;
> +            };
> +            cpu@3 {
> +                sound-dai = <&rcar_sound 4>;
> +            };
> +            codec {
> +                mclk-fs = <512>;
> +                prefix = "pcm3168a";
> +                dai-tdm-slot-num = <8>;
> +                sound-dai = <&pcm3168a 0>;
> +            };
> +        };
> +
> +        simple-audio-card,dai-link@2 {
> +            format = "i2s";
> +            bitclock-master = <&sndcpu2>;
> +            frame-master = <&sndcpu2>;
> +
> +            sndcpu2: cpu {
> +                sound-dai = <&rcar_sound 5>;
> +            };
> +            codec {
> +                mclk-fs = <512>;
> +                prefix = "pcm3168a";
> +                sound-dai = <&pcm3168a 1>;
> +            };
> +        };
> +    };
> --
> 2.7.4
>
Kuninori Morimoto Jan. 9, 2020, 5:55 a.m. UTC | #2
Hi Rob

Thank you for reviewing

> If you want things reviewed in a timely fashion, use
> get_maintainers.pl and send to the right lists. Otherwise you can just
> hope I happen to see it.

OK, will do from now.

> > +    description: CPU node
> > +    $ref: "#/definitions/dai"
> 
> This is $ref is a description and another $ref. Just do away with 'definitions'.

Sorry, but I don't understand about this.
Do you mean like this ?
	
    description: CPU node
    $ref: "#/dai"

> > patternProperties:
(snip)
> > +  # common properties
> > +  "^simple-audio-card,frame-master$":
> 
> Not a pattern. Put these under 'properties'.

I put it here because it doesn't work
if I put it under "properties".
I'm not 100% understanding, but it seems
using "," at property and "#/definitions/xxx" in the same time
is the reason.

This works for me

	definitions:
	  ...
	  frame-master:
	    description: Indicates dai-link frame master.
	    $ref: /schemas/types.yaml#/definitions/phandle-array
	  ...	  

	patternProperties:
	  ...
	  "^simple-audio-card,frame-master$":
	  $ref: "#/definitions/frame-master"

This works too

	properties:
	  ...
	  simple-audio-card,frame-master:
	    description: Indicates dai-link frame master.
	    $ref: /schemas/types.yaml#/definitions/phandle-array

But, this doesn't work

	properties:
	  ...
	  simple-audio-card,frame-master:
	    $ref: "#/definitions/frame-master"

How to solve it ??

Thank you for your help !!
Best regards
---
Kuninori Morimoto
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/sound/simple-card.txt b/Documentation/devicetree/bindings/sound/simple-card.txt
deleted file mode 100644
index 79954cd6..0000000
--- a/Documentation/devicetree/bindings/sound/simple-card.txt
+++ /dev/null
@@ -1,351 +0,0 @@ 
-Simple-Card:
-
-Simple-Card specifies audio DAI connections of SoC <-> codec.
-
-Required properties:
-
-- compatible				: "simple-audio-card"
-
-Optional properties:
-
-- simple-audio-card,name		: User specified audio sound card name, one string
-					  property.
-- simple-audio-card,widgets		: Please refer to widgets.txt.
-- simple-audio-card,routing		: 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.
-- simple-audio-card,mclk-fs             : Multiplication factor between stream rate and codec
-					  mclk. When defined, mclk-fs property defined in
-					  dai-link sub nodes are ignored.
-- simple-audio-card,hp-det-gpio		: Reference to GPIO that signals when
-					  headphones are attached.
-- simple-audio-card,mic-det-gpio	: Reference to GPIO that signals when
-					  a microphone is attached.
-- simple-audio-card,aux-devs		: List of phandles pointing to auxiliary devices, such
-					  as amplifiers, to be added to the sound card.
-- simple-audio-card,pin-switches	: List of strings containing the widget names for
-					  which pin switches must be created.
-
-Optional subnodes:
-
-- simple-audio-card,dai-link		: Container for dai-link level
-					  properties and the CPU and CODEC
-					  sub-nodes. This container may be
-					  omitted when the card has only one
-					  DAI link. See the examples and the
-					  section below.
-
-Dai-link subnode properties and subnodes:
-
-If dai-link subnode is omitted and the subnode properties are directly
-under "sound"-node the subnode property and subnode names have to be
-prefixed with "simple-audio-card,"-prefix.
-
-Required dai-link subnodes:
-
-- cpu					: CPU   sub-node
-- codec					: CODEC sub-node
-
-Optional dai-link subnode properties:
-
-- format				: CPU/CODEC common audio format.
-					  "i2s", "right_j", "left_j" , "dsp_a"
-					  "dsp_b", "ac97", "pdm", "msb", "lsb"
-- frame-master				: Indicates dai-link frame master.
-					  phandle to a cpu or codec subnode.
-- bitclock-master			: Indicates dai-link bit clock master.
-					  phandle to a cpu or codec subnode.
-- bitclock-inversion			: bool property. Add this if the
-					  dai-link uses bit clock inversion.
-- frame-inversion			: bool property. Add this if the
-					  dai-link uses frame clock inversion.
-- mclk-fs             			: Multiplication factor between stream
-					  rate and codec mclk, applied only for
-					  the dai-link.
-
-For backward compatibility the frame-master and bitclock-master
-properties can be used as booleans in codec subnode to indicate if the
-codec is the dai-link frame or bit clock master. In this case there
-should be no dai-link node, the same properties should not be present
-at sound-node level, and the bitclock-inversion and frame-inversion
-properties should also be placed in the codec node if needed.
-
-Required CPU/CODEC subnodes properties:
-
-- sound-dai				: phandle and port of CPU/CODEC
-
-Optional CPU/CODEC subnodes properties:
-
-- dai-tdm-slot-num			: Please refer to tdm-slot.txt.
-- dai-tdm-slot-width			: Please refer to tdm-slot.txt.
-- clocks / system-clock-frequency	: specify subnode's clock if needed.
-					  it can be specified via "clocks" if system has
-					  clock node (= common clock), or "system-clock-frequency"
-					  (if system doens't support common clock)
-					  If a clock is specified, it is
-					  enabled with clk_prepare_enable()
-					  in dai startup() and disabled with
-					  clk_disable_unprepare() in dai
-					  shutdown().
-					  If a clock is specified and a
-					  multiplication factor is given with
-					  mclk-fs, the clock will be set to the
-					  calculated mclk frequency when the
-					  stream starts.
-- system-clock-direction-out		: specifies clock direction as 'out' on
-					  initialization. It is useful for some aCPUs with
-					  fixed clocks.
-
--------------------------------------------
-Example 1 - single DAI link:
--------------------------------------------
-
-sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,name = "VF610-Tower-Sound-Card";
-	simple-audio-card,format = "left_j";
-	simple-audio-card,bitclock-master = <&dailink0_master>;
-	simple-audio-card,frame-master = <&dailink0_master>;
-	simple-audio-card,widgets =
-		"Microphone", "Microphone Jack",
-		"Headphone", "Headphone Jack",
-		"Speaker", "External Speaker";
-	simple-audio-card,routing =
-		"MIC_IN", "Microphone Jack",
-		"Headphone Jack", "HP_OUT",
-		"External Speaker", "LINE_OUT";
-
-	simple-audio-card,cpu {
-		sound-dai = <&sh_fsi2 0>;
-	};
-
-	dailink0_master: simple-audio-card,codec {
-		sound-dai = <&ak4648>;
-		clocks = <&osc>;
-	};
-};
-
-&i2c0 {
-	ak4648: ak4648@12 {
-		#sound-dai-cells = <0>;
-		compatible = "asahi-kasei,ak4648";
-		reg = <0x12>;
-	};
-};
-
-sh_fsi2: sh_fsi2@ec230000 {
-	#sound-dai-cells = <1>;
-	compatible = "renesas,sh_fsi2";
-	reg = <0xec230000 0x400>;
-	interrupt-parent = <&gic>;
-	interrupts = <0 146 0x4>;
-};
-
--------------------------------------------
-Example 2 - many DAI links:
--------------------------------------------
-
-sound {
-	compatible = "simple-audio-card";
-	simple-audio-card,name = "Cubox Audio";
-
-	simple-audio-card,dai-link@0 {		/* I2S - HDMI */
-		reg = <0>;
-		format = "i2s";
-		cpu {
-			sound-dai = <&audio1 0>;
-		};
-		codec {
-			sound-dai = <&tda998x 0>;
-		};
-	};
-
-	simple-audio-card,dai-link@1 {		/* S/PDIF - HDMI */
-		reg = <1>;
-		cpu {
-			sound-dai = <&audio1 1>;
-		};
-		codec {
-			sound-dai = <&tda998x 1>;
-		};
-	};
-
-	simple-audio-card,dai-link@2 {		/* S/PDIF - S/PDIF */
-		reg = <2>;
-		cpu {
-			sound-dai = <&audio1 1>;
-		};
-		codec {
-			sound-dai = <&spdif_codec>;
-		};
-	};
-};
-
--------------------------------------------
-Example 3 - route audio from IMX6 SSI2 through TLV320DAC3100 codec
-through TPA6130A2 amplifier to headphones:
--------------------------------------------
-
-&i2c0 {
-	codec: tlv320dac3100@18 {
-		compatible = "ti,tlv320dac3100";
-		...
-	}
-
-	amp: tpa6130a2@60 {
-		compatible = "ti,tpa6130a2";
-		...
-	}
-}
-
-sound {
-	compatible = "simple-audio-card";
-	...
-	simple-audio-card,widgets =
-		"Headphone", "Headphone Jack";
-	simple-audio-card,routing =
-		"Headphone Jack", "HPLEFT",
-		"Headphone Jack", "HPRIGHT",
-		"LEFTIN", "HPL",
-		"RIGHTIN", "HPR";
-	simple-audio-card,aux-devs = <&amp>;
-	simple-audio-card,cpu {
-		sound-dai = <&ssi2>;
-	};
-	simple-audio-card,codec {
-		sound-dai = <&codec>;
-		clocks = ...
-	};
-};
-
--------------------------------------------
-Example 4. Sampling Rate Conversion
--------------------------------------------
-
-sound {
-	compatible = "simple-audio-card";
-
-	simple-audio-card,name = "rsnd-ak4643";
-	simple-audio-card,format = "left_j";
-	simple-audio-card,bitclock-master = <&sndcodec>;
-	simple-audio-card,frame-master = <&sndcodec>;
-
-	simple-audio-card,convert-rate = <48000>;
-
-	simple-audio-card,prefix = "ak4642";
-	simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
-			"DAI0 Capture", "ak4642 Capture";
-
-	sndcpu: simple-audio-card,cpu {
-		sound-dai = <&rcar_sound>;
-	};
-
-	sndcodec: simple-audio-card,codec {
-		sound-dai = <&ak4643>;
-		system-clock-frequency = <11289600>;
-	};
-};
-
--------------------------------------------
-Example 5. 2 CPU 1 Codec (Mixing)
--------------------------------------------
-sound {
-	compatible = "simple-audio-card";
-
-	simple-audio-card,name = "rsnd-ak4643";
-	simple-audio-card,format = "left_j";
-	simple-audio-card,bitclock-master = <&dpcmcpu>;
-	simple-audio-card,frame-master = <&dpcmcpu>;
-
-	simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
-			"ak4642 Playback", "DAI1 Playback";
-
-	dpcmcpu: cpu@0 {
-		sound-dai = <&rcar_sound 0>;
-	};
-
-	cpu@1 {
-		sound-dai = <&rcar_sound 1>;
-	};
-
-	codec {
-		prefix = "ak4642";
-		sound-dai = <&ak4643>;
-		clocks = <&audio_clock>;
-	};
-};
-
--------------------------------------------
-Example 6 - many DAI links with DPCM:
--------------------------------------------
-
-CPU0 ------ ak4613
-CPU1 ------ PCM3168A-p  /* DPCM 1ch/2ch */
-CPU2 --/                /* DPCM 3ch/4ch */
-CPU3 --/                /* DPCM 5ch/6ch */
-CPU4 --/                /* DPCM 7ch/8ch */
-CPU5 ------ PCM3168A-c
-
-sound {
-	compatible = "simple-audio-card";
-
-	simple-audio-card,routing =
-		  "pcm3168a Playback", "DAI1 Playback",
-		  "pcm3168a Playback", "DAI2 Playback",
-		  "pcm3168a Playback", "DAI3 Playback",
-		  "pcm3168a Playback", "DAI4 Playback";
-
-	simple-audio-card,dai-link@0 {
-		format = "left_j";
-		bitclock-master = <&sndcpu0>;
-		frame-master = <&sndcpu0>;
-
-		sndcpu0: cpu {
-			sound-dai = <&rcar_sound 0>;
-		};
-		codec {
-			sound-dai = <&ak4613>;
-		};
-	};
-	simple-audio-card,dai-link@1 {
-		format = "i2s";
-		bitclock-master = <&sndcpu1>;
-		frame-master = <&sndcpu1>;
-
-		convert-channels = <8>; /* TDM Split */
-
-		sndcpu1: cpu@0 {
-			sound-dai = <&rcar_sound 1>;
-		};
-		cpu@1 {
-			sound-dai = <&rcar_sound 2>;
-		};
-		cpu@2 {
-			sound-dai = <&rcar_sound 3>;
-		};
-		cpu@3 {
-			sound-dai = <&rcar_sound 4>;
-		};
-		codec {
-			mclk-fs = <512>;
-			prefix = "pcm3168a";
-			dai-tdm-slot-num = <8>;
-			sound-dai = <&pcm3168a 0>;
-		};
-	};
-	simple-audio-card,dai-link@2 {
-		format = "i2s";
-		bitclock-master = <&sndcpu2>;
-		frame-master = <&sndcpu2>;
-
-		sndcpu2: cpu {
-			sound-dai = <&rcar_sound 5>;
-		};
-		codec {
-			mclk-fs = <512>;
-			prefix = "pcm3168a";
-			sound-dai = <&pcm3168a 1>;
-		};
-	};
-};
diff --git a/Documentation/devicetree/bindings/sound/simple-card.yaml b/Documentation/devicetree/bindings/sound/simple-card.yaml
new file mode 100644
index 0000000..ac3975f
--- /dev/null
+++ b/Documentation/devicetree/bindings/sound/simple-card.yaml
@@ -0,0 +1,472 @@ 
+# SPDX-License-Identifier: GPL-2.0
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/sound/simple-card.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Simple Audio Card Driver Device Tree Bindings
+
+maintainers:
+  - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com>
+
+definitions:
+
+  frame-master:
+    description: Indicates dai-link frame master.
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+
+  bitclock-master:
+    description: Indicates dai-link bit clock master
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+
+  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
+
+  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
+
+  hp-det-gpio:
+    description: |
+      Reference to GPIO that signals when headphones are attached.
+    $ref: /schemas/types.yaml#/definitions/phandle
+
+  aux-devs:
+    description: |
+      List of phandles pointing to auxiliary devices, such
+      as amplifiers, to be added to the sound card.
+    $ref: /schemas/types.yaml#/definitions/phandle-array
+
+  mic-det-gpio:
+    description: |
+      Reference to GPIO that signals when a microphone is attached.
+    $ref: /schemas/types.yaml#/definitions/phandle
+
+  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
+
+  prefix:
+    description: "device name prefix"
+    $ref: /schemas/types.yaml#/definitions/string
+
+  pin-switches:
+    description: the widget names for which pin switches must be created.
+    $ref: /schemas/types.yaml#/definitions/string-array
+
+  format:
+    description: audio format.
+    oneOf:
+      - items:
+          enum:
+            - i2s
+            - right_j
+            - left_j
+            - dsp_a
+            - dsp_b
+            - ac97
+            - pdm
+            - msb
+            - lsb
+
+  dai:
+    type: object
+    properties:
+      sound-dai:
+        $ref: /schemas/types.yaml#/definitions/phandle-array
+
+      # common properties
+      mclk-fs:
+        $ref: "#/definitions/mclk-fs"
+      prefix:
+        $ref: "#/definitions/prefix"
+      frame-inversion:
+        $ref: "#/definitions/frame-inversion"
+      bitclock-inversion:
+        $ref: "#/definitions/bitclock-inversion"
+      frame-master:
+        $ref: /schemas/types.yaml#/definitions/flag
+      bitclock-master:
+        $ref: /schemas/types.yaml#/definitions/flag
+
+      dai-tdm-slot-num:
+        description: see tdm-slot.txt.
+        $ref: /schemas/types.yaml#/definitions/uint32
+      dai-tdm-slot-width:
+        description: see tdm-slot.txt.
+        $ref: /schemas/types.yaml#/definitions/uint32
+      clocks:
+        description: |
+          If a clock is specified and a multiplication factor is given with
+          mclk-fs, the clock will be set to the calculated mclk frequency
+          when the stream starts.
+        $ref: /schemas/types.yaml#/definitions/phandle-array
+      system-clock-frequency:
+        description: |
+          If a clock is specified and a multiplication factor is given with
+          mclk-fs, the clock will be set to the calculated mclk frequency
+          when the stream starts.
+        $ref: /schemas/types.yaml#/definitions/uint32
+      system-clock-direction-out:
+        description: |
+          specifies clock direction as 'out' on initialization.
+          It is useful for some aCPUs with fixed clocks.
+        $ref: /schemas/types.yaml#/definitions/flag
+    required:
+      - sound-dai
+
+properties:
+  compatible:
+    contains:
+      enum:
+        - simple-audio-card
+        - simple-scu-audio-card
+
+  "#address-cells": true
+  "#size-cells": true
+
+  simple-audio-card,name:
+    description: User specified audio sound card name.
+    $ref: /schemas/types.yaml#/definitions/string
+
+  simple-audio-card,widgets:
+    description: User specified audio sound card name.
+    $ref: /schemas/types.yaml#/definitions/non-unique-string-array
+
+  simple-audio-card,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
+
+patternProperties:
+  "^simple-audio-card,cpu.*":
+    description: CPU node
+    $ref: "#/definitions/dai"
+  "^simple-audio-card,codec.*":
+    description: CPU node
+    $ref: "#/definitions/dai"
+
+  # common properties
+  "^simple-audio-card,frame-master$":
+    $ref: "#/definitions/frame-master"
+  "^simple-audio-card,bitclock-master$":
+    $ref: "#/definitions/bitclock-master"
+  "^simple-audio-card,frame-inversion$":
+    $ref: "#/definitions/frame-inversion"
+  "^simple-audio-card,bitclock-inversion$":
+    $ref: "#/definitions/bitclock-inversion"
+  "^simple-audio-card,format$":
+    $ref: "#/definitions/format"
+  "^simple-audio-card,mclk-fs$":
+    $ref: "#/definitions/mclk-fs"
+  "^simple-audio-card,hp-det-gpio$":
+    $ref: "#/definitions/hp-det-gpio"
+  "^simple-audio-card,mic-det-gpio$":
+    $ref: "#/definitions/mic-det-gpio"
+  "^simple-audio-card,aux-devs$":
+    $ref: "#/definitions/aux-devs"
+  "^simple-audio-card,convert-rate$":
+    $ref: "#/definitions/convert-rate"
+  "^simple-audio-card,convert-channels$":
+    $ref: "#/definitions/convert-channels"
+  "^simple-audio-card,prefix$":
+    $ref: "#/definitions/prefix"
+  "^simple-audio-card,pin-switches$":
+    $ref: "#/definitions/pin-switches"
+
+  "^simple-audio-card,dai-link":
+    description: |
+      Container for dai-link level properties and the CPU and CODEC sub-nodes.
+      This container may be omitted when the card has only one DAI link.
+    type: object
+    properties:
+      reg:
+        $ref: /schemas/types.yaml#/definitions/uint32
+
+      # common properties
+      frame-master:
+        $ref: "#/definitions/frame-master"
+      bitclock-master:
+        $ref: "#/definitions/bitclock-master"
+      frame-inversion:
+        $ref: "#/definitions/frame-inversion"
+      bitclock-inversion:
+        $ref: "#/definitions/bitclock-inversion"
+      format:
+        $ref: "#/definitions/format"
+      mclk-fs:
+        $ref: "#/definitions/mclk-fs"
+      hp-det-gpio:
+        $ref: "#/definitions/hp-det-gpio"
+      mic-det-gpio:
+        $ref: "#/definitions/mic-det-gpio"
+      aux-devs:
+        $ref: "#/definitions/aux-devs"
+      convert-rate:
+        $ref: "#/definitions/convert-rate"
+      convert-channels:
+        $ref: "#/definitions/convert-channels"
+      prefix:
+        $ref: "#/definitions/prefix"
+      pin-switches:
+        $ref: "#/definitions/pin-switches"
+
+    patternProperties:
+      "^cpu.*":
+        $ref: "#/definitions/dai"
+      "^codec.*":
+        $ref: "#/definitions/dai"
+    additionalProperties: false
+
+required:
+  - compatible
+
+additionalProperties: false
+
+examples:
+#--------------------
+# single DAI link
+#--------------------
+  - |
+    sound {
+        compatible = "simple-audio-card";
+        simple-audio-card,name = "VF610-Tower-Sound-Card";
+        simple-audio-card,format = "left_j";
+        simple-audio-card,bitclock-master = <&dailink0_master>;
+        simple-audio-card,frame-master = <&dailink0_master>;
+        simple-audio-card,widgets =
+                "Microphone", "Microphone Jack",
+                "Headphone", "Headphone Jack",
+                "Speaker", "External Speaker";
+        simple-audio-card,routing =
+                "MIC_IN", "Microphone Jack",
+                "Headphone Jack", "HP_OUT",
+                "External Speaker", "LINE_OUT";
+
+        simple-audio-card,cpu {
+            sound-dai = <&sh_fsi2 0>;
+        };
+
+        dailink0_master: simple-audio-card,codec {
+            sound-dai = <&ak4648>;
+            clocks = <&osc>;
+        };
+    };
+
+#--------------------
+# Multi DAI links
+#--------------------
+  - |
+    sound {
+        compatible = "simple-audio-card";
+        simple-audio-card,name = "Cubox Audio";
+
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        simple-audio-card,dai-link@0 {		/* I2S - HDMI */
+            reg = <0>;
+            format = "i2s";
+            cpu {
+                sound-dai = <&audio0>;
+            };
+            codec {
+                sound-dai = <&tda998x0>;
+            };
+        };
+
+        simple-audio-card,dai-link@1 {		/* S/PDIF - HDMI */
+            reg = <1>;
+            cpu {
+                sound-dai = <&audio1>;
+            };
+            codec {
+                sound-dai = <&tda998x1>;
+            };
+        };
+
+        simple-audio-card,dai-link@2 {		/* S/PDIF - S/PDIF */
+            reg = <2>;
+            cpu {
+                sound-dai = <&audio2>;
+            };
+            codec {
+                sound-dai = <&spdif_codec>;
+            };
+        };
+    };
+
+#--------------------
+# route audio from IMX6 SSI2 through TLV320DAC3100 codec
+# through TPA6130A2 amplifier to headphones:
+#--------------------
+  - |
+    sound {
+        compatible = "simple-audio-card";
+
+        simple-audio-card,widgets =
+            "Headphone", "Headphone Jack";
+        simple-audio-card,routing =
+            "Headphone Jack", "HPLEFT",
+            "Headphone Jack", "HPRIGHT",
+            "LEFTIN", "HPL",
+            "RIGHTIN", "HPR";
+        simple-audio-card,aux-devs = <&amp>;
+        simple-audio-card,cpu {
+            sound-dai = <&ssi2>;
+        };
+        simple-audio-card,codec {
+            sound-dai = <&codec>;
+            clocks = <&clocks>;
+        };
+    };
+
+#--------------------
+# Sampling Rate Conversion
+#--------------------
+  - |
+    sound {
+        compatible = "simple-audio-card";
+
+        simple-audio-card,name = "rsnd-ak4643";
+        simple-audio-card,format = "left_j";
+        simple-audio-card,bitclock-master = <&sndcodec>;
+        simple-audio-card,frame-master = <&sndcodec>;
+
+        simple-audio-card,convert-rate = <48000>;
+
+        simple-audio-card,prefix = "ak4642";
+        simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
+                                    "DAI0 Capture", "ak4642 Capture";
+
+        sndcpu: simple-audio-card,cpu {
+            sound-dai = <&rcar_sound>;
+        };
+
+        sndcodec: simple-audio-card,codec {
+            sound-dai = <&ak4643>;
+            system-clock-frequency = <11289600>;
+        };
+    };
+
+#--------------------
+# 2 CPU 1 Codec (Mixing)
+#--------------------
+  - |
+    sound {
+        compatible = "simple-audio-card";
+
+        simple-audio-card,name = "rsnd-ak4643";
+        simple-audio-card,format = "left_j";
+        simple-audio-card,bitclock-master = <&dpcmcpu>;
+        simple-audio-card,frame-master = <&dpcmcpu>;
+
+        simple-audio-card,convert-rate = <48000>;
+        simple-audio-card,convert-channels = <2>;
+
+        simple-audio-card,routing = "ak4642 Playback", "DAI0 Playback",
+                                    "ak4642 Playback", "DAI1 Playback";
+
+        dpcmcpu: simple-audio-card,cpu@0 {
+            sound-dai = <&rcar_sound 0>;
+        };
+
+        simple-audio-card,cpu@1 {
+            sound-dai = <&rcar_sound 1>;
+        };
+
+        simple-audio-card,codec {
+            prefix = "ak4642";
+            sound-dai = <&ak4643>;
+            clocks = <&audio_clock>;
+        };
+    };
+
+#--------------------
+# Multi DAI links with DPCM:
+#
+# CPU0 ------ ak4613
+# CPU1 ------ PCM3168A-p  /* DPCM 1ch/2ch */
+# CPU2 --/                /* DPCM 3ch/4ch */
+# CPU3 --/                /* DPCM 5ch/6ch */
+# CPU4 --/                /* DPCM 7ch/8ch */
+# CPU5 ------ PCM3168A-c
+#--------------------
+  - |
+    sound {
+        compatible = "simple-audio-card";
+
+        simple-audio-card,routing =
+            "pcm3168a Playback", "DAI1 Playback",
+            "pcm3168a Playback", "DAI2 Playback",
+            "pcm3168a Playback", "DAI3 Playback",
+            "pcm3168a Playback", "DAI4 Playback";
+
+        simple-audio-card,dai-link@0 {
+            format = "left_j";
+            bitclock-master = <&sndcpu0>;
+            frame-master = <&sndcpu0>;
+
+            sndcpu0: cpu {
+                sound-dai = <&rcar_sound 0>;
+            };
+            codec {
+                sound-dai = <&ak4613>;
+            };
+        };
+
+        simple-audio-card,dai-link@1 {
+            format = "i2s";
+            bitclock-master = <&sndcpu1>;
+            frame-master = <&sndcpu1>;
+
+            convert-channels = <8>; /* TDM Split */
+
+            sndcpu1: cpu@0 {
+                sound-dai = <&rcar_sound 1>;
+            };
+            cpu@1 {
+                sound-dai = <&rcar_sound 2>;
+            };
+            cpu@2 {
+                sound-dai = <&rcar_sound 3>;
+            };
+            cpu@3 {
+                sound-dai = <&rcar_sound 4>;
+            };
+            codec {
+                mclk-fs = <512>;
+                prefix = "pcm3168a";
+                dai-tdm-slot-num = <8>;
+                sound-dai = <&pcm3168a 0>;
+            };
+        };
+
+        simple-audio-card,dai-link@2 {
+            format = "i2s";
+            bitclock-master = <&sndcpu2>;
+            frame-master = <&sndcpu2>;
+
+            sndcpu2: cpu {
+                sound-dai = <&rcar_sound 5>;
+            };
+            codec {
+                mclk-fs = <512>;
+                prefix = "pcm3168a";
+                sound-dai = <&pcm3168a 1>;
+            };
+        };
+    };