Browse Source

drivers: adc: stm32: driver now agnostic of actual dma name

Previously the STM32 DMA driver was dependent on a very specific
name for the DMA in the DTS. This hidden requirement has caused
a bit of confusion. This commit changes the driver to instead
always use the first DMA listed in the ADC node's dma property.

Should fix: #65387

Signed-off-by: Hein Wessels <heinwessels93@gmail.com>
pull/65678/head
Hein Wessels 2 years ago committed by Carles Cufí
parent
commit
f27e45473a
  1. 34
      drivers/adc/adc_stm32.c

34
drivers/adc/adc_stm32.c

@ -1521,39 +1521,39 @@ static void adc_stm32_irq_init(void) @@ -1521,39 +1521,39 @@ static void adc_stm32_irq_init(void)
#define ADC_STM32_IRQ_CONFIG(index)
#define ADC_STM32_IRQ_FUNC(index) \
.irq_cfg_func = adc_stm32_irq_init,
#define ADC_DMA_CHANNEL(id, dir, DIR, src, dest)
#define ADC_DMA_CHANNEL(id, src, dest)
#elif defined(CONFIG_ADC_STM32_DMA) /* !CONFIG_ADC_STM32_SHARED_IRQS */
#define ADC_DMA_CHANNEL_INIT(index, name, dir_cap, src_dev, dest_dev) \
#define ADC_DMA_CHANNEL_INIT(index, src_dev, dest_dev) \
.dma = { \
.dma_dev = DEVICE_DT_GET(STM32_DMA_CTLR(index, name)), \
.channel = DT_INST_DMAS_CELL_BY_NAME(index, name, channel), \
.dma_dev = DEVICE_DT_GET(DT_INST_DMAS_CTLR_BY_IDX(index, 0)), \
.channel = STM32_DMA_SLOT_BY_IDX(index, 0, channel), \
.dma_cfg = { \
.dma_slot = STM32_DMA_SLOT(index, name, slot), \
.dma_slot = STM32_DMA_SLOT_BY_IDX(index, 0, slot), \
.channel_direction = STM32_DMA_CONFIG_DIRECTION( \
STM32_DMA_CHANNEL_CONFIG(index, name)), \
STM32_DMA_CHANNEL_CONFIG_BY_IDX(index, 0)), \
.source_data_size = STM32_DMA_CONFIG_##src_dev##_DATA_SIZE( \
STM32_DMA_CHANNEL_CONFIG(index, name)), \
STM32_DMA_CHANNEL_CONFIG_BY_IDX(index, 0)), \
.dest_data_size = STM32_DMA_CONFIG_##dest_dev##_DATA_SIZE( \
STM32_DMA_CHANNEL_CONFIG(index, name)), \
STM32_DMA_CHANNEL_CONFIG_BY_IDX(index, 0)), \
.source_burst_length = 1, /* SINGLE transfer */ \
.dest_burst_length = 1, /* SINGLE transfer */ \
.channel_priority = STM32_DMA_CONFIG_PRIORITY( \
STM32_DMA_CHANNEL_CONFIG(index, name)), \
STM32_DMA_CHANNEL_CONFIG_BY_IDX(index, 0)), \
.dma_callback = dma_callback, \
.block_count = 2, \
}, \
.src_addr_increment = STM32_DMA_CONFIG_##src_dev##_ADDR_INC( \
STM32_DMA_CHANNEL_CONFIG(index, name)), \
STM32_DMA_CHANNEL_CONFIG_BY_IDX(index, 0)), \
.dst_addr_increment = STM32_DMA_CONFIG_##dest_dev##_ADDR_INC( \
STM32_DMA_CHANNEL_CONFIG(index, name)), \
STM32_DMA_CHANNEL_CONFIG_BY_IDX(index, 0)), \
}
#define ADC_DMA_CHANNEL(id, dir, DIR, src, dest) \
COND_CODE_1(DT_INST_DMAS_HAS_NAME(id, dir), \
(ADC_DMA_CHANNEL_INIT(id, dir, DIR, src, dest)), \
(EMPTY))
#define ADC_DMA_CHANNEL(id, src, dest) \
COND_CODE_1(DT_INST_DMAS_HAS_IDX(id, 0), \
(ADC_DMA_CHANNEL_INIT(id, src, dest)), \
(/* Required for other adc instances without dma */))
#define ADC_STM32_IRQ_CONFIG(index) \
static void adc_stm32_cfg_func_##index(void){ EMPTY }
@ -1572,7 +1572,7 @@ static void adc_stm32_cfg_func_##index(void) \ @@ -1572,7 +1572,7 @@ static void adc_stm32_cfg_func_##index(void) \
}
#define ADC_STM32_IRQ_FUNC(index) \
.irq_cfg_func = adc_stm32_cfg_func_##index,
#define ADC_DMA_CHANNEL(id, dir, DIR, src, dest)
#define ADC_DMA_CHANNEL(id, src, dest)
#endif /* CONFIG_ADC_STM32_DMA && CONFIG_ADC_STM32_SHARED_IRQS */
@ -1605,7 +1605,7 @@ static struct adc_stm32_data adc_stm32_data_##index = { \ @@ -1605,7 +1605,7 @@ static struct adc_stm32_data adc_stm32_data_##index = { \
ADC_CONTEXT_INIT_TIMER(adc_stm32_data_##index, ctx), \
ADC_CONTEXT_INIT_LOCK(adc_stm32_data_##index, ctx), \
ADC_CONTEXT_INIT_SYNC(adc_stm32_data_##index, ctx), \
ADC_DMA_CHANNEL(index, dmamux, NULL, PERIPHERAL, MEMORY) \
ADC_DMA_CHANNEL(index, PERIPHERAL, MEMORY) \
}; \
\
PM_DEVICE_DT_INST_DEFINE(index, adc_stm32_pm_action); \

Loading…
Cancel
Save