mirror of
https://github.com/apache/nuttx.git
synced 2026-08-09 06:25:09 +00:00
The I2S BCLK frequency is calculated as: bclk = sample_rate * total_slot * data_width Previously, total_slot was always taken from the static config (esp_i2s0_config / esp_i2s1_config), which is hardcoded to 2. This is correct for mono and stereo, but wrong for TDM modes with more than 2 channels (e.g. 4-channel recording with ES7210). With 4 channels but total_slot=2, the BCLK is only half of what it should be, causing the actual sample rate to be half of the requested rate (e.g. requesting 16 kHz actually samples at 8 kHz). Replace priv->config->total_slot with MAX(priv->channels, 2) in all three BCLK calculation sites (i2s_check_mclkfrequency and i2s_set_clock for both master and slave paths). The MIN of 2 preserves the I2S protocol requirement that at least 2 slots exist even for mono, while correctly scaling for multi-channel TDM configurations. Signed-off-by: wangjianyu3 <wangjianyu3@xiaomi.com> |
||
|---|---|---|
| .. | ||
| arm | ||
| arm64 | ||
| avr | ||
| ceva | ||
| dummy | ||
| hc | ||
| mips | ||
| misoc | ||
| or1k | ||
| renesas | ||
| risc-v | ||
| sim | ||
| sparc | ||
| tricore | ||
| x86 | ||
| x86_64 | ||
| xtensa | ||
| z16 | ||
| z80 | ||
| CMakeLists.txt | ||
| Kconfig | ||