mirror of
https://github.com/apache/nuttx.git
synced 2026-05-13 02:18:38 +08:00
c100e9a9e8
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>