| # 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 |
| |
| maintainers: |
| - Kuninori Morimoto <kuninori.morimoto.gx@renesas.com> |
| |
| definitions: |
| |
| frame-master: |
| description: Indicates dai-link frame master. |
| $ref: /schemas/types.yaml#/definitions/phandle |
| |
| bitclock-master: |
| description: Indicates dai-link bit clock master |
| $ref: /schemas/types.yaml#/definitions/phandle |
| |
| 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 |
| |
| dai-tdm-slot-width: |
| description: see tdm-slot.txt. |
| $ref: /schemas/types.yaml#/definitions/uint32 |
| |
| 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 |
| |
| system-clock-fixed: |
| description: | |
| Specifies that the clock frequency should not be modified. |
| Implied when system-clock-frequency is specified, but can be used when |
| a clock is mapped to the device whose frequency cannot or should not be |
| changed. When mclk-fs is also specified, this restricts the device to a |
| single fixed sampling rate. |
| $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: |
| maxItems: 1 |
| |
| 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: |
| maxItems: 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: |
| maxItems: 1 |
| system-clock-frequency: |
| $ref: "#/definitions/system-clock-frequency" |
| system-clock-direction-out: |
| $ref: "#/definitions/system-clock-direction-out" |
| system-clock-fixed: |
| $ref: "#/definitions/system-clock-fixed" |
| required: |
| - sound-dai |
| |
| additional-devs: |
| type: object |
| description: |
| Additional devices used by the simple audio card. |
| patternProperties: |
| '^iio-aux(-.+)?$': |
| type: object |
| $ref: audio-iio-aux.yaml# |
| |
| properties: |
| compatible: |
| contains: |
| enum: |
| - simple-audio-card |
| - simple-scu-audio-card |
| |
| "#address-cells": |
| const: 1 |
| "#size-cells": |
| const: 0 |
| |
| label: |
| $ref: "#/definitions/label" |
| |
| simple-audio-card,name: |
| description: User specified audio sound card name. |
| $ref: /schemas/types.yaml#/definitions/string |
| |
| simple-audio-card,widgets: |
| $ref: "#/definitions/widgets" |
| simple-audio-card,routing: |
| $ref: "#/definitions/routing" |
| |
| # 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,additional-devs: |
| $ref: "#/definitions/additional-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,hp-det-gpio: |
| maxItems: 1 |
| simple-audio-card,mic-det-gpio: |
| maxItems: 1 |
| |
| patternProperties: |
| "^simple-audio-card,cpu(@[0-9a-f]+)?$": |
| $ref: "#/definitions/dai" |
| "^simple-audio-card,codec(@[0-9a-f]+)?$": |
| $ref: "#/definitions/dai" |
| "^simple-audio-card,plat(@[0-9a-f]+)?$": |
| $ref: "#/definitions/dai" |
| |
| "^simple-audio-card,dai-link(@[0-9a-f]+)?$": |
| 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: |
| maxItems: 1 |
| |
| "#address-cells": |
| const: 1 |
| "#size-cells": |
| const: 0 |
| # 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" |
| hp-det-gpio: |
| maxItems: 1 |
| mic-det-gpio: |
| maxItems: 1 |
| |
| patternProperties: |
| "^cpu(-[0-9]+)?$": |
| $ref: "#/definitions/dai" |
| "^codec(-[0-9]+)?$": |
| $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 = <&>; |
| simple-audio-card,cpu { |
| sound-dai = <&ssi2>; |
| }; |
| simple-audio-card,codec { |
| sound-dai = <&codec>; |
| clocks = <&clocks>; |
| }; |
| }; |
| |
| # -------------------- |
| # route audio to/from a codec through an amplifier |
| # designed with a potentiometer driven by IIO: |
| # -------------------- |
| - | |
| sound { |
| compatible = "simple-audio-card"; |
| |
| simple-audio-card,aux-devs = <&_in>, <&_out>; |
| simple-audio-card,routing = |
| "CODEC LEFTIN", "AMP_IN LEFT OUT", |
| "CODEC RIGHTIN", "AMP_IN RIGHT OUT", |
| "AMP_OUT LEFT IN", "CODEC LEFTOUT", |
| "AMP_OUT RIGHT IN", "CODEC RIGHTOUT"; |
| |
| simple-audio-card,additional-devs { |
| amp_out: iio-aux-out { |
| compatible = "audio-iio-aux"; |
| io-channels = <&pot_out 0>, <&pot_out 1>; |
| io-channel-names = "LEFT", "RIGHT"; |
| snd-control-invert-range = <1 1>; |
| sound-name-prefix = "AMP_OUT"; |
| }; |
| |
| amp_in: iio_aux-in { |
| compatible = "audio-iio-aux"; |
| io-channels = <&pot_in 0>, <&pot_in 1>; |
| io-channel-names = "LEFT", "RIGHT"; |
| sound-name-prefix = "AMP_IN"; |
| }; |
| }; |
| |
| simple-audio-card,cpu { |
| sound-dai = <&cpu>; |
| }; |
| |
| 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"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| 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 { |
| reg = <0>; |
| sound-dai = <&rcar_sound 0>; |
| }; |
| |
| simple-audio-card,cpu@1 { |
| reg = <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"; |
| #address-cells = <1>; |
| #size-cells = <0>; |
| |
| 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 { |
| reg = <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 { |
| reg = <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 { |
| reg = <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>; |
| }; |
| }; |
| }; |