Registered User mNo edit summary |
Registered User |
||
(6 intermediate revisions by 2 users not shown) | |||
Line 9: | Line 9: | ||
The I2S Linux driver is an ASoC CPU DAI driver implemented in the Linux [[ALSA_overview|ALSA framework]]. | The I2S Linux driver is an ASoC CPU DAI driver implemented in the Linux [[ALSA_overview|ALSA framework]]. | ||
The I2S driver requests two clocks which can be used as parent clocks of the | The I2S driver requests two clocks which can be used as parent clocks of the I2S peripheral kernel clock. | ||
The rates of these parent clocks must be respectively a multiple of 8kHz and 11.025kHz. | The rates of these parent clocks must be respectively a multiple of 8kHz and 11.025kHz. | ||
One of these two clocks is selected at run-time through the I2S clock mux, depending on audio stream sampling rate. | One of these two clocks is selected at run-time through the I2S clock mux, depending on audio stream sampling rate. | ||
Line 15: | Line 15: | ||
{{Info| The parent clock may not be exactly a multiple of the audio stream rate. A [[ALSA_overview#Dynamic_traces | debug trace]] can be enabled in the I2S Linux driver, to report the clock rate accuracy. A deviation of 1000 ppm, on the audio stream frequency, might be considered acceptable for most people.}} | {{Info| The parent clock may not be exactly a multiple of the audio stream rate. A [[ALSA_overview#Dynamic_traces | debug trace]] can be enabled in the I2S Linux driver, to report the clock rate accuracy. A deviation of 1000 ppm, on the audio stream frequency, might be considered acceptable for most people.}} | ||
{{Info| '''Restriction on {{MicroprocessorDevice | device=15}}: ''' </br> | |||
'''Restriction on {{MicroprocessorDevice | device=15}}'''<br | The SPI/I2S2 and SPI/I2S3 internal peripherals share the same clock mux. This may result in a conflict on clock mux configuration, if I2S2 and I2S3 are used to run audio streams having incompatible rates (i.e. rates not multiple of each other). The I2S driver does not protect by itself against such conflict. | ||
}} | |||
SPI/I2S2 and SPI/I2S3 internal peripherals share the same clock mux. | |||
This may result in a conflict on clock mux configuration, if I2S2 and I2S3 are used to run audio streams having | |||
incompatible rates (i.e. rates not multiple of each other). The I2S driver does not protect by itself against such conflict. | |||
== Configuration == | == Configuration == | ||
Line 71: | Line 67: | ||
<noinclude> | <noinclude> | ||
{{ArticleBasedOnModel | | {{ArticleBasedOnModel | OpenSTLinux drivers article model}} | ||
{{PublicationRequestId | 10338 | 2019-01-29}} | {{PublicationRequestId | 10338 | 2019-01-29}} | ||
[[Category:ALSA]] | [[Category:ALSA]] | ||
</noinclude> | </noinclude> |
Latest revision as of 18:10, 23 January 2023
1. Article purpose[edit source]
This article introduces the I2S Linux® driver for the SPI/I2S internal peripheral.
2. Short Description[edit source]
The I2S Linux driver is an ASoC CPU DAI driver implemented in the Linux ALSA framework.
The I2S driver requests two clocks which can be used as parent clocks of the I2S peripheral kernel clock. The rates of these parent clocks must be respectively a multiple of 8kHz and 11.025kHz. One of these two clocks is selected at run-time through the I2S clock mux, depending on audio stream sampling rate.
3. Configuration[edit source]
3.1. Kernel Configuration[edit source]
Activate the I2S Linux driver in the kernel configuration using the Linux Menuconfig tool: Menuconfig or how to configure kernel.
Linux Sound Architecture [*] ALSA for SoC audio support STMicroelectronics STM32 SOC audio support [*] STM32 I2S interface (SPI/I2S block) support[*] Device Drivers [*] Sound card support [*] Advanced
3.2. Device tree[edit source]
Refer to the I2S_device_tree_configuration article when configuring the I2S Linux kernel driver.
4. How to use[edit source]
The I2S 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.
5. How to trace and debug[edit source]
The debugfs and procfs file system can be checked to get information on the I2S 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 SPI/I2S 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
6. Source code location[edit source]
sound/soc/stm/stm32_i2s.c : implements the I2S Linux driver.
7. References[edit source]