SAI Linux driver
目录
Article purpose
本文介绍了适用于SAI internal peripheral的SAI Linux® 驱动程序。
Short Description
SAI[1] Linux驱动程序是在Linux ALSA framework中实现的ASoC CPU DAI驱动程序。
Configuration
Kernel Configuration
使用Linux Menuconfig工具在内核配置中激活SAI [1] Linux驱动程序: Menuconfig或如何配置内核.
[*] Device Drivers [*] Sound card support [*] Advanced Linux Sound Architecture [*] ALSA for SoC audio support STMicroelectronics STM32 SOC audio support [*] STM32 SAI interface (Serial Audio Interface) support
Device tree
Refer to the SAI device tree configuration article when configuring the SAI Linux kernel driver.
How to use
The SAI Linux driver can be accessed from userland through an ALSA device. Refer to ALSA overview for information on how to list and use ALSA devices.
How to trace and debug
The 调试文件系统(debugfs) and procfs file system can be checked to get information on the SAI driver and the resources it uses. A non-exhaustive list of these file system entries is provided below. Refer to ALSA overview for more details on debugging tools.
- debugfs entries:
- asoc: refer to ALSA_overview#How_to_monitor
- clk: refer to Clock_overview#How_to_monitor_with_debugfs to get information on clocks.
- pinctrl: refer to Pinctrl_overview#How_to_monitor to get information on pins.
- regmap: allow to monitor SAI peripheral registers.
$ cat /sys/kernel/debug/regmap/xxx.audio-controller/registers
- procfs entries:
- asound: refer to ALSA_overview#How_to_debug
- interrupts: allow to check interrupts.
$ cat /proc/interrupts
Source code location
The STM32 SAI peripheral includes two independent audio subblocks that share common resources. The driver source code reflects this architecture.
sound/soc/stm/stm32_sai.c| |}} sound/soc/stm/stm32_sai.c : handles common resources such as clock, interrupt, reset and shared register.
sound/soc/stm/stm32_sai_sub.c| |}} sound/soc/stm/stm32_sai_sub.c : handles the resources dedicated to each subblock.