===================== Audio drivers and HAL ===================== The audio-fabric slice of the vendor driver/HAL layer — split out from the general HAL catalogue (:doc:`/userspace/drivers-hals`) because it's by far the largest single group (29 of the device's 37 loadable kernel modules) and belongs next to the DSP firmware it drives (:doc:`dsp-firmware`). Everything here is from ``vendor_a.img`` (``lib/modules/``, ``bin/hw/``, ``lib64/hw/``, ``etc/vintf/manifest.xml``) read with ``7z``, cross-checked against ``kernel_config.txt``. No code was executed. Loadable kernel modules ======================== ``/vendor/lib/modules`` holds 37 ``.ko`` files total; **29 of them are the audio fabric**, loading first (by ``modules.load`` order), in dependency order, as the runtime drivers for the LPASS/Q6 DSP, the bolero on-die codec macros, and the WCD/WSA codecs described in :doc:`dsp-firmware`: .. list-table:: :header-rows: 1 :widths: 30 70 * - Module group (load order) - Role / hardware * - ``audio_apr`` → ``audio_q6_pdr`` → ``audio_q6_notifier`` → ``audio_adsp_loader`` → ``audio_q6`` - the Q6/ADSP transport: APR (Asynchronous Packet Router) messaging, PD restart, ADSP image load-notify, and the Q6 core — the userspace/kernel bridge to the audio DSP (:doc:`dsp-firmware`) * - ``audio_swr`` / ``audio_swr_ctrl`` / ``audio_pinctrl_lpi`` - SoundWire master + LPI (low-power-island) pinctrl for the codec links * - ``audio_bolero_cdc`` + ``audio_{rx,tx,wsa,va}_macro`` - the on-SoC **bolero** codec and its rx / tx / wsa / va macros (note the ``va`` macro module ships even though its DTB node is not wired — :doc:`dsp-firmware`) * - ``audio_wcd938x`` (+ ``_slave``), ``audio_wcd937x`` (+ ``_slave``), ``audio_wcd9xxx``, ``audio_wcd_core``, ``audio_mbhc`` - the external WCD938x/937x codec(s) and the MBHC (headset button/jack) detection * - ``audio_wsa881x`` / ``audio_wsa883x`` - the WSA smart-speaker-amp drivers (Class-D boosted speaker PAs) * - ``audio_platform`` / ``audio_native`` / ``audio_machine_lito`` / ``audio_snd_event`` / ``audio_hdmi`` / ``audio_stub`` / ``audio_usf`` - the ASoC platform + machine driver (``lito``/lagoon sound card), the sound-event router, the (unused) HDMI DAI, a stub DAI, and USF (ultrasound framework) The other 8 modules cover the rest of the peripheral fabric — not audio; see :doc:`/userspace/drivers-hals`. HAL service and implementation ================================ .. list-table:: :header-rows: 1 :widths: 26 40 34 * - HAL - Implementation - Hardware / cross-ref * - ``audio.service`` + ``audio@6.0-impl`` - ``audio.primary.lito.so`` (+ ``bluetooth``/``usb``/``r_submix``), ``soundtrigger``, ``audio.effect`` - LPASS/Q6 + codecs (:doc:`dsp-firmware`) The Bluetooth-audio HIDL client (``bluetooth_audio``, part of the ``bluetooth@1.0-service-qti`` HAL) lives in :doc:`/wireless/hal` — it's a Bluetooth HAL entry, not part of the primary audio HAL, even though it carries audio data. Provenance ========== :Source: ``artifacts/super/vendor_a.img`` — ``lib/modules/{*.ko,modules.load}`` (module set + boot load order), ``bin/hw/*`` and ``lib64/hw/*`` (HAL service and implementation libraries), ``etc/vintf/manifest.xml`` (HAL declaration); ``artifacts/boot_a/kernel_config.txt``. :Method: ext4 image listed/extracted read-only with ``7z``; modules counted from ``modules.load``; HAL from ``bin/hw`` / ``lib64/hw`` names and the VINTF manifest. No code executed. :Cross-refs: :doc:`dsp-firmware` (the DSP firmware these modules load and drive), :doc:`/userspace/drivers-hals` (the rest of the HAL/module catalogue, including generic platform HALs), :doc:`/wireless/hal` (Bluetooth audio HIDL client).