[PATCH v5 0/7] ASoC: Qualcomm Tambora (WCD9378) SDCA codec
From: Srinivas Kandagatla <hidden>
Date: 2026-09-25 16:11:23
Also in:
linux-arm-msm, linux-sound, lkml
Add support for the Qualcomm Tambora (WCD9378) headset codec in SDCA-compliant mode over SoundWire. On ARM/DT platforms without ACPI/DisCo firmware, the SDCA topology and SoundWire port properties are supplied as static data through the codec driver. Patches 1-5 extend the ASoC SDCA class framework so that a class-based codec driver can be built on ARM/DT: allow builds without ACPI, expose the SoundWire probe/remove library entry points, add class_ops with a populate_function hook, and translate sound-dai cells by entity index. Patches 6-7 add the WCD9378 dt-binding and driver. The same silicon can be fused for a mobile (non-SDCA) or an SDCA-compliant mode; the two share the SoundWire class-ID compatible (sdw20217011000) and are selected apart by the qcom,sdca-compliant boolean property. Tested with HPH playback and headset-mic capture on the Snapdragon X2 Elite Glymur CRD and Lenovo T14s Gen7. Jack detection is not wired up in this series. Changes since v4 [1]: - ASoC: SDCA: add class_ops with populate_function -- callback now takes the SDCA function device instead of the parent sdw_slave (Charles). - Drop the v4 sdca_apply_default_control_classifiers() helper and set is_volatile / has_reset directly in the WCD9378 static control tables (Charles). - dt-bindings: sound: qcom,wcd9378-sdw.yaml -- $ref dai-common.yaml# and switch to unevaluatedProperties (Krzysztof). - ASoC: codecs: wcd9378-sdca: fix SU 35 Selector mode RO -> RW so the class-layer DAPM mux can drive it; keep SU 43/45 cached; reduce reset_max_delay to 25ms; drop the sdw_slave_read_prop() call (Charles); lower-case hex literals. - Commit body / Kconfig help corrections across 1/7, 2/7 and 7/7 (Mark, Sashiko). Changes since v3 [2]: - dt-bindings: sound: qcom,wcd9378-sdw.yaml -- drop the qcom,wcd9378c front compatible so the schema plays nicely with the SoundWire class-ID compatible; introduce a qcom,sdca-compliant boolean flag to select the SDCA fuse; drop the fake top-level wrapper node so the slave sits directly under the SoundWire controller; drop '|' from qcom,port-mapping description (Krzysztof). - ASoC: codecs: wcd9378-sdca: gate probe on qcom,sdca-compliant. - set SDCA_NO_INTERRUPT correctly on controls, (Mark). [1] https://lore.kernel.org/all/20260918131914.681588-1-srinivas.kandagatla@oss.qualcomm.com/ (local) [2] https://lore.kernel.org/all/20260915165652.914893-1-srinivas.kandagatla@oss.qualcomm.com/ (local) Srinivas Kandagatla (7): ASoC: SDCA: allow building without ACPI ASoC: SDCA: export PM helpers keyed on sdca_class_drv ASoC: SDCA: expose class SoundWire probe/remove as library ASoC: SDCA: add class_ops with populate_function ASoC: SDCA: class_function: xlate sound-dai cell by entity index ASoC: dt-bindings: qcom: add Tambora WCD9378 SDCA codec ASoC: codecs: add Qualcomm Tambora (WCD9378) SDCA codec .../bindings/sound/qcom,wcd9378-sdw.yaml | 105 ++ include/sound/sdca.h | 23 +- include/sound/sdca_class.h | 70 ++ sound/soc/codecs/Kconfig | 11 + sound/soc/codecs/Makefile | 2 + sound/soc/codecs/wcd9378-sdca.c | 1080 +++++++++++++++++ sound/soc/codecs/wcd9378-sdca.h | 20 + sound/soc/codecs/wcd9378-sdw.c | 51 + sound/soc/sdca/Kconfig | 6 +- sound/soc/sdca/sdca_class.c | 148 ++- sound/soc/sdca/sdca_class.h | 35 - sound/soc/sdca/sdca_class_function.c | 45 +- sound/soc/sdca/sdca_device.c | 4 + sound/soc/sdca/sdca_functions.c | 2 + 14 files changed, 1531 insertions(+), 71 deletions(-) create mode 100644 Documentation/devicetree/bindings/sound/qcom,wcd9378-sdw.yaml create mode 100644 include/sound/sdca_class.h create mode 100644 sound/soc/codecs/wcd9378-sdca.c create mode 100644 sound/soc/codecs/wcd9378-sdca.h create mode 100644 sound/soc/codecs/wcd9378-sdw.c delete mode 100644 sound/soc/sdca/sdca_class.h base-commit: 4c253ac4b29b8c6cc6fdef8f92d4facde62e63b9 -- 2.53.0