ASoC: Add support for the Qualcomm WSA885X Stereo smart speaker amplifier

Prasad Kumpatla <prasad.kumpatla@oss.qualcomm.com> says:

The series first documents the WSA885X devicetree binding,
including supplies, GPIOs, Interrupt and battery configuration.

It then adds the ASoC codec driver with register programming, serial
interface setup, clock handling, mute and gain control, reset handling,
interrupt support, runtime TDM slot-count configuration, and stream-time
power-state sequencing.

validated speaker playback on Shikra and Hawi platforms.

Link: https://patch.msgid.link/20260715115220.3093799-1-prasad.kumpatla@oss.qualcomm.com
This commit is contained in:
Mark Brown 2026-08-01 00:21:06 +01:00
commit dbc2afea82
No known key found for this signature in database
GPG Key ID: 24D68B725D5487D0
4 changed files with 1639 additions and 0 deletions

View File

@ -0,0 +1,93 @@
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/sound/qcom,wsa8855.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#
title: Qualcomm WSA8855 stereo smart speaker amplifier
maintainers:
- Srinivas Kandagatla <srinivas.kandagatla@oss.qualcomm.com>
- Prasad Kumpatla <prasad.kumpatla@oss.qualcomm.com>
description:
WSA885X is a Qualcomm Aqstic stereo smart speaker amplifier. It uses a PCM
audio interface, an I2C control interface, and a Class-H amplifier path for
high efficiency, low output noise, and low idle power consumption.
allOf:
- $ref: dai-common.yaml#
properties:
compatible:
const: qcom,wsa8855
reg:
maxItems: 1
'#sound-dai-cells':
const: 0
powerdown-gpios:
description: GPIO controlling the SD_N powerdown pin.
maxItems: 1
reset-gpios:
description: GPIO controlling the SD_N powerdown pin.
maxItems: 1
interrupts:
maxItems: 1
vdd-1p8-supply: true
vdd-io-supply: true
qcom,battery-config:
description:
Battery topology connected to the speaker amplifier. 1S indicates one
battery cell in series, while 2S indicates two battery cells in series.
$ref: /schemas/types.yaml#/definitions/string
default: 1s
enum:
- 1s
- 2s
required:
- compatible
- reg
- '#sound-dai-cells'
- interrupts
- vdd-1p8-supply
- vdd-io-supply
oneOf:
- required:
- powerdown-gpios
- required:
- reset-gpios
unevaluatedProperties: false
examples:
- |
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/interrupt-controller/irq.h>
i2c {
#address-cells = <1>;
#size-cells = <0>;
speaker@c {
compatible = "qcom,wsa8855";
reg = <0x0c>;
#sound-dai-cells = <0>;
powerdown-gpios = <&tlmm 11 GPIO_ACTIVE_LOW>;
interrupt-parent = <&tlmm>;
interrupts = <77 IRQ_TYPE_EDGE_FALLING>;
vdd-1p8-supply = <&vreg_l2g_1p8>;
vdd-io-supply = <&vreg_l1g_1p2>;
qcom,battery-config = "1s";
};
};
...

View File

@ -367,6 +367,7 @@ config SND_SOC_ALL_CODECS
imply SND_SOC_WSA881X
imply SND_SOC_WSA883X
imply SND_SOC_WSA884X
imply SND_SOC_WSA885X
imply SND_SOC_ZL38060
help
Normally ASoC codec drivers are only built if a machine driver which
@ -2775,6 +2776,16 @@ config SND_SOC_WSA884X
This enables support for Qualcomm WSA8840/WSA8845/WSA8845H Class-D
Smart Speaker Amplifier.
config SND_SOC_WSA885X
tristate "WSA885X Codec"
depends on I2C
select REGMAP_I2C
help
This enables support for Qualcomm WSA885X Stereo Smart Speaker
Amplifier. The codec driver programs the amplifier register
map and exposes the DAI and mixer controls used by Qualcomm
audio machine drivers.
config SND_SOC_ZL38060
tristate "Microsemi ZL38060 Connected Home Audio Processor"
depends on SPI_MASTER

View File

@ -427,6 +427,7 @@ snd-soc-wm-hubs-y := wm_hubs.o
snd-soc-wsa881x-y := wsa881x.o
snd-soc-wsa883x-y := wsa883x.o
snd-soc-wsa884x-y := wsa884x.o
snd-soc-wsa885x-y := wsa885x.o
snd-soc-zl38060-y := zl38060.o
# Amp
snd-soc-max9877-y := max9877.o
@ -878,6 +879,7 @@ obj-$(CONFIG_SND_SOC_WM_HUBS) += snd-soc-wm-hubs.o
obj-$(CONFIG_SND_SOC_WSA881X) += snd-soc-wsa881x.o
obj-$(CONFIG_SND_SOC_WSA883X) += snd-soc-wsa883x.o
obj-$(CONFIG_SND_SOC_WSA884X) += snd-soc-wsa884x.o
obj-$(CONFIG_SND_SOC_WSA885X) += snd-soc-wsa885x.o
obj-$(CONFIG_SND_SOC_ZL38060) += snd-soc-zl38060.o
# Amp

1533
sound/soc/codecs/wsa885x.c Normal file

File diff suppressed because it is too large Load Diff