Re: [PATCH v2] ASoC: dt-bindings: simple-card: switch to yaml base Documentation

From: Rob Herring
Date: Wed Feb 19 2020 - 10:58:13 EST


On Fri, Feb 14, 2020 at 02:13:05PM +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>
> ---
> v1 -> v2
>
> - add missing setup
>
> .../devicetree/bindings/sound/simple-card.txt | 351 -------------
> .../bindings/sound/simple-card.yaml | 484 ++++++++++++++++++
> 2 files changed, 484 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.txt b/Documentation/devicetree/bindings/sound/simple-card.txt
> deleted file mode 100644
> index 79954cd6e37b..000000000000
> --- 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 000000000000..0a2a2c878c4a
> --- /dev/null
> +++ b/Documentation/devicetree/bindings/sound/simple-card.yaml
> @@ -0,0 +1,484 @@
> +# 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@xxxxxxxxxxx>
> +
> +definitions:
> +
> + frame-master:
> + description: Indicates dai-link frame master.
> + $ref: /schemas/types.yaml#/definitions/phandle-array

Only 1 phandle (plus args)? If so,

allOf:
- $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
> +
> + 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
> +
> + dai-tdm-slot-num:
> + description: see tdm-slot.txt.
> + $ref: /schemas/types.yaml#/definitions/uint32

Is there a max?

> +
> + dai-tdm-slot-width:
> + description: see tdm-slot.txt.
> + $ref: /schemas/types.yaml#/definitions/uint32

max is 32 or something much less than 2^32?

> +
> + 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

'clocks' already has a type definition. You should only be defining how
many and what each one is if more than 1.

> +
> + 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
> +
> + 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
> +
> + 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
> +
> + 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
> +
> + label:
> + description: "device name"
> + $ref: /schemas/types.yaml#/definitions/string

'label' already has a type definition.

> +
> + 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
> +
> + pin-switches:
> + description: the widget names for which pin switches must be created.
> + $ref: /schemas/types.yaml#/definitions/string-array
> +
> + format:
> + description: audio format.
> + 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

This should have a common definition elsewhere which I'd prefer be in
the dtschema repo. You can just assume there is and do 'maxItems: 1'
here assuming it's only 1.

> +
> + # 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:
> + $ref: "#/definitions/dai-tdm-slot-num"
> + dai-tdm-slot-width:
> + $ref: "#/definitions/dai-tdm-slot-width"
> + clocks:
> + $ref: "#/definitions/clocks"
> + system-clock-frequency:
> + $ref: "#/definitions/system-clock-frequency"
> + system-clock-direction-out:
> + $ref: "#/definitions/system-clock-direction-out"
> + required:
> + - sound-dai
> +
> +properties:
> + compatible:
> + contains:
> + enum:
> + - simple-audio-card
> + - simple-scu-audio-card
> +
> + "#address-cells": true
> + "#size-cells": true

Aren't these always 1 and 0, respectively?

> +
> + label:
> + $ref: "#/definitions/label"
> +
> + simple-audio-card,name:
> + description: User specified audio sound card name.
> + $ref: /schemas/types.yaml#/definitions/string
> +
> +# use patternProperties to use "#definitions/xxx"
> +patternProperties:
> + "^simple-audio-card,widgets$":
> + $ref: "#/definitions/widgets"
> + "^simple-audio-card,routing$":
> + $ref: "#/definitions/routing"
> + "^simple-audio-card,cpu(@.*)?":
> + $ref: "#/definitions/dai"
> + "^simple-audio-card,codec(@.*)?":
> + $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,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"
> +# use common *-gpio for
> +# simple-audio-card,hp-det-gpio:
> +# simple-audio-card,mic-det-gpio:
> +
> + "^simple-audio-card,dai-link(@.*)?":

We can do better than '.*' with '[0-9a-f]'. Also, needs a '$' on the
end.

> + 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

Just 'maxItems: 1' is enough.

> +
> + # 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"
> + 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"
> + # use common *-gpio for
> + # hp-det-gpio:
> + # mic-det-gpio:
> +
> + patternProperties:
> + "^cpu(@.*)?":

Same as previous comment on unit-address. Can do better than '.*'.

> + $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.17.1
>