[PATCH RFC 00/23] arm64: qcom: enable SM8650 audio without ADSP firmware

From: Neil Armstrong

Date: Fri Nov 13 2026 - 18:54:51 EST


This patchset adds the necessary plumbing to drive the SM8650 audio
interfaces directly from Linux. This is required for boards like the
Valve Deckard that boot Linux at EL2 without the ADSP audio firmware,
meaning the audio interfaces must be driven directly by the application
processor through lpass-cpu.

Without the ADSP firmware, the LPASS clocks (MI2S bit clocks,
codec macro MCLKs, LPM memory clocks) and memory zones must be
controlled by Linux.

To support this, the series introduces the following changes:
- Bindings: Adds dt-bindings for the SM8650 LPASS core & audio clock
controllers, LPASS CPU, WSA RX/TX channel ids, and Senary/Septenary MI2S ids.
- Clocks: Adds drivers for the SM8650 LPASS HM, core, audio, and
AON clock controllers.
- ASoC LPASS core: Prepares the lpass and lpass-cdc-dma drivers to
handle multiple LPAIFs for I2S ports, allocates and maps LPM buffer
memory for DAIs, and adds support for the optional WSA interface
and Senary/Septenary MI2S ports.
- ASoC SM8650: Introduces the SM8650 lpass-cpu variant and allows the
sc8280xp machine driver to be used with lpass-cpu to keep sound card
bindings working.
- Device Tree: Refactors the SM8650 dts to move EL1-specific Gunyah nodes
to a dedicated sm8650-el1.dtsi. Introduces sm8650-lpass-cpu.dtsi for
boards booting at EL2, and wires up the speakers (Senary MI2S) and
DMICs (VA macro) on the sm8650-valve-deckard board.
- Defconfig: Enables the SM8650 LPASS CPU driver as a module in arm64 defconfig

Signed-off-by: Neil Armstrong <neil.armstrong@xxxxxxxxxx>
---
Neil Armstrong (23):
dt-bindings: clock: qcom: add SM8650 LPASS core & audio clock controllers
clk: qcom: add SM8650 LPASS core & audio clock controllers
dt-bindings: pinctrl: qcom,sm8650-lpass-lpi-pinctrl: document clocks and power domaines when ADSP is not used
ASoC: dt-bindings: qcom,lpass: add Senary & Septenary MI2S ids
ASoC: dt-bindings: qcom,lpass: add WSA RX and TX channels ids
ASoC: dt-bindings: qcom,lpass-*-macro: document less clock when ADSP is not used
ASoC: dt-bindings: qcom,lpass-cpu: document the SM8650 LPASS
ASoC: qcom: lpass-cpu: get the optional codec_mem3 clock
ASoC: qcom: lpass: add support for optional WSA interface
ASoC: qcom: lpass-cdc-dma: add support for WSA codec DMA
ASoC: qcom: lpass: prepare to handle multiple lpaifs for i2s
ASoC: qcom: lpass: add support for MI2S_SENARY & MI2S_SEPTENARY
ASoC: qcom: lpass: support mapping I2S ports to multiple LPAIFs
ASoC: qcom: lpass: support LPM memory type for I2S LPAIFs
ASoC: qcom: lpass: allocate LPM buffer memory to DAIs
ASoC: qcom: lpass: enable the right codec_mem clock when usin LPM memory
ASoC: qcom: add SM8650 LPASS CPU driver
ASoC: qcom: swd: allow LPASS_CDC_DMA_WSA_RX0 as soundwire dai
ASoC: qcom: sc8280xp: allow using the sc8280xp card with lpass-cpu
arm64: dts: qcom: sm8650: move EL1 Gunyah nodes to sm8650-el1.dtsi
arm64: dts: qcom: add SM8650 LPASS CPU dtsi
arm64: dts: qcom: sm8650-valve-deckard: enable audio
arm64: defconfig: enable the SM8650 LPASS CPU driver

.../bindings/clock/qcom,sm8650-lpasscorecc.yaml | 179 +++++
.../pinctrl/qcom,sm8650-lpass-lpi-pinctrl.yaml | 20 +-
.../devicetree/bindings/sound/qcom,lpass-cpu.yaml | 74 +-
.../bindings/sound/qcom,lpass-rx-macro.yaml | 17 +-
.../bindings/sound/qcom,lpass-tx-macro.yaml | 20 +-
.../bindings/sound/qcom,lpass-va-macro.yaml | 13 +-
.../bindings/sound/qcom,lpass-wsa-macro.yaml | 21 +-
.../boot/dts/qcom/sm8650-ayaneo-pocket-s2.dts | 1 +
arch/arm64/boot/dts/qcom/sm8650-el1.dtsi | 775 ++++++++++++++++++++
arch/arm64/boot/dts/qcom/sm8650-hdk.dts | 1 +
arch/arm64/boot/dts/qcom/sm8650-lpass-cpu.dtsi | 222 ++++++
arch/arm64/boot/dts/qcom/sm8650-mtp.dts | 1 +
arch/arm64/boot/dts/qcom/sm8650-qrd.dts | 1 +
arch/arm64/boot/dts/qcom/sm8650-valve-deckard.dts | 85 ++-
arch/arm64/boot/dts/qcom/sm8650.dtsi | 799 ++-------------------
arch/arm64/configs/defconfig | 1 +
drivers/clk/qcom/Kconfig | 12 +
drivers/clk/qcom/Makefile | 1 +
drivers/clk/qcom/lpassaudiocc-sm8650.c | 777 ++++++++++++++++++++
drivers/clk/qcom/lpasscorecc-sm8650.c | 509 +++++++++++++
.../dt-bindings/clock/qcom,lpassaudiocc-sm8650.h | 47 ++
.../dt-bindings/clock/qcom,lpasscorecc-sm8650.h | 30 +
include/dt-bindings/sound/qcom,lpass.h | 24 +
sound/soc/qcom/Kconfig | 12 +
sound/soc/qcom/Makefile | 2 +
sound/soc/qcom/lpass-apq8016.c | 9 +-
sound/soc/qcom/lpass-cdc-dma.c | 47 +-
sound/soc/qcom/lpass-cpu.c | 344 ++++++---
sound/soc/qcom/lpass-lpaif-reg.h | 51 +-
sound/soc/qcom/lpass-platform.c | 482 +++++++++++--
sound/soc/qcom/lpass-sc7180.c | 10 +-
sound/soc/qcom/lpass-sc7280.c | 10 +-
sound/soc/qcom/lpass-sm8650.c | 651 +++++++++++++++++
sound/soc/qcom/lpass.h | 198 ++++-
sound/soc/qcom/sc8280xp.c | 16 +-
sound/soc/qcom/sdw.c | 1 +
36 files changed, 4471 insertions(+), 992 deletions(-)
---
base-commit: ddfe51b0a0f5dc9e415cc2c8ad8db17532dd426b
change-id: 20261113-topic-sm8650-el2-c6caf4237ca7

Best regards,
--
Neil Armstrong <neil.armstrong@xxxxxxxxxx>