All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v2 0/2] ASoC: codecs: add the Qualcomm WCD9378 audio codec
@ 2026-07-29  0:06 Jorijn van der Graaf
  2026-07-29  0:06 ` [PATCH v2 1/2] ASoC: dt-bindings: " Jorijn van der Graaf
  2026-07-29  0:06 ` [PATCH v2 2/2] ASoC: codecs: wcd9378: add TX/capture codec driver Jorijn van der Graaf
  0 siblings, 2 replies; 4+ messages in thread
From: Jorijn van der Graaf @ 2026-07-29  0:06 UTC (permalink / raw)
  To: Mark Brown
  Cc: Jorijn van der Graaf, Srinivas Kandagatla, Liam Girdwood,
	Rob Herring, Krzysztof Kozlowski, Conor Dooley, Jaroslav Kysela,
	Takashi Iwai, Pierre-Louis Bossart, Julian Braha, Vinod Koul,
	Bard Liao, Luca Weiss, Mohammad Rafi Shaik, Ravi Hothi,
	linux-sound, devicetree, linux-arm-msm, linux-kernel

This series adds bindings and a codec driver for the Qualcomm WCD9378,
found on SM7635 boards such as the Fairphone 6. The chip pairs a
WCD937x-compatible analog core with SDCA function blocks whose built-in
sequencers handle the analog power-up/down; all control registers,
analog core included, sit in a 32-bit paged SDCA control address space
behind the TX SoundWire slave.

The driver implements the TX/capture paths (three ADCs fed from four
analog microphone inputs, three mic bias supplies) and is modeled on
wcd937x, reusing the wcd-common helpers. RX/playback, MBHC and the
SmartAMP function are follow-up work. Register sequences come from the
GPL downstream wcd9378 driver in Qualcomm's audio-kernel-ar tree; the
chip has no public datasheet.

The slave binding is now a single file covering both presentations of
the chip: the two-slave mobile wiring this driver handles, and the
aggregated single-slave SDCA mode of compute platforms, targeted by
Srinivas's pending SDCA class series. Agreed with Srinivas in that
series' review so it can drop its own binding file and the two drivers
can share the SoundWire ID table:
https://lore.kernel.org/all/06aef9a5-7e8e-4262-9b41-a9c43f588da9@oss.qualcomm.com/

Two dependencies outside this series, both routed through the
soundwire tree:

- the paged register map needs the Qualcomm controller's SCP address
  paging support, already applied there as commit 999f80904763
  ("soundwire: qcom: add SCP address paging support"). Any order works;
  capture just needs both to land.

- v2 has the SoundWire core program the codec's bus-clock base/scale
  registers (prop.clock_reg_supported) instead of hand-rolling the
  writes, following Pierre-Louis's v1 review. On Qualcomm controllers
  the core can only do that once the bus declares its clock:
  https://lore.kernel.org/linux-sound/20260728173542.61146-1-jorijnvdgraaf@catcrafts.net/
  Ordering matters for this one: with this series but without that
  patch, slave initialization on Qualcomm buses fails at enumeration
  ("no bus MCLK") and the codec binds with its bus-clock registers
  unprogrammed, i.e. dead capture; it needs to land first or together
  with this.

Tested on the Fairphone 6 (SM7635) together with the two soundwire
patches above: handset mic capture through the LPASS TX macro at
48 kHz across reboots, including UCM-driven use by PipeWire in a
Plasma Mobile session. The board DTS follows once these bindings are
accepted.

v2:
- the micbias4-requirement patch is squashed into the binding patch
  (Krzysztof)
- one slave binding for both chip presentations (see above), with
  qcom,{tx,rx}-port-mapping replaced by qcom,port-mapping plus a
  qcom,control-device flag, the channel-mapping properties dropped,
  and the codec example trimmed per Rob's review
- driver: single entry point declining qcom,compute-mode nodes;
  bus-clock and runtime-PM rework from Pierre-Louis's review; Kconfig
  style fixes from Julian Braha's review; sashiko-bot's tx_mode_put
  and mutex_destroy items
- rebased; per-patch changelogs have the details
v1: https://lore.kernel.org/linux-sound/20260706192229.144137-1-jorijnvdgraaf@catcrafts.net/

Jorijn van der Graaf (2):
  ASoC: dt-bindings: add the Qualcomm WCD9378 audio codec
  ASoC: codecs: wcd9378: add TX/capture codec driver

 .../bindings/sound/qcom,wcd9378-codec.yaml    |   54 +
 .../bindings/sound/qcom,wcd9378-sdw.yaml      |  182 +++
 .../bindings/sound/qcom,wcd937x.yaml          |    1 +
 .../bindings/sound/qcom,wcd938x.yaml          |    1 +
 .../bindings/sound/qcom,wcd939x.yaml          |    1 +
 .../bindings/sound/qcom,wcd93xx-common.yaml   |    1 -
 sound/soc/codecs/Kconfig                      |   19 +
 sound/soc/codecs/Makefile                     |    7 +
 sound/soc/codecs/wcd9378-sdw.c                |  441 ++++++
 sound/soc/codecs/wcd9378.c                    | 1366 +++++++++++++++++
 sound/soc/codecs/wcd9378.h                    |  244 +++
 11 files changed, 2316 insertions(+), 1 deletion(-)
 create mode 100644 Documentation/devicetree/bindings/sound/qcom,wcd9378-codec.yaml
 create mode 100644 Documentation/devicetree/bindings/sound/qcom,wcd9378-sdw.yaml
 create mode 100644 sound/soc/codecs/wcd9378-sdw.c
 create mode 100644 sound/soc/codecs/wcd9378.c
 create mode 100644 sound/soc/codecs/wcd9378.h


base-commit: eeb306184b615ab6c6008126bc1fe0080b8e94f9
-- 
2.55.0


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2026-07-29  0:20 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-29  0:06 [PATCH v2 0/2] ASoC: codecs: add the Qualcomm WCD9378 audio codec Jorijn van der Graaf
2026-07-29  0:06 ` [PATCH v2 1/2] ASoC: dt-bindings: " Jorijn van der Graaf
2026-07-29  0:06 ` [PATCH v2 2/2] ASoC: codecs: wcd9378: add TX/capture codec driver Jorijn van der Graaf
2026-07-29  0:20   ` sashiko-bot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.