Skip to content

Commit

Permalink
Merge branch 'feature/support_4_line_pdm_rx_on_esp32s3' into 'master'
Browse files Browse the repository at this point in the history
i2s: support 4 line pdm rx on esp32s3

Closes IDF-6120

See merge request espressif/esp-idf!20753
  • Loading branch information
L-KAYA committed Nov 4, 2022
2 parents 8184f03 + fa9b022 commit 48b23b7
Show file tree
Hide file tree
Showing 28 changed files with 203 additions and 73 deletions.
18 changes: 13 additions & 5 deletions components/driver/i2s/i2s_pdm.c
Expand Up @@ -118,9 +118,9 @@ static esp_err_t i2s_pdm_tx_set_gpio(i2s_chan_handle_t handle, const i2s_pdm_tx_
i2s_pdm_tx_config_t *pdm_tx_cfg = (i2s_pdm_tx_config_t *)handle->mode_info;
/* Set data output GPIO */
i2s_gpio_check_and_set(gpio_cfg->dout, i2s_periph_signal[id].data_out_sig, false, false);
#if SOC_I2S_HW_VERSION_2
#if SOC_I2S_PDM_MAX_TX_LINES > 1
if (pdm_tx_cfg->slot_cfg.line_mode == I2S_PDM_TX_TWO_LINE_DAC) {
i2s_gpio_check_and_set(gpio_cfg->dout2, i2s_periph_signal[id].data_out1_sig, false, false);
i2s_gpio_check_and_set(gpio_cfg->dout2, i2s_periph_signal[id].data_out_sigs[1], false, false);
}
#endif

Expand Down Expand Up @@ -393,8 +393,17 @@ static esp_err_t i2s_pdm_rx_set_gpio(i2s_chan_handle_t handle, const i2s_pdm_rx_
ESP_ERR_INVALID_ARG, TAG, "clk gpio is invalid");
ESP_RETURN_ON_FALSE((gpio_cfg->din == -1 || GPIO_IS_VALID_GPIO(gpio_cfg->din)),
ESP_ERR_INVALID_ARG, TAG, "dout gpio is invalid");
i2s_pdm_rx_config_t *pdm_rx_cfg = (i2s_pdm_rx_config_t *)handle->mode_info;
/* Set data input GPIO */
#if SOC_I2S_PDM_MAX_RX_LINES > 1
for (int i = 0; i < SOC_I2S_PDM_MAX_RX_LINES; i++) {
if (pdm_rx_cfg->slot_cfg.slot_mask & (0x03 << (i * 2))) {
i2s_gpio_check_and_set(gpio_cfg->dins[i], i2s_periph_signal[id].data_in_sigs[i], true, false);
}
}
#else
i2s_gpio_check_and_set(gpio_cfg->din, i2s_periph_signal[id].data_in_sig, true, false);
#endif

if (handle->role == I2S_ROLE_SLAVE) {
/* For "tx + rx + slave" or "rx + slave" mode, select RX signal index for ws and bck */
Expand All @@ -410,7 +419,6 @@ static esp_err_t i2s_pdm_rx_set_gpio(i2s_chan_handle_t handle, const i2s_pdm_rx_
i2s_ll_mclk_bind_to_rx_clk(handle->controller->hal.dev);
#endif
/* Update the mode info: gpio configuration */
i2s_pdm_rx_config_t *pdm_rx_cfg = (i2s_pdm_rx_config_t *)handle->mode_info;
memcpy(&(pdm_rx_cfg->gpio_cfg), gpio_cfg, sizeof(i2s_pdm_rx_gpio_config_t));

return ESP_OK;
Expand All @@ -433,9 +441,9 @@ esp_err_t i2s_channel_init_pdm_rx_mode(i2s_chan_handle_t handle, const i2s_pdm_r
}
handle->mode_info = calloc(1, sizeof(i2s_pdm_rx_config_t));
ESP_GOTO_ON_FALSE(handle->mode_info, ESP_ERR_NO_MEM, err, TAG, "no memory for storing the configurations");
ESP_GOTO_ON_ERROR(i2s_pdm_rx_set_gpio(handle, &pdm_rx_cfg->gpio_cfg), err, TAG, "initialize channel failed while setting gpio pins");
/* i2s_set_pdm_rx_slot should be called before i2s_set_pdm_rx_clock while initializing, because clock is relay on the slot */
/* i2s_set_pdm_rx_slot should be called before i2s_set_pdm_rx_clock and i2s_pdm_rx_set_gpio while initializing, because clock is relay on the slot */
ESP_GOTO_ON_ERROR(i2s_pdm_rx_set_slot(handle, &pdm_rx_cfg->slot_cfg), err, TAG, "initialize channel failed while setting slot");
ESP_GOTO_ON_ERROR(i2s_pdm_rx_set_gpio(handle, &pdm_rx_cfg->gpio_cfg), err, TAG, "initialize channel failed while setting gpio pins");
#if SOC_I2S_SUPPORTS_APLL
/* Enable APLL and acquire its lock when the clock source is APLL */
if (pdm_rx_cfg->clk_cfg.clk_src == I2S_CLK_SRC_APLL) {
Expand Down
9 changes: 6 additions & 3 deletions components/driver/include/driver/i2s_pdm.h
Expand Up @@ -75,8 +75,11 @@ typedef struct {
* @brief I2S PDM tx mode GPIO pins configuration
*/
typedef struct {
gpio_num_t clk; /*!< PDM clk pin, output */
gpio_num_t din; /*!< DATA pin, input */
gpio_num_t clk; /*!< PDM clk pin, output */
union {
gpio_num_t din; /*!< DATA pin 0, input */
gpio_num_t dins[SOC_I2S_PDM_MAX_RX_LINES]; /*!< DATA pins, input, only take effect when corresponding I2S_PDM_RX_LINEx_SLOT_xxx is enabled in i2s_pdm_rx_slot_config_t::slot_mask */
};
struct {
uint32_t clk_inv: 1; /*!< Set 1 to invert the clk output */
} invert_flags; /*!< GPIO pin invert flags */
Expand Down Expand Up @@ -280,7 +283,7 @@ typedef struct {
typedef struct {
gpio_num_t clk; /*!< PDM clk pin, output */
gpio_num_t dout; /*!< DATA pin, output */
#if SOC_I2S_HW_VERSION_2
#if SOC_I2S_PDM_MAX_TX_LINES > 1
gpio_num_t dout2; /*!< The second data pin for the DAC dual-line mode,
* only take effect when the line mode is `I2S_PDM_TX_TWO_LINE_DAC`
*/
Expand Down
13 changes: 9 additions & 4 deletions components/hal/i2s_hal.c
Expand Up @@ -145,7 +145,7 @@ void i2s_hal_pdm_set_tx_slot(i2s_hal_context_t *hal, bool is_slave, const i2s_ha
i2s_ll_tx_force_enable_fifo_mod(hal->dev, true);
i2s_ll_tx_set_sample_bit(hal->dev, slot_bit_width, slot_cfg->data_bit_width);
i2s_ll_tx_enable_mono_mode(hal->dev, is_mono);
i2s_ll_tx_select_pdm_slot(hal->dev, slot_cfg->pdm_tx.slot_mask, is_mono);
i2s_ll_tx_select_pdm_slot(hal->dev, slot_cfg->pdm_tx.slot_mask & I2S_STD_SLOT_BOTH, is_mono);
i2s_ll_tx_enable_msb_right(hal->dev, false);
i2s_ll_tx_enable_right_first(hal->dev, false);
#elif SOC_I2S_HW_VERSION_2
Expand Down Expand Up @@ -202,10 +202,15 @@ void i2s_hal_pdm_set_rx_slot(i2s_hal_context_t *hal, bool is_slave, const i2s_ha
#elif SOC_I2S_HW_VERSION_2
i2s_ll_tx_set_half_sample_bit(hal->dev, 16);
i2s_ll_rx_enable_mono_mode(hal->dev, false);
#if SOC_I2S_PDM_MAX_RX_LINES > 1
uint32_t slot_mask = (slot_cfg->slot_mode == I2S_SLOT_MODE_STEREO && slot_cfg->pdm_rx.slot_mask <= I2S_PDM_SLOT_BOTH) ?
I2S_PDM_SLOT_BOTH : slot_cfg->pdm_rx.slot_mask;
#else
/* Set the channel mask to enable corresponding slots, always enable two slots for stereo mode */
i2s_ll_rx_set_active_chan_mask(hal->dev, slot_cfg->slot_mode == I2S_SLOT_MODE_STEREO ?
I2S_PDM_SLOT_BOTH : slot_cfg->pdm_rx.slot_mask);
#endif
uint32_t slot_mask = slot_cfg->slot_mode == I2S_SLOT_MODE_STEREO ? I2S_PDM_SLOT_BOTH : slot_cfg->pdm_rx.slot_mask;
#endif // SOC_I2S_SUPPORTS_PDM_RX > 1
i2s_ll_rx_set_active_chan_mask(hal->dev, slot_mask);
#endif // SOC_I2S_SUPPORTS_PDM_RX
}

void i2s_hal_pdm_enable_rx_channel(i2s_hal_context_t *hal)
Expand Down
12 changes: 12 additions & 0 deletions components/hal/include/hal/i2s_types.h
Expand Up @@ -141,6 +141,18 @@ typedef enum {
I2S_PDM_SLOT_RIGHT = BIT(0), /*!< I2S PDM only transmits or receives the PDM device whose 'select' pin is pulled up */
I2S_PDM_SLOT_LEFT = BIT(1), /*!< I2S PDM only transmits or receives the PDM device whose 'select' pin is pulled down */
I2S_PDM_SLOT_BOTH = BIT(0) | BIT(1), /*!< I2S PDM transmits or receives both two slots */
#if SOC_I2S_PDM_MAX_RX_LINES > 1
/* The following enumerators are only used in multi-line PDM RX mode */
I2S_PDM_RX_LINE0_SLOT_RIGHT = I2S_PDM_SLOT_RIGHT, /*!< I2S PDM receives the right slot on line 0 */
I2S_PDM_RX_LINE0_SLOT_LEFT = I2S_PDM_SLOT_LEFT, /*!< I2S PDM receives the left slot on line 0 */
I2S_PDM_RX_LINE1_SLOT_RIGHT = BIT(2), /*!< I2S PDM receives the right slot on line 1 */
I2S_PDM_RX_LINE1_SLOT_LEFT = BIT(3), /*!< I2S PDM receives the left slot on line 1 */
I2S_PDM_RX_LINE2_SLOT_RIGHT = BIT(4), /*!< I2S PDM receives the right slot on line 2 */
I2S_PDM_RX_LINE2_SLOT_LEFT = BIT(5), /*!< I2S PDM receives the left slot on line 2 */
I2S_PDM_RX_LINE3_SLOT_RIGHT = BIT(6), /*!< I2S PDM receives the right slot on line 3 */
I2S_PDM_RX_LINE3_SLOT_LEFT = BIT(7), /*!< I2S PDM receives the left slot on line 3 */
I2S_PDM_LINE_SLOT_ALL = 0x00ff, /*!< I2S PDM receives all slots */
#endif
} i2s_pdm_slot_mask_t;

#if SOC_I2S_SUPPORTS_TDM
Expand Down
2 changes: 0 additions & 2 deletions components/soc/esp32/i2s_periph.c
Expand Up @@ -25,7 +25,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_rx_ws_sig = I2S0I_WS_IN_IDX,

.data_out_sig = I2S0O_DATA_OUT23_IDX,
.data_out1_sig = -1,
.data_in_sig = I2S0I_DATA_IN15_IDX,

.irq = ETS_I2S0_INTR_SOURCE,
Expand All @@ -45,7 +44,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_rx_ws_sig = I2S1I_WS_IN_IDX,

.data_out_sig = I2S1O_DATA_OUT23_IDX,
.data_out1_sig = -1,
.data_in_sig = I2S1I_DATA_IN15_IDX,

.irq = ETS_I2S1_INTR_SOURCE,
Expand Down
8 changes: 8 additions & 0 deletions components/soc/esp32/include/soc/Kconfig.soc_caps.in
Expand Up @@ -307,10 +307,18 @@ config SOC_I2S_SUPPORTS_PDM_TX
bool
default y

config SOC_I2S_PDM_MAX_TX_LINES
int
default 1

config SOC_I2S_SUPPORTS_PDM_RX
bool
default y

config SOC_I2S_PDM_MAX_RX_LINES
int
default 1

config SOC_I2S_SUPPORTS_ADC_DAC
bool
default y
Expand Down
2 changes: 2 additions & 0 deletions components/soc/esp32/include/soc/soc_caps.h
Expand Up @@ -187,7 +187,9 @@
#define SOC_I2S_SUPPORTS_APLL (1)
#define SOC_I2S_SUPPORTS_PDM (1)
#define SOC_I2S_SUPPORTS_PDM_TX (1)
#define SOC_I2S_PDM_MAX_TX_LINES (1U)
#define SOC_I2S_SUPPORTS_PDM_RX (1)
#define SOC_I2S_PDM_MAX_RX_LINES (1U)
#define SOC_I2S_SUPPORTS_ADC_DAC (1)
#define SOC_I2S_SUPPORTS_ADC (1)
#define SOC_I2S_SUPPORTS_DAC (1)
Expand Down
4 changes: 2 additions & 2 deletions components/soc/esp32c3/i2s_periph.c
Expand Up @@ -24,8 +24,8 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_tx_ws_sig = I2SO_WS_IN_IDX,
.s_rx_ws_sig = I2SI_WS_IN_IDX,

.data_out_sig = I2SO_SD_OUT_IDX,
.data_out1_sig = I2SO_SD1_OUT_IDX,
.data_out_sigs[0] = I2SO_SD_OUT_IDX,
.data_out_sigs[1] = I2SO_SD1_OUT_IDX,
.data_in_sig = I2SI_SD_IN_IDX,

.irq = -1,
Expand Down
6 changes: 3 additions & 3 deletions components/soc/esp32c3/include/soc/Kconfig.soc_caps.in
Expand Up @@ -383,9 +383,9 @@ config SOC_I2S_SUPPORTS_PDM_TX
bool
default y

config SOC_I2S_SUPPORTS_PDM_CODEC
bool
default y
config SOC_I2S_PDM_MAX_TX_LINES
int
default 2

config SOC_I2S_SUPPORTS_TDM
bool
Expand Down
2 changes: 1 addition & 1 deletion components/soc/esp32c3/include/soc/gpio_sig_map.h
Expand Up @@ -92,7 +92,7 @@
#define GPIO_SD1_OUT_IDX 56
#define GPIO_SD2_OUT_IDX 57
#define GPIO_SD3_OUT_IDX 58
#define I2SO_SD1_OUT_IDX 59
#define I2SO_SD1_OUT_IDX 59 // Only used in I2S PDM TX mode
#define FSPICLK_IN_IDX 63
#define FSPICLK_OUT_IDX 63
#define FSPIQ_IN_IDX 64
Expand Down
2 changes: 1 addition & 1 deletion components/soc/esp32c3/include/soc/soc_caps.h
Expand Up @@ -186,7 +186,7 @@
#define SOC_I2S_SUPPORTS_PCM (1)
#define SOC_I2S_SUPPORTS_PDM (1)
#define SOC_I2S_SUPPORTS_PDM_TX (1)
#define SOC_I2S_SUPPORTS_PDM_CODEC (1)
#define SOC_I2S_PDM_MAX_TX_LINES (2)
#define SOC_I2S_SUPPORTS_TDM (1)

/*-------------------------- LEDC CAPS ---------------------------------------*/
Expand Down
3 changes: 2 additions & 1 deletion components/soc/esp32c6/i2s_periph.c
Expand Up @@ -24,7 +24,8 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_tx_ws_sig = I2SO_WS_IN_IDX,
.s_rx_ws_sig = I2SI_WS_IN_IDX,

.data_out_sig = I2SO_SD_OUT_IDX,
.data_out_sigs[0] = I2SO_SD_OUT_IDX,
.data_out_sigs[1] = I2SO_SD1_OUT_IDX,
.data_in_sig = I2SI_SD_IN_IDX,

.irq = -1,
Expand Down
6 changes: 3 additions & 3 deletions components/soc/esp32c6/include/soc/Kconfig.soc_caps.in
Expand Up @@ -315,9 +315,9 @@ config SOC_I2S_SUPPORTS_PDM_TX
bool
default y

config SOC_I2S_SUPPORTS_PDM_CODEC
bool
default y
config SOC_I2S_PDM_MAX_TX_LINES
int
default 2

config SOC_I2S_SUPPORTS_TDM
bool
Expand Down
2 changes: 1 addition & 1 deletion components/soc/esp32c6/include/soc/soc_caps.h
Expand Up @@ -194,7 +194,7 @@
#define SOC_I2S_SUPPORTS_PCM (1)
#define SOC_I2S_SUPPORTS_PDM (1)
#define SOC_I2S_SUPPORTS_PDM_TX (1)
#define SOC_I2S_SUPPORTS_PDM_CODEC (1)
#define SOC_I2S_PDM_MAX_TX_LINES (2)
#define SOC_I2S_SUPPORTS_TDM (1)

// TODO: IDF-5328 (Copy from esp32c3, need check)
Expand Down
4 changes: 2 additions & 2 deletions components/soc/esp32h2/i2s_periph.c
Expand Up @@ -24,8 +24,8 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_tx_ws_sig = I2SO_WS_IN_IDX,
.s_rx_ws_sig = I2SI_WS_IN_IDX,

.data_out_sig = I2SO_SD_OUT_IDX,
.data_out1_sig = I2SO_SD1_OUT_IDX,
.data_out_sigs[0] = I2SO_SD_OUT_IDX,
.data_out_sigs[1] = I2SO_SD1_OUT_IDX,
.data_in_sig = I2SI_SD_IN_IDX,

.irq = ETS_I2S1_INTR_SOURCE,
Expand Down
6 changes: 3 additions & 3 deletions components/soc/esp32h2/include/soc/Kconfig.soc_caps.in
Expand Up @@ -359,9 +359,9 @@ config SOC_I2S_SUPPORTS_PDM_TX
bool
default y

config SOC_I2S_SUPPORTS_PDM_CODEC
bool
default y
config SOC_I2S_PDM_MAX_TX_LINES
int
default 2

config SOC_I2S_SUPPORTS_TDM
bool
Expand Down
2 changes: 1 addition & 1 deletion components/soc/esp32h2/include/soc/soc_caps.h
Expand Up @@ -192,7 +192,7 @@
#define SOC_I2S_SUPPORTS_PCM (1)
#define SOC_I2S_SUPPORTS_PDM (1)
#define SOC_I2S_SUPPORTS_PDM_TX (1)
#define SOC_I2S_SUPPORTS_PDM_CODEC (1)
#define SOC_I2S_PDM_MAX_TX_LINES (2)
#define SOC_I2S_SUPPORTS_TDM (1)

/*-------------------------- LEDC CAPS ---------------------------------------*/
Expand Down
1 change: 0 additions & 1 deletion components/soc/esp32s2/i2s_periph.c
Expand Up @@ -25,7 +25,6 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_rx_ws_sig = I2S0I_WS_IN_IDX,

.data_out_sig = I2S0O_DATA_OUT23_IDX,
.data_out1_sig = -1,
.data_in_sig = I2S0I_DATA_IN15_IDX,

.irq = ETS_I2S0_INTR_SOURCE,
Expand Down
18 changes: 12 additions & 6 deletions components/soc/esp32s3/i2s_periph.c
Expand Up @@ -24,9 +24,12 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_tx_ws_sig = I2S0O_WS_IN_IDX,
.s_rx_ws_sig = I2S0I_WS_IN_IDX,

.data_out_sig = I2S0O_SD_OUT_IDX,
.data_out1_sig = I2S0O_SD1_OUT_IDX,
.data_in_sig = I2S0I_SD_IN_IDX,
.data_out_sigs[0] = I2S0O_SD_OUT_IDX,
.data_out_sigs[1] = I2S0O_SD1_OUT_IDX,
.data_in_sigs[0] = I2S0I_SD_IN_IDX,
.data_in_sigs[1] = I2S0I_SD1_IN_IDX,
.data_in_sigs[2] = I2S0I_SD2_IN_IDX,
.data_in_sigs[3] = I2S0I_SD3_IN_IDX,

.irq = -1,
.module = PERIPH_I2S0_MODULE,
Expand All @@ -44,9 +47,12 @@ const i2s_signal_conn_t i2s_periph_signal[SOC_I2S_NUM] = {
.s_tx_ws_sig = I2S1O_WS_IN_IDX,
.s_rx_ws_sig = I2S1I_WS_IN_IDX,

.data_out_sig = I2S1O_SD_OUT_IDX,
.data_out1_sig = -1,
.data_in_sig = I2S1I_SD_IN_IDX,
.data_out_sigs[0] = I2S1O_SD_OUT_IDX,
.data_out_sigs[1] = -1,
.data_in_sigs[0] = I2S1I_SD_IN_IDX,
.data_in_sigs[1] = -1,
.data_in_sigs[2] = -1,
.data_in_sigs[3] = -1,

.irq = -1,
.module = PERIPH_I2S1_MODULE,
Expand Down
10 changes: 7 additions & 3 deletions components/soc/esp32s3/include/soc/Kconfig.soc_caps.in
Expand Up @@ -447,13 +447,17 @@ config SOC_I2S_SUPPORTS_PDM_TX
bool
default y

config SOC_I2S_PDM_MAX_TX_LINES
int
default 2

config SOC_I2S_SUPPORTS_PDM_RX
bool
default y

config SOC_I2S_SUPPORTS_PDM_CODEC
bool
default y
config SOC_I2S_PDM_MAX_RX_LINES
int
default 4

config SOC_I2S_SUPPORTS_TDM
bool
Expand Down
26 changes: 9 additions & 17 deletions components/soc/esp32s3/include/soc/gpio_sig_map.h
@@ -1,16 +1,8 @@
// Copyright 2017-2021 Espressif Systems (Shanghai) PTE LTD
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at

// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
/*
* SPDX-FileCopyrightText: 2017-2022 Espressif Systems (Shanghai) CO LTD
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef _SOC_GPIO_SIG_MAP_H_
#define _SOC_GPIO_SIG_MAP_H_

Expand Down Expand Up @@ -113,11 +105,11 @@
#define BB_DIAG14_IDX 49
#define GPIO_BT_PRIORITY_IDX 50
#define BB_DIAG15_IDX 50
#define I2S0I_SD1_IN_IDX 51
#define I2S0I_SD1_IN_IDX 51 // Only used in I2S PDM RX mode
#define BB_DIAG16_IDX 51
#define I2S0I_SD2_IN_IDX 52
#define I2S0I_SD2_IN_IDX 52 // Only used in I2S PDM RX mode
#define BB_DIAG17_IDX 52
#define I2S0I_SD3_IN_IDX 53
#define I2S0I_SD3_IN_IDX 53 // Only used in I2S PDM RX mode
#define BB_DIAG18_IDX 53
#define CORE1_GPIO_IN7_IDX 54
#define CORE1_GPIO_OUT7_IDX 54
Expand Down Expand Up @@ -232,7 +224,7 @@
#define SUBSPICS1_OUT_IDX 125
#define FSPIDQS_OUT_IDX 126
#define SPI3_CS2_OUT_IDX 127
#define I2S0O_SD1_OUT_IDX 128
#define I2S0O_SD1_OUT_IDX 128 // Only used in I2S PDM TX mode
#define CORE1_GPIO_IN0_IDX 129
#define CORE1_GPIO_OUT0_IDX 129
#define CORE1_GPIO_IN1_IDX 130
Expand Down
3 changes: 2 additions & 1 deletion components/soc/esp32s3/include/soc/soc_caps.h
Expand Up @@ -187,8 +187,9 @@
#define SOC_I2S_SUPPORTS_PCM (1)
#define SOC_I2S_SUPPORTS_PDM (1)
#define SOC_I2S_SUPPORTS_PDM_TX (1)
#define SOC_I2S_PDM_MAX_TX_LINES (2)
#define SOC_I2S_SUPPORTS_PDM_RX (1)
#define SOC_I2S_SUPPORTS_PDM_CODEC (1)
#define SOC_I2S_PDM_MAX_RX_LINES (4)
#define SOC_I2S_SUPPORTS_TDM (1)

/*-------------------------- LEDC CAPS ---------------------------------------*/
Expand Down

0 comments on commit 48b23b7

Please sign in to comment.