ASoC: Updates for v7.1

There's one new core feature here but mostly this has been a fairly
quiet release, we've got a few new drivers and one core feature that's
likely to be relatively rarely used but the bulk of the work this time
around has been on quality.

 - Support for bus keepers, this will be used by the Apple device
   support.
 - Enhancements to the SDCA support, incuding retaskable jacks.
 - Unwinding of the pcm_new()/pcm_free() cleanups from Morimoto-san.
 - Test improvements for the Cirrus Logic drivers.
 - Large sets of fixes for the NXP, nVidia and Qualcomm drivers.
 - Support for AMD RPL DMICs, Cirrus Logic CS42L43 and CS47L47, nVidia
   machines with CPCAP and WM8962.
This commit is contained in:
Takashi Iwai
2026-04-13 18:09:48 +02:00
286 changed files with 6693 additions and 2625 deletions
@@ -1,14 +0,0 @@
Analog Devices SSM2305 Speaker Amplifier
========================================
Required properties:
- compatible : "adi,ssm2305"
- shutdown-gpios : The gpio connected to the shutdown pin.
The gpio signal is ACTIVE_LOW.
Example:
ssm2305: analog-amplifier {
compatible = "adi,ssm2305";
shutdown-gpios = <&gpio3 20 GPIO_ACTIVE_LOW>;
};
@@ -0,0 +1,46 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/adi,ssm2305.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Analog Devices SSM2305 Class-D Speaker Amplifier
maintainers:
- Lars-Peter Clausen <lars@metafoo.de>
description:
The SSM2305 is a filterless, high efficiency, mono 2.8 W Class-D
audio amplifier with a micropower shutdown mode controlled via a
dedicated active-low GPIO pin.
allOf:
- $ref: dai-common.yaml#
properties:
compatible:
const: adi,ssm2305
shutdown-gpios:
maxItems: 1
description:
GPIO connected to the shutdown pin (SD) of the SSM2305.
The pin is active-low; asserting it puts the device into
micropower shutdown mode.
required:
- compatible
- shutdown-gpios
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
analog-amplifier {
compatible = "adi,ssm2305";
shutdown-gpios = <&gpio3 20 GPIO_ACTIVE_LOW>;
};
...
@@ -35,6 +35,10 @@ properties:
dvdd-supply: true
firmware-name:
maxItems: 1
description: Name of the *_acf.bin file used for amplifier initialization
awinic,audio-channel:
description:
It is used to distinguish multiple PA devices, so that different
@@ -16,6 +16,8 @@ description: |
DAC for headphone output, two integrated Class D amplifiers for
loudspeakers, and two ADCs for wired headset microphone input or
stereo line input. PDM inputs are provided for digital microphones.
CS42L43B variant adds dedicated PDM interface, SoundWire Clock Gearing
support and more decimators to ISRCs.
allOf:
- $ref: dai-common.yaml#
@@ -24,6 +26,7 @@ properties:
compatible:
enum:
- cirrus,cs42l43
- cirrus,cs42l43b
reg:
maxItems: 1
@@ -1,42 +0,0 @@
* Hisilicon 6210 i2s controller
Required properties:
- compatible: should be one of the following:
- "hisilicon,hi6210-i2s"
- reg: physical base address of the i2s controller unit and length of
memory mapped region.
- interrupts: should contain the i2s interrupt.
- clocks: a list of phandle + clock-specifier pairs, one for each entry
in clock-names.
- clock-names: should contain following:
- "dacodec"
- "i2s-base"
- dmas: DMA specifiers for tx dma. See the DMA client binding,
Documentation/devicetree/bindings/dma/dma.txt
- dma-names: should be "tx" and "rx"
- hisilicon,sysctrl-syscon: phandle to sysctrl syscon
- #sound-dai-cells: Should be set to 1 (for multi-dai)
- The dai cell indexes reference the following interfaces:
0: S2 interface
(Currently that is the only one available, but more may be
supported in the future)
Example for the hi6210 i2s controller:
i2s0: i2s@f7118000{
compatible = "hisilicon,hi6210-i2s";
reg = <0x0 0xf7118000 0x0 0x8000>; /* i2s unit */
interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>; /* 155 "DigACodec_intr"-32 */
clocks = <&sys_ctrl HI6220_DACODEC_PCLK>,
<&sys_ctrl HI6220_BBPPLL0_DIV>;
clock-names = "dacodec", "i2s-base";
dmas = <&dma0 15 &dma0 14>;
dma-names = "rx", "tx";
hisilicon,sysctrl-syscon = <&sys_ctrl>;
#sound-dai-cells = <1>;
};
Then when referencing the i2s controller:
sound-dai = <&i2s0 0>; /* index 0 => S2 interface */
@@ -0,0 +1,80 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/hisilicon,hi6210-i2s.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: HiSilicon hi6210 I2S controller
maintainers:
- John Stultz <john.stultz@linaro.org>
allOf:
- $ref: dai-common.yaml#
properties:
compatible:
const: hisilicon,hi6210-i2s
reg:
maxItems: 1
interrupts:
maxItems: 1
clocks:
maxItems: 2
clock-names:
items:
- const: dacodec
- const: i2s-base
dmas:
maxItems: 2
dma-names:
items:
- const: tx
- const: rx
hisilicon,sysctrl-syscon:
$ref: /schemas/types.yaml#/definitions/phandle
description: phandle to sysctrl syscon
"#sound-dai-cells":
const: 1
description: |
The dai cell indexes reference the following interfaces:
0: S2 interface
required:
- compatible
- reg
- interrupts
- clocks
- clock-names
- dmas
- dma-names
- hisilicon,sysctrl-syscon
- "#sound-dai-cells"
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/interrupt-controller/arm-gic.h>
#include <dt-bindings/clock/hi6220-clock.h>
i2s@f7118000 {
compatible = "hisilicon,hi6210-i2s";
reg = <0xf7118000 0x8000>;
interrupts = <GIC_SPI 123 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&sys_ctrl HI6220_DACODEC_PCLK>,
<&sys_ctrl HI6220_BBPPLL0_DIV>;
clock-names = "dacodec", "i2s-base";
dmas = <&dma0 14>, <&dma0 15>;
dma-names = "tx", "rx";
hisilicon,sysctrl-syscon = <&sys_ctrl>;
#sound-dai-cells = <1>;
};
@@ -24,6 +24,7 @@ patternProperties:
cpu/codec dais.
type: object
$ref: tdm-slot.yaml#
properties:
link-name:
@@ -38,13 +39,9 @@ patternProperties:
- i2s
- dsp_b
dai-tdm-slot-num:
description: see tdm-slot.txt.
$ref: /schemas/types.yaml#/definitions/uint32
dai-tdm-slot-num: true
dai-tdm-slot-width:
description: see tdm-slot.txt.
$ref: /schemas/types.yaml#/definitions/uint32
dai-tdm-slot-width: true
playback-only:
description: link is used only for playback
@@ -28,8 +28,6 @@ properties:
$ref: /schemas/types.yaml#/definitions/phandle
description: The phandle of the WM8960 audio codec.
unevaluatedProperties: false
required:
- compatible
- mediatek,platform
@@ -38,6 +36,8 @@ required:
- pinctrl-names
- pinctrl-0
additionalProperties: false
examples:
- |
sound {
@@ -36,14 +36,14 @@ properties:
required:
- sound-dai
unevaluatedProperties: false
required:
- compatible
- audio-routing
- platform
- codec
unevaluatedProperties: false
examples:
- |
sound {
@@ -0,0 +1,41 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/mediatek,mt8173-rt5650-rt5514.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Mediatek MT8173 with RT5650 and RT5514 audio codecs
maintainers:
- Koro Chen <koro.chen@mediatek.com>
properties:
compatible:
const: mediatek,mt8173-rt5650-rt5514
mediatek,audio-codec:
$ref: /schemas/types.yaml#/definitions/phandle-array
description: Phandles of rt5650 and rt5514 codecs
items:
- description: phandle of rt5650 codec
- description: phandle of rt5514 codec
mediatek,platform:
$ref: /schemas/types.yaml#/definitions/phandle
description: The phandle of MT8173 ASoC platform.
required:
- compatible
- mediatek,audio-codec
- mediatek,platform
additionalProperties: false
examples:
- |
sound {
compatible = "mediatek,mt8173-rt5650-rt5514";
mediatek,audio-codec = <&rt5650>, <&rt5514>;
mediatek,platform = <&afe>;
};
...
@@ -105,12 +105,12 @@ patternProperties:
required:
- link-name
unevaluatedProperties: false
required:
- compatible
- mediatek,platform
unevaluatedProperties: false
examples:
- |
sound {
@@ -1,15 +0,0 @@
MT8173 with RT5650 RT5514 CODECS
Required properties:
- compatible : "mediatek,mt8173-rt5650-rt5514"
- mediatek,audio-codec: the phandles of rt5650 and rt5514 codecs
- mediatek,platform: the phandle of MT8173 ASoC platform
Example:
sound {
compatible = "mediatek,mt8173-rt5650-rt5514";
mediatek,audio-codec = <&rt5650 &rt5514>;
mediatek,platform = <&afe>;
};
@@ -0,0 +1,90 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/nvidia,tegra-audio-cpcap.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: NVIDIA Tegra audio complex with CPCAP CODEC
maintainers:
- Svyatoslav Ryhel <clamor95@gmail.com>
allOf:
- $ref: nvidia,tegra-audio-common.yaml#
properties:
compatible:
items:
- pattern: '^motorola,tegra-audio-cpcap(-[a-z0-9]+)+$'
- const: nvidia,tegra-audio-cpcap
nvidia,audio-routing:
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
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. Valid names for sources and sinks are
the pins (documented in the binding document), and the jacks on the
board.
minItems: 2
items:
enum:
# Board Connectors
- Speakers
- Int Spk
- Earpiece
- Int Mic
- Headset Mic
- Internal Mic 1
- Internal Mic 2
- Headphone
- Headphones
- Headphone Jack
- Mic Jack
# CODEC Pins
- MICR
- HSMIC
- EMUMIC
- MICL
- EXTR
- EXTL
- EP
- SPKR
- SPKL
- LINER
- LINEL
- HSR
- HSL
- EMUR
- EMUL
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/clock/tegra20-car.h>
#include <dt-bindings/soc/tegra-pmc.h>
sound {
compatible = "motorola,tegra-audio-cpcap-olympus",
"nvidia,tegra-audio-cpcap";
nvidia,model = "Motorola Atrix 4G (MB860) CPCAP";
nvidia,audio-routing =
"Headphones", "HSR",
"Headphones", "HSL",
"Int Spk", "SPKR",
"Int Spk", "SPKL",
"Earpiece", "EP",
"HSMIC", "Mic Jack",
"MICR", "Internal Mic 1",
"MICL", "Internal Mic 2";
nvidia,i2s-controller = <&tegra_i2s1>;
nvidia,audio-codec = <&cpcap_audio>;
clocks = <&tegra_car TEGRA20_CLK_PLL_A>,
<&tegra_car TEGRA20_CLK_PLL_A_OUT0>,
<&tegra_car TEGRA20_CLK_CDEV1>;
clock-names = "pll_a", "pll_a_out0", "mclk";
};
@@ -35,10 +35,15 @@ properties:
items:
enum:
# Board Connectors
- Speakers
- Int Spk
- Headphone
- Headphones
- Headphone Jack
- Earpiece
- Headset Mic
- Mic Jack
- Int Mic
- Internal Mic 1
- Internal Mic 2
@@ -0,0 +1,88 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/nvidia,tegra-audio-wm8962.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: NVIDIA Tegra audio complex with WM8962 CODEC
maintainers:
- Svyatoslav Ryhel <clamor95@gmail.com>
allOf:
- $ref: nvidia,tegra-audio-common.yaml#
properties:
compatible:
items:
- pattern: '^[a-z0-9]+,tegra-audio-wm8962(-[a-z0-9]+)+$'
- const: nvidia,tegra-audio-wm8962
nvidia,audio-routing:
$ref: /schemas/types.yaml#/definitions/non-unique-string-array
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. Valid names for sources and sinks are
the pins (documented in the binding document), and the jacks on the
board.
minItems: 2
items:
enum:
# Board Connectors
- Speakers
- Int Spk
- Earpiece
- Int Mic
- Headset Mic
- Internal Mic 1
- Internal Mic 2
- Headphone
- Headphones
- Headphone Jack
- Mic Jack
# CODEC Pins
- IN1L
- IN1R
- IN2L
- IN2R
- IN3L
- IN3R
- IN4L
- IN4R
- DMICDAT
- HPOUTL
- HPOUTR
- SPKOUT
- SPKOUTL
- SPKOUTR
required:
- nvidia,i2s-controller
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/clock/tegra30-car.h>
#include <dt-bindings/soc/tegra-pmc.h>
sound {
compatible = "microsoft,tegra-audio-wm8962-surface-rt",
"nvidia,tegra-audio-wm8962";
nvidia,model = "Microsoft Surface RT WM8962";
nvidia,audio-routing =
"Headphone Jack", "HPOUTR",
"Headphone Jack", "HPOUTL",
"Int Spk", "SPKOUTR",
"Int Spk", "SPKOUTL";
nvidia,i2s-controller = <&tegra_i2s1>;
nvidia,audio-codec = <&wm8962>;
clocks = <&tegra_car TEGRA30_CLK_PLL_A>,
<&tegra_car TEGRA30_CLK_PLL_A_OUT0>,
<&tegra_pmc TEGRA_PMC_CLK_OUT_1>;
clock-names = "pll_a", "pll_a_out0", "mclk";
};
@@ -126,13 +126,16 @@ patternProperties:
reg:
contains:
# MI2S DAI ID range PRIMARY_MI2S_RX - QUATERNARY_MI2S_TX and
# QUINARY_MI2S_RX - QUINARY_MI2S_TX
# QUINARY_MI2S_RX - QUINARY_MI2S_TX and
# LPI_MI2S_RX_0 - SENARY_MI2S_TX
items:
oneOf:
- minimum: 16
maximum: 23
- minimum: 127
maximum: 128
- minimum: 137
maximum: 148
then:
required:
- qcom,sd-lines
@@ -1,22 +0,0 @@
ROCKCHIP with MAX98357A/RT5514/DA7219 codecs on GRU boards
Required properties:
- compatible: "rockchip,rk3399-gru-sound"
- rockchip,cpu: The phandle of the Rockchip I2S controller that's
connected to the codecs
- rockchip,codec: The phandle of the audio codecs
Optional properties:
- dmic-wakeup-delay-ms : specify delay time (ms) for DMIC ready.
If this option is specified, which means it's required dmic need
delay for DMIC to ready so that rt5514 can avoid recording before
DMIC send valid data
Example:
sound {
compatible = "rockchip,rk3399-gru-sound";
rockchip,cpu = <&i2s0>;
rockchip,codec = <&max98357a &rt5514 &da7219>;
dmic-wakeup-delay-ms = <20>;
};
@@ -0,0 +1,60 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/rockchip,rk3399-gru-sound.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Rockchip with MAX98357A/RT5514/DA7219 codecs on GRU boards
maintainers:
- Heiko Stuebner <heiko@sntech.de>
properties:
compatible:
const: rockchip,rk3399-gru-sound
rockchip,cpu:
$ref: /schemas/types.yaml#/definitions/phandle-array
description: |
List of phandles to the Rockchip CPU DAI controllers connected to codecs
minItems: 1
items:
- items:
- description: Phandle to the Rockchip I2S controllers
- items:
- description: |
Phandle to the Rockchip SPDIF controller. Required when a
DisplayPort audio codec is referenced in rockchip,codec
rockchip,codec:
$ref: /schemas/types.yaml#/definitions/phandle-array
description: |
The phandles of the audio codecs connected to the Rockchip CPU DAI
controllers
minItems: 1
maxItems: 6
items:
maxItems: 1
dmic-wakeup-delay-ms:
description: |
specify delay time (ms) for DMIC ready.
If this option is specified, a delay is required for DMIC to get ready
so that rt5514 can avoid recording before DMIC sends valid data
required:
- compatible
- rockchip,cpu
- rockchip,codec
additionalProperties: false
examples:
- |
sound {
compatible = "rockchip,rk3399-gru-sound";
rockchip,cpu = <&i2s0 &spdif>;
rockchip,codec = <&max98357a &rt5514 &da7219 &cdn_dp>;
dmic-wakeup-delay-ms = <20>;
};
@@ -0,0 +1,59 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/rockchip,rockchip-audio-max98090.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Rockchip audio complex with MAX98090 codec
maintainers:
- Fabio Estevam <festevam@gmail.com>
properties:
compatible:
const: rockchip,rockchip-audio-max98090
rockchip,model:
$ref: /schemas/types.yaml#/definitions/string
description: The user-visible name of this sound complex.
rockchip,i2s-controller:
$ref: /schemas/types.yaml#/definitions/phandle
description: Phandle to the Rockchip I2S controller.
rockchip,audio-codec:
$ref: /schemas/types.yaml#/definitions/phandle
description: Phandle to the MAX98090 audio codec.
rockchip,headset-codec:
$ref: /schemas/types.yaml#/definitions/phandle
description: Phandle to the external chip for jack detection.
rockchip,hdmi-codec:
$ref: /schemas/types.yaml#/definitions/phandle
description: Phandle to the HDMI device for HDMI codec.
required:
- compatible
- rockchip,model
- rockchip,i2s-controller
allOf:
- if:
required:
- rockchip,audio-codec
then:
required:
- rockchip,headset-codec
unevaluatedProperties: false
examples:
- |
sound {
compatible = "rockchip,rockchip-audio-max98090";
rockchip,model = "ROCKCHIP-I2S";
rockchip,i2s-controller = <&i2s>;
rockchip,audio-codec = <&max98090>;
rockchip,headset-codec = <&headsetcodec>;
};
@@ -1,42 +0,0 @@
ROCKCHIP with MAX98090 CODEC
Required properties:
- compatible: "rockchip,rockchip-audio-max98090"
- rockchip,model: The user-visible name of this sound complex
- rockchip,i2s-controller: The phandle of the Rockchip I2S controller that's
connected to the CODEC
Optional properties:
- rockchip,audio-codec: The phandle of the MAX98090 audio codec.
- rockchip,headset-codec: The phandle of Ext chip for jack detection. This is
required if there is rockchip,audio-codec.
- rockchip,hdmi-codec: The phandle of HDMI device for HDMI codec.
Example:
/* For max98090-only board. */
sound {
compatible = "rockchip,rockchip-audio-max98090";
rockchip,model = "ROCKCHIP-I2S";
rockchip,i2s-controller = <&i2s>;
rockchip,audio-codec = <&max98090>;
rockchip,headset-codec = <&headsetcodec>;
};
/* For HDMI-only board. */
sound {
compatible = "rockchip,rockchip-audio-max98090";
rockchip,model = "ROCKCHIP-I2S";
rockchip,i2s-controller = <&i2s>;
rockchip,hdmi-codec = <&hdmi>;
};
/* For max98090 plus HDMI board. */
sound {
compatible = "rockchip,rockchip-audio-max98090";
rockchip,model = "ROCKCHIP-I2S";
rockchip,i2s-controller = <&i2s>;
rockchip,audio-codec = <&max98090>;
rockchip,headset-codec = <&headsetcodec>;
rockchip,hdmi-codec = <&hdmi>;
};

Some files were not shown because too many files have changed in this diff Show More