diff --git a/components/driver/i2s/i2s_std.c b/components/driver/i2s/i2s_std.c index 69251c4524..1a70e5852a 100644 --- a/components/driver/i2s/i2s_std.c +++ b/components/driver/i2s/i2s_std.c @@ -58,7 +58,9 @@ static esp_err_t i2s_std_set_clock(i2s_chan_handle_t handle, const i2s_std_clk_c { esp_err_t ret = ESP_OK; i2s_std_config_t *std_cfg = (i2s_std_config_t *)(handle->mode_info); - ESP_RETURN_ON_FALSE(std_cfg->slot_cfg.data_bit_width != I2S_DATA_BIT_WIDTH_24BIT || + i2s_data_bit_width_t real_slot_bit = (int)std_cfg->slot_cfg.slot_bit_width < (int)std_cfg->slot_cfg.data_bit_width ? + std_cfg->slot_cfg.data_bit_width : std_cfg->slot_cfg.slot_bit_width; + ESP_RETURN_ON_FALSE(real_slot_bit != I2S_DATA_BIT_WIDTH_24BIT || (clk_cfg->mclk_multiple % 3 == 0), ESP_ERR_INVALID_ARG, TAG, "The 'mclk_multiple' should be the multiple of 3 while using 24-bit data width"); diff --git a/components/driver/i2s/include/driver/i2s_std.h b/components/driver/i2s/include/driver/i2s_std.h index 1080019e96..6930e3b51a 100644 --- a/components/driver/i2s/include/driver/i2s_std.h +++ b/components/driver/i2s/include/driver/i2s_std.h @@ -145,7 +145,7 @@ extern "C" { .ws_width = bits_per_sample, \ .ws_pol = false, \ .bit_shift = true, \ - .left_align = false, \ + .left_align = true, \ .big_endian = false, \ .bit_order_lsb = false \ } @@ -164,7 +164,7 @@ extern "C" { .ws_width = 1, \ .ws_pol = true, \ .bit_shift = true, \ - .left_align = false, \ + .left_align = true, \ .big_endian = false, \ .bit_order_lsb = false \ } @@ -182,7 +182,7 @@ extern "C" { .ws_width = bits_per_sample, \ .ws_pol = false, \ .bit_shift = false, \ - .left_align = false, \ + .left_align = true, \ .big_endian = false, \ .bit_order_lsb = false \ }