At this time, it's an interesting mixture of changes for both old and new stuff. Majority of changes are about ASoC (lots of systematic changes for converting remove callbacks to void, and cleanups), while we got the fixes and the enhancements of very old PCI cards, too. Here are some highlights: ALSA/ASoC Core: - Continued effort of more ASoC core cleanups - Minor improvements for XRUN handling in indirect PCM helpers - Code refactoring of PCM core code ASoC: - Continued feature and simplification work on SOF, including addition of a no-DSP mode for bringup, HDA MLink and extensions to the IPC4 protocol - Hibernation support for CS35L45 - More DT binding conversions - Support for Cirrus Logic CS35L56, Freescale QMC, Maxim MAX98363, nVidia systems with MAX9809x and RT5631, Realtek RT712, Renesas R-Car Gen4, Rockchip RK3588 and TI TAS5733 ALSA: - Lots of works for legacy emu10k1 and ymfpci PCI drivers - PCM kselftest fixes and enhancements -----BEGIN PGP SIGNATURE----- iQJCBAABCAAsFiEEIXTw5fNLNI7mMiVaLtJE4w1nLE8FAmRJBkcOHHRpd2FpQHN1 c2UuZGUACgkQLtJE4w1nLE8S/Q/+If1MEW+XXYushYU6VcWbHevwsRwmUZPtIJzT Nx4PE4Ia8rX++GbsH5Iqt6tmldbb/vMbwy7TGbn/Q4ju2cO5qGT4/qgWdC2TuUX6 icWRHslJ//TffSd/yh1g6JIKBlcCmQeYcw5KoaLzBE/qO3iRP0IQUc17gkLKYNni u1XOGrU9zuh3uwz+UQFfUhB8NlKhD3HVYjwrbd3gwcDsE/0G+q76A/wWghfA+RAb 0ruDhIDtJoem6PKQTwC05UgDpmwd7XFAIgcbOu7E7t/lr4YKwQZhQmJI0IexCR9i aLPqg3Q/6S+WFKpcPcGCHNljqRNp9lUlIXak+NsbCZ7mXKE6tALywAtuB57sZ0sO QM1YrmUAsi0RaD7foPcT64CAq8IVQ6aLWusXwvcxzzvJuHvJdeiBKiI5gmF0GqMu ZLpAMGCoKxft4Il2r+BPTbLHe57uHmp1fKMWUK4NfyIUW7jEdKmf7ALSSJmvcqwU +R0PXikc0lOo1GH9ZQojpVNFwV8XLOd2CWaNfoPl85A0+ngYhTY3ZRQ3qbYWHlU6 zXAu06IUOef5phsn3zerJ1orV729Xdjf+JUbL0uxJvANsX6R93CQWw0tgrUI62EZ 0vhoOp3PPZUKmDKvUo/NtIyuvSGREg3wDug5tiDOb53Qwfr2VIThJa999kNzH76c lHUfrv4= =7XGG -----END PGP SIGNATURE----- Merge tag 'sound-6.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound Pull sound updates from Takashi Iwai: "At this time, it's an interesting mixture of changes for both old and new stuff. Majority of changes are about ASoC (lots of systematic changes for converting remove callbacks to void, and cleanups), while we got the fixes and the enhancements of very old PCI cards, too. Here are some highlights: ALSA/ASoC Core: - Continued effort of more ASoC core cleanups - Minor improvements for XRUN handling in indirect PCM helpers - Code refactoring of PCM core code ASoC: - Continued feature and simplification work on SOF, including addition of a no-DSP mode for bringup, HDA MLink and extensions to the IPC4 protocol - Hibernation support for CS35L45 - More DT binding conversions - Support for Cirrus Logic CS35L56, Freescale QMC, Maxim MAX98363, nVidia systems with MAX9809x and RT5631, Realtek RT712, Renesas R-Car Gen4, Rockchip RK3588 and TI TAS5733 ALSA: - Lots of works for legacy emu10k1 and ymfpci PCI drivers - PCM kselftest fixes and enhancements" * tag 'sound-6.4-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound: (586 commits) ALSA: emu10k1: use high-level I/O in set_filterQ() ALSA: emu10k1: use high-level I/O functions also during init ALSA: emu10k1: fix error handling in snd_audigy_i2c_volume_put() ALSA: emu10k1: don't stop DSP in _snd_emu10k1_{,audigy_}init_efx() ALSA: emu10k1: fix SNDRV_EMU10K1_IOCTL_SINGLE_STEP ALSA: emu10k1: skip Sound Blaster-specific hacks for E-MU cards ALSA: emu10k1: fixup DSP defines ALSA: emu10k1: pull in some register definitions from kX-project ALSA: emu10k1: remove some bogus defines ALSA: emu10k1: eliminate some unused defines ALSA: emu10k1: fix lineup of EMU_HANA_* defines ALSA: emu10k1: comment updates ALSA: emu10k1: fix snd_emu1010_fpga_read() input masking for rev2 cards ALSA: emu10k1: remove unused emu->pcm_playback_efx_substream field ALSA: emu10k1: remove unused `resume` parameter from snd_emu10k1_init() ALSA: emu10k1: minor optimizations ALSA: emu10k1: remove remaining cruft from snd_emu10k1_emu1010_init() ALSA: emu10k1: remove apparently pointless EMU_HANA_OPTION_CARDS reads ALSA: emu10k1: remove apparently pointless FPGA reads ALSA: emu10k1: stop doing weird things with HCFG in snd_emu10k1_emu1010_init() ...
507 lines
14 KiB
YAML
507 lines
14 KiB
YAML
# 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
|
|
|
|
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,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>;
|
|
};
|
|
};
|
|
|
|
# --------------------
|
|
# 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>;
|
|
};
|
|
};
|
|
};
|