Fix platform_rmt_allocate for esp32-S3

By not relying on ifdefing for specific targets, but instead using the
SOC_RMT_xxx macros to figure it out.
This commit is contained in:
Tom Sutcliffe 2023-05-10 18:12:15 +01:00 committed by Johny Mattsson
parent 1b38d8e6eb
commit 7155d7197a
1 changed files with 6 additions and 10 deletions

View File

@ -24,19 +24,19 @@ static bool rmt_channel_check( uint8_t channel, uint8_t num_mem )
return rmt_channel_check( channel-1, num_mem-1);
}
#if defined(CONFIG_IDF_TARGET_ESP32C3)
int platform_rmt_allocate( uint8_t num_mem, rmt_mode_t mode )
#else
int platform_rmt_allocate( uint8_t num_mem, rmt_mode_t mode __attribute__((unused)))
#endif
{
int channel;
int alloc_min;
int alloc_max;
uint8_t tag = 1;
#if defined(CONFIG_IDF_TARGET_ESP32C3)
/* The ESP32-C3 is limited to TX on channel 0-1 and RX on channel 2-3. */
#if SOC_RMT_TX_CANDIDATES_PER_GROUP == SOC_RMT_CHANNELS_PER_GROUP
alloc_min = 0;
alloc_max = RMT_CHANNEL_MAX - 1;
#else
/* On platforms where channels cannot do both TX and RX, the TX ones always
seem to start at index 0, and are then followed by the RX channels. */
if( mode==RMT_MODE_TX ) {
alloc_min = 0;
alloc_max = SOC_RMT_TX_CANDIDATES_PER_GROUP - 1;
@ -44,10 +44,6 @@ int platform_rmt_allocate( uint8_t num_mem, rmt_mode_t mode __attribute__((unuse
alloc_min = RMT_CHANNEL_MAX - SOC_RMT_RX_CANDIDATES_PER_GROUP;
alloc_max = RMT_CHANNEL_MAX - 1;
}
#else
/* The other ESP32 devices can do RX and TX on all channels. */
alloc_min = 0;
alloc_max = RMT_CHANNEL_MAX - 1;
#endif
for (channel = alloc_max; channel >= alloc_min; channel--) {