In newer devices, the same HDAudio controller can handle both local accessories and HDMI/DP interfaces. However, SOF is not always supported on those platforms.
When the Intel DSP is not enabled in the BIOS (OEM choice), audio
interfaces are handled by the
snd-hda-intel driver. The platform only
exposes PCM devices and no audio processing capabilities.
When OEM platforms integrate digital microphones attached directly
to the Intel chipset (aka DMIC), or they use I2C/I2S or SoundWire
interfaces, the DSP must be enabled by the BIOS. There is, however, one
more option. On Skylake and Kaby Lake platforms, the Intel DSP is handled by
snd-soc-skl module which relies on closed-source firmware.
SOF is available on Intel PCI devices starting with Gemini Lake, and has since been the only solution provided by Intel for the following platforms: Comet Lake, Ice Lake, and Tiger Lake.
Since multiple drivers can register for the same PCI ID, it was (until
recently) common for users and distributions to use the wrong
driver, which could only be resolved by changing the Linux
or deselecting drivers in the
/etc/modprobe.d configuration files.
snd-intel-dspcfg module introduced in early 2020 exposes an API
used by all drivers, and the user can now override default choices by
dsp_driver parameter. For example, setting
options snd-intel-dspcfg dsp_driver=1
will allow for the HDaudio legacy driver to be used. This will typically work for speakers and headphones/headsets, but will not allow DMIC capture.
Conversely, when a platform does not require a DSP-based platform, but the DSP is still enabled by the OEM, the user or integration can force the SOF Linux driver to be used.
options snd-intel-dspcfg dsp_driver=3
alsaucmcommand but will typically be used by audio servers such as PulseAudio or PipeWire. UCM files released by Intel are compatible with different drivers and should work when changing the
dsp_driverparameter. The selection of firmware, topology, and UCM files is based on platform capabilities, codec names, and DMI options.