lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Wed, 19 Feb 2020 09:58:08 -0600
From:   Rob Herring <robh@...nel.org>
To:     Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>
Cc:     Liam Girdwood <lgirdwood@...il.com>,
        Mark Brown <broonie@...nel.org>,
        Mark Rutland <mark.rutland@....com>,
        alsa-devel@...a-project.org, devicetree@...r.kernel.org,
        linux-kernel@...r.kernel.org
Subject: Re: [PATCH v2] ASoC: dt-bindings: simple-card: switch to yaml base
 Documentation

On Fri, Feb 14, 2020 at 02:13:05PM +0900, Kuninori Morimoto wrote:
> From: Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>
> 
> This patch switches from .txt base to .yaml base Document.
> 
> Signed-off-by: Kuninori Morimoto <kuninori.morimoto.gx@...esas.com>
> ---
> 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@...30000 {
> -	#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@...esas.com>
> +
> +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
> 

Powered by blists - more mailing lists