From 22531d2a9fe6f018295db4ac443de0c937f247c2 Mon Sep 17 00:00:00 2001 From: laokaiyao Date: Fri, 18 Nov 2022 10:40:03 +0800 Subject: [PATCH] i2s: fixed tdm mclk doubled issue Closes: https://github.com/espressif/esp-idf/issues/10196 --- components/driver/i2s/i2s_tdm.c | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/components/driver/i2s/i2s_tdm.c b/components/driver/i2s/i2s_tdm.c index 921d05804f..d28ad07fc6 100644 --- a/components/driver/i2s/i2s_tdm.c +++ b/components/driver/i2s/i2s_tdm.c @@ -40,14 +40,12 @@ static esp_err_t i2s_tdm_calculate_clock(i2s_chan_handle_t handle, const i2s_tdm clk_info->bclk = rate * handle->total_slot * slot_bits; clk_info->mclk = rate * clk_cfg->mclk_multiple; clk_info->bclk_div = clk_info->mclk / clk_info->bclk; - /* While RECEIVING multiple slots, the data will go wrong if the bclk_div is euqal or smaller than 2 */ - do { - clk_info->mclk *= 2; - clk_info->bclk_div = clk_info->mclk / clk_info->bclk; - if (clk_info->bclk_div <= 2) { - ESP_LOGW(TAG, "the current mclk multiple is too small, adjust the mclk multiple to %"PRIu32, clk_info->mclk / rate); - } - } while (clk_info->bclk_div <= 2); + /* While RECEIVING multiple slots, the data will go wrong if the bclk_div is equal or smaller than 2 */ + if (clk_info->bclk_div <= 2) { + clk_info->bclk_div = 3; + clk_info->mclk = clk_info->bclk * clk_info->bclk_div; + ESP_LOGW(TAG, "the current mclk multiple is too small, adjust the mclk multiple to %"PRIu32, clk_info->mclk / rate); + } } else { if (clk_cfg->bclk_div < 8) { ESP_LOGW(TAG, "the current bclk division is too small, adjust the bclk division to 8");