HDAUDIO(4)

πŸ“¦ version 11.0, in nixpkgs unstable

πŸ’– NAME πŸ’–

okay bestie, you’re reading HDAUDIO(4) from the Kernel Interfaces Manual, and the main character is hdaudio β€” the High Definition Audio device driver. periodt. πŸ’…βœ¨


πŸŽ€ SYNOPSIS πŸŽ€

here’s the exact config vibe check, no edits, no cap:

hdaudio* at pci? dev ? function ?
hdafg* at hdaudiobus?
audio* at audiobus?

options HDAUDIOVERBOSE
options HDAUDIO_DEBUG
options HDAFG_DEBUG

🎧 DESCRIPTION 🎧

the hdaudio device driver is expected to support any PCI device that’s compliant with the High Definition Audio Specification 1.0. fr fr. it was written from scratch following the Intel HD Audio and Microsoft Universal Audio Architecture specifications. ✨

the driver is made of two interlinked components, because that’s literally how the hardware design rolls. the hdaudio component interfaces with a PCI/PCIe bus and provides an hdaudiobus(4) that different function groups attach onto. each function group (e.g. audio, vendor-specific modem) gets exported as a separate child device of the hdaudio controller. audio function groups (a.k.a. audio codec) are exported as hdafg(4) devices. slay. πŸ¦‹

audio codecs come from a number of manufacturers and are made up of a number of widgets (e.g. audio mixer, output pin, analog-to-digital converter). the way the widgets are interlinked varies significantly between implementations. so the tree of widgets must be parsed and mapped to mixer(4) controls. as part of that process, loops in the inter-codec links must be detected and muted, bi-directional pins must be set up appropriately, and the locations of pins determined. hdaudio works backwards by starting with a list of desired, consistent and compatible mixer(4) controls and configuring/discovering appropriate widget link routes to fit. iconic behavior honestly. πŸ‘‘

by following the published mechanisms for common implementations of widget parsing, it’s expected that nearly all High Definition Audio devices will be supported without requiring per-device quirks. we love a general solution. πŸ’œ


πŸ”₯ HARDWARE πŸ”₯

in addition to many on-board sound cards included in mainboards, the following add-on card is supported:

  • TerraTec Aureon 7.1 PCIe

🌈 SEE ALSO 🌈


🌸 HISTORY 🌸

the hdaudio device driver appeared in NetBSD 5.1. a legend was born, ngl. πŸ’«


πŸ‘‘ AUTHORS πŸ‘‘

the hdaudio driver was written by Jared McNeill <jmcneill@NetBSD.org> under contract by Precedence Technologies Ltd.: http://www.precedence.co.uk/ The UAA-compliant widget parser is derived from the FreeBSD snd_hda(4) driver. giving credit where credit is due, periodt. 🫢


πŸ’€ BUGS πŸ’€

the following items are not yet implemented:

  • Improve power management support when driver is idle
  • Add support for non-PCM output formats
  • Handle unsolicited RIRB messages
  • Modem function groups
  • 24-bit and 20-bit hardware formats cannot yet be used. Since the machine-independent audio layer converts all input from userland and the hardware layer to 16-bit precision for processing, there would currently be no advantage in using them.
okay but seriously bestie, those last ones are literally not implemented yet β€” don’t come for the driver about it. πŸ˜­πŸ’€

and that’s the whole manual, bestie. this page is from the Debian build, dated March 21, 2022 β€” HDAUDIO(4), mwah πŸ’‹πŸŽ€

πŸ“¦ where this page comes from